上一篇文章介绍了Redis主从复制实现了redis高可用,但是主从复制存在着一些问题:
1. 当master节点出现故障时,往往需要手动进行故障的转移(这里的手动也指写脚本之类的)
2. 当master节点出现故障时,就导致了另一个问题:写能力和存储能力受到限制
本次通过redis-sentinel哨兵实现故障的自动转移
redis-sentinel故障转移的流程:
1.当多个sentinel发现并确认了master有问题
2.接着会选举出一个sentinel作为领导
3.再选举出一个slave作为master
4.通知其余的slave,新的master是谁
5.通知客户端一个主从的变化
6.最后,sentinel会等待旧的master复活,然后将新master成为slave
实操演练:
首先启动三个redis节点(redis-7000, redis-7001, redis-7002),一主两从模式,基本配置如下
主节点:redis-7000.conf
port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
logfile "7000.log"
dir "/opt/redis/data"
从节点:redis-7001.conf redis-7002.conf
port 7001(redis-7002.conf是7002)
daemonize yes
pidfile /var/run/redis-7000.pid (redis-7002.conf是7002 )
logfile "7000.log" (redis-7002.conf是7002 )
dir "/opt/redis/data"
slaveof 127.0.0.1 7000
验证:进入任意一个redis节点,执行info replication命令即可查看当前节点的状态
可以看出端口7000的节点时master节点
可以看出当前节点时slave从节点,并且可以看出该从节点的主节点地址
其次启动三个哨兵(redis-26379, redis-26380, redis-26381)
配置(三个配置基本相似, 就端口号的地方改一下)
port 26379
daemonize yes
dir "/opt/redis/data/sentinel"
logfile "26379.log"
sentinel monitor mymaster 127.0.0.1 7000 2