哨兵的配置

一个哨兵可以监控多个master-slave的主从架构
相同的一套哨兵集群,可以监控不同的多个redis主从集群。

配置文件: sentinel.conf (路径:redis根目录[/usr/local/redis/redis-5.0.8])

  1. (1) sentinel monitor <master-group-name> <master-ip> <master-port> <quorum>
  2. # <master-group-name> 指定监控的master名称
  3. # <master-ip> 监控master的ip地址
  4. # <master-port> 监控master的端口号
  5. # <quorum> 至少要有quorum个数量的哨兵认为master sdown,才会认为是odown,
  6. 然后进行选举,故障转移
  7. # 如果发生了故障转移,或者新的哨兵进程加入哨兵集群,那么哨兵会自动更新自己的配置文件(master-name, quorum等)
  8. (2) sentinel down-after-milliseconds <master-group-name> <millseconds>
  9. # <master-group-name> 指定监控的master名称
  10. # <millseconds> 哨兵如果在指定毫秒数没有与master通信,就人为master节点实例已经宕机
  11. (3) sentinel failover-timeout <master-group-name> <milliseconds>
  12. #<milliseconds> 故障转移超过指定毫秒数就认为本次故障转移失败
  13. (4) sentinel parallel-syncs <master-group-name> <num-slaves>
  14. # <num-slaves> 指定在主备切换成功后,可以同时有多少个slave节点与新master节点同步数据
  15. 值越小,则整体的同步时间越长
  16. (5) sentinel auth-pass <master-group-name> <password>
  17. # <password> redis-master节点设置了requirepass的值
  18. (6) bind <sentinel-ip>
  19. # <sentinel-ip> 哨兵的ip地址(不要填127.0.0.1)
  20. (7) port <sentinel-port>
  21. # <sentinel-port> 哨兵的端口号
  22. (8) dir <working-directory>
  23. # dir /var/sentinal/5000
  24. # <working-directory> 哨兵的工作目录
  25. (9) daemonize yes
  26. # 设置sentinel以后台守护进程启动
  27. (10) logfile <logfile-path>
  28. # logfile /var/log/sentinel/5000
  29. # sentinel运行日志信息

启动哨兵

启动命令

  1. redis-sentinel <sentinel.conf 路径>
  2. redis-server <sentinel.conf 路径> --sentinel

启动的日志信息示例

image.png

检查哨兵状态

  1. redis-cli -h <redis-ip> -p <redis-sentinel-port>
  2. > sentinel master <master-group-name>
  3. # 查看当前master 主从集群下的master信息
  4. > sentinel slaves <master-group-name>
  5. # 查看当前master 主从集群下的slave信息
  6. > sentinel sentinels <master-group-name>
  7. # 查看当前master 的哨兵集群
  8. > sentinel get-master-addr-by-name <master-group-name>
  9. # 查看当前的master 的ip和port信息

哨兵节点的增加和删除

增加哨兵节点

  1. 1)配置sentincel.conf
  2. 2redis-sentinel <sentinel.conf 路径>

删除哨兵节点

  1. (1) 停止sentinel进程 kill -9 <sentinel-pid>
  2. (2) 在其他节点sentinel使用 SENTINEL RESET * 命令清理master状态
  3. (3) 在其他节点sentinel使用 SENTINEL master <master-name> 查看所有sentinel对数量是否达成一致

基于哨兵集群架构下的安全认证

  1. (1) master上启用安全认证 requirepass -- 6379.conf
  2. (2) slave节点连接master口令 masterauth -- 6379.conf
  3. (3) 哨兵连接master需要口令 sentinel auth-pass <master-group-name> <pass>

容灾演练

  1. (1) 通过哨兵查看一下当前的master SENTINEL get-master-addr-by-name <master-group-name>
  2. (2) master节点kill -9掉,redis_6379.pid文件也删除掉
  3. (3) 查看sentinel日志,是否出现`+sdown`字样,识别出master的宕机问题
  4. 如果出现了`+odown`字样,就是制定的quorum数量的哨兵,都认为master宕机
  5. - 哨兵都认为mastersdown
  6. - 超过quorum数量的哨兵进程都认为sdown,就变为odown
  7. - 选举一个哨兵(哨兵1)作为后续执行主备切换
  8. - 哨兵1去新master(将切换为masterslave节点)中获取一个新的configuration epochversion号)
  9. - 尝试执行failover (故障转移)
  10. - 投票选举出一个slave切换为master,每个哨兵都会执行一次投票(断开时长,priorityoffsetrunid
  11. - 让选举出来的slave设置为slaveof noone(不让它去做任何节点的slave),把slave切换为新master
  12. master认为不再是master
  13. - master角色已经切换为slave
  14. (4) 所有哨兵选举一个哨兵来执行主备切换。如果有majority数量的哨兵存在,就会执行主备切换操作
  15. (5) 再次通过哨兵查看一下当前的master SENTINEL get-master-addr-by-name <master-group-name>
  16. 信息已经改变
  17. (6) 尝试连接一下新的master,通过info replication查看主从信息
  18. (7) 故障恢复,将旧master重新启动,查看是否被哨兵自动切换为slave节点

故障转移(主备切换)日志信息示例

image.png