说明
redis主从复制:仅仅解决的是我们redis数据冗余备份,从节点只是用来备份数据。无法解决 当master 节点出现故障的时候实现自动故障转移
本章将介绍使用redis哨兵模式解决当master解决发生故障时候,实现自动故障转移问题
创建哨兵配置文件 (sentinel.conf)
为了方便起见,我们就把 sentinel.conf 文件放在 master 文件夹下(与master的redis.conf 文件放一起)
vim /root/master/sentinel.conf
内容如下:
sentinel monitor mymaster 192.168.3.18 6379 1
解释:
填写的格式是这样的:
sentinel monitor <master-name> <ip> <redis-port> <quorum>
master-name: 给这些监听的哨兵取个名字(可以随便取)
ip: master节点的ip
redis-port: 启动master节点的redis端口
quorum: 至少有 quorum (这里填写数量)个哨兵
也就是说至少有 quorum 个哨兵任务它(master)挂了,才会开启自动故障转移
启动redis主从模式
/usr/local/redis/bin/redis-server /root/master/redis.conf
/usr/local/redis/bin/redis-server /root/slave1/redis.conf
/usr/local/redis/bin/redis-server /root/slave2/redis.conf
启动哨兵模式
/usr/local/redis/bin/redis-sentinel /root/master/sentinel.conf
测试
当前 master 为 6379端口,我们将这个程序给 kill 掉,然后观察 哨兵会不会给我们自动从 6380 和 6381 端口中选出一个来做新的 master?
关闭 master 为 6379的 redis程序:
哨兵程序的输出日志:
测试新选出的 master 是否可写:
过程省略
重启 6379端口的 redis,观察其是否成为新的 slave?
补充
当前启动 哨兵程序时,哨兵配置文件会发生变化
[root@localhost master]# cat sentinel.conf
sentinel myid 9d492f6670fc3017b1c4257a4529d2c52920b23d
# Generated by CONFIG REWRITE
port 26379
dir "/root/master"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.3.18 6381 1
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
sentinel known-slave mymaster 192.168.3.18 6380
sentinel known-slave mymaster 192.168.3.18 6379
sentinel current-epoch 1