Redis集群
为什么要搭建集群
- 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。
- Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。
- Redis作为缓存数据库。但是如何保证数据存储的一致性呢,这时就需要搭建redis集群.采用合理的机制,保证用户的正常的访问需求.
- 采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实现了服务故障的自动迁移.
集群搭建计划
3台主机 3台从机共6台 端口划分7000-7005
前提
我们搭建在linux中,工作目录是
/usr/local/src/redis
集群搭建
1 . 准备集群文件夹
1.1
mkdir cluster
1.2
在cluster文件夹中分别创建7000-7005文件夹
mkdir 7000 7001 7002 7003 7004 7005
2 . 复制配置文件
说明:
将redis根目录中的redis.conf文件复制到cluster/7000/ 并以原名保存
cp redis.conf cluster/7000/
3 . 编辑配置文件
- 1 - 注释本地绑定IP地址
- 2 - 关闭保护模式
- 3 - 修改端口号
- 4 - 启动后台启动
- 5 - 修改pid文件
- 6 - 修改持久化文件路径
- 7 - 设定内存优化策略
- 8 - 关闭AOF模式
- 9 - 开启集群配置
- 10 - 开启集群配置文件
- 11 - 修改集群超时时间
4 . 复制修改后的配置文件
说明:
将7000文件夹下的redis.conf文件分别复制到7001-7005中
[root@localhost cluster]# cp 7000/redis.conf 7001/
[root@localhost cluster]# cp 7000/redis.conf 7002/
[root@localhost cluster]# cp 7000/redis.conf 7003/
[root@localhost cluster]# cp 7000/redis.conf 7004/
[root@localhost cluster]# cp 7000/redis.conf 7005/
5 . 批量修改
说明:
分别将7001-7005文件中的7000改为对应的端口号的名称,修改时注意方向键的使用
流程:
通过 vim 命令来进入配置文件后 输入以下的vim命令
:%s/7000/700/g
说明把配置文件的7000改为70001 后面的 g 是所有的
6 . 通过脚本编辑启动/关闭指令
1 - 创建启动脚本
vim start.sh
2 - 编辑关闭的脚本
vim shutdown.sh
3 - 启动redis节点
sh start.sh
4 - 检查redis节点启动是否正常
ps -eg | grep redis
7 . 创建redis集群
#5.0版本执行 使用C语言内部管理集群
redis-cli --cluster create --cluster-replicas 1 192.168.35.130:7000 192.168.35.130:7001 192.168.35.130:7002 192.168.35.130:7003 192.168.35.130:7004 192.168.35.130:7005
–cluster-replicas 1 :是代表1主1从
问我们是否要集群我们输入yes
master ---- 主机
slave ---- 从机
0-5460 ---- 槽位 (槽位分配给各各的主机)
16384 ---- 总共有 16384个槽位扫描二维码关注公众号,回复: 12543755 查看本文章
测试集群
命令 : (进入redis后输入)
info replication
role – 表示的是从机或者主机 - master (主机) slave(从机)
port – 表示主机是谁或者从机是谁
SpringBoot整合 Redis集群
编辑properties配置文件
#准备6个redis节点
# redis集群的节点
redis.nodes=192.168.126.131:7000,192.168.126.131:7001,192.168.126.131:7002,192.168.126.131:7003,192.168.126.131:7004,192.168.126.131:7005
编辑配置类
获取端口号和节点地址,写以下代码
@Bean //将方法的返回值结果,交给spring容器进行管理.
public JedisCluster jedisCluster(){
Set<HostAndPort> nodesSet= new HashSet<>();
String[] nodeArray=nodes.split(",");
for (String node : nodeArray){
String host = node.split(":")[0];
int port = Integer.parseInt(node.split(":")[1]);
HostAndPort hostAndPort = new HostAndPort(host, port);
nodesSet.add(hostAndPort);
}
return new JedisCluster(nodesSet);
}
编辑CacheAOP