说明

redis主从复制:仅仅解决的是我们redis数据冗余备份,从节点只是用来备份数据。无法解决 当master 节点出现故障的时候实现自动故障转移
本章将介绍使用redis哨兵模式解决当master解决发生故障时候,实现自动故障转移问题

创建哨兵配置文件 (sentinel.conf)

为了方便起见,我们就把 sentinel.conf 文件放在 master 文件夹下(与master的redis.conf 文件放一起)

  1. vim /root/master/sentinel.conf

内容如下:

  1. sentinel monitor mymaster 192.168.3.18 6379 1

解释:
填写的格式是这样的:

  1. sentinel monitor <master-name> <ip> <redis-port> <quorum>
  2. master-name 给这些监听的哨兵取个名字(可以随便取)
  3. ip master节点的ip
  4. redis-port 启动master节点的redis端口
  5. quorum 至少有 quorum (这里填写数量)个哨兵
  6. 也就是说至少有 quorum 个哨兵任务它(master)挂了,才会开启自动故障转移

启动redis主从模式

  1. /usr/local/redis/bin/redis-server /root/master/redis.conf
  2. /usr/local/redis/bin/redis-server /root/slave1/redis.conf
  3. /usr/local/redis/bin/redis-server /root/slave2/redis.conf

启动哨兵模式

  1. /usr/local/redis/bin/redis-sentinel /root/master/sentinel.conf

如图:
Redis哨兵模式 - 图1

测试

当前 master 为 6379端口,我们将这个程序给 kill 掉,然后观察 哨兵会不会给我们自动从 6380 和 6381 端口中选出一个来做新的 master?
关闭 master 为 6379的 redis程序:
Redis哨兵模式 - 图2
哨兵程序的输出日志:
Redis哨兵模式 - 图3
测试新选出的 master 是否可写:
过程省略
重启 6379端口的 redis,观察其是否成为新的 slave?

补充

当前启动 哨兵程序时,哨兵配置文件会发生变化

  1. [root@localhost master]# cat sentinel.conf
  2. sentinel myid 9d492f6670fc3017b1c4257a4529d2c52920b23d
  3. # Generated by CONFIG REWRITE
  4. port 26379
  5. dir "/root/master"
  6. sentinel deny-scripts-reconfig yes
  7. sentinel monitor mymaster 192.168.3.18 6381 1
  8. sentinel config-epoch mymaster 1
  9. sentinel leader-epoch mymaster 1
  10. sentinel known-slave mymaster 192.168.3.18 6380
  11. sentinel known-slave mymaster 192.168.3.18 6379
  12. sentinel current-epoch 1