redis的主从模式、哨兵模式、去中心化集群搭建
1.1 主从模式
- 创建一个目录 master-slave
[root@localhost redis-6.2.1]# mkdir master-slave
- 将redis.conf配置文件复制三份并给其重命名到master-slave中
# ①复制
[root@localhost redis-6.2.1]# cp redis.conf master-slave/
#重命名
[root@localhost master-slave]# mv redis.conf redis7001.conf
# ②复制
[root@localhost redis-6.2.1]# cp redis.conf master-slave/
#重命名
[root@localhost master-slave]# mv redis.conf redis7002.conf
# ③复制
[root@localhost redis-6.2.1]# cp redis.conf master-slave/
#重命名
[root@localhost master-slave]# mv redis.conf redis7003.conf
复制三份
- cd到master-slave
[root@localhost redis-6.2.1]# cd master-slave/
ls查看文件
-
修改端口号和rdb持久化文件的名称,并将aof关闭
redis7001.rdb
(1)修改配置端口号
(2)修改rdb持久化文件名称
(3)将aof关闭
redis7002.conf和redis7003.rdb与redis7001.rdb修改内容相同
- 启动三个的redis服务
启动redis客户端
查看三个节点的信息(三个都为主)
使用slaveof 127.0.0.1 7001 将7002和7003绑定到7001上,让7002和7003作为7001的从节点
关系如图
验证:
思考:
-
主节点挂掉,从主节点是上位还是等待主节点的归来。
-
如果这时,有一个新得节点加入到主从上了,新节点是否可以把之前得数据获取。
(自己实验)
2.哨兵模式
-
什么是哨兵模式?
在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。
通俗来讲哨兵模式的出现是就是为了解决我们主从复制模式中需要我们人为操作的东西变为自动版,并且它比人为要更及时
-
哨兵的功能
监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移(Automatic Failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
配置提供者(Configuration Provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
通知(Notification):哨兵可以将故障转移的结果发送给客户端。
其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移;而配置提供者和通知功能,则需要在与客户端的交互中才能体现。
-
代码实现
(1)修改sentinel.conf的配置
[root@localhost redis-6.2.1]# vim sentinel.conf
127.0.0.1 标识的是redis主节点的ip
6379 标识主节点的端口号,这里改为你设置的端口号
2 表示有多少个哨兵选取redis从节点后,该从节点可以当选为主节点。
(2)启动哨兵
[root@localhost redis-6.2.1]# redis-sentinel sentinel.conf
(3)启动7001、7002、7003的redis服务
(4)先将主节点挂掉,等三十秒之后,查看选举的主节点是7003
3.去中心化集群
哨兵模式的缺点:
-
没有解决单节点的问题。
-
持久化文件始终在一个服务器上
实现去中心化要求
配置三主各有一个从
实现:
- 创建一个目录three-master-slave
[root@localhost redis-6.2.1]# mkdir three-master-slave
将redis.conf复制六份到three-master-slave文件中,并cd进去
[root@localhost redis-6.2.1]# cd three-master-slave/
- 修改相关配置
[root@localhost redis-6.2.1]# vim redis8001.conf
(1)修改端口号
(2)daemonize改为yes
(3)appendonly改为yes
(4)开启集群
(5)集群的配置文件,该文件自动生成
(6)集群的超时时间
8002、8003、8004、8005、8006和8001的配置相同
-
启动redis8001~6的reids服务
-
当你在为主节点分配槽以及分配从节点时出现了以下错误
那么就是你的配置文件中设置了密码,那么需要将配置文件中密码命令注释了
-
结束redis8001~6的redis服务进程
-
再次开启redis8001~6服务
-
为主节点分配槽以及分配从节点
[root@localhost three-master-slave]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
记得要yes
必须保证aof开启,保证redis中没有数据。
客户端访问:
redis-cli -c -h 127.0.0.1 -p 8001