Redis部署-哨兵

基本原理

哨兵节点巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个slave转为master。

功能

主从监控

监控主从redis节点运行是否正常

消息通知

哨兵可以将故障转移的结果发送给客户端

故障转移

如果master异常,则会进行主从切换,将其中一个Slave作为新的Master

配置中心

客户端通过连接哨兵来获得当前Redis服务的主节点地址

实践

基本要求

哨兵模式下需要通过投票选择master节点,需要提供奇数个哨兵节点,保证投票的有效性。

配置

  • redis主从数据库
    哨兵模式是在主从结构的基础上新增哨兵节点,主从结构配置参考:Redis部署-主从复制
    注意:哨兵模式下存在故障转移切换master的情况,如果节点开启了密码访问(建议所有节点使用相同的密码),则所有节点都需要配置masterauth <password>确保master迁移后原master节点能正常访问新master。
  • 基础配置
# 哨兵节点端口
port 36379
# pid文件路径
pidfile /var/run/redis_sentinel_36379.pid
# 日志文件路径
logfile "/usr/local/redis-7.2.4/log/sentinel/sentinel_36379.log"
# 开启后台进程
daemonize yes
# 启用安全保护模式,开启权限认证
protected-mode yes
# 哨兵节点访问密码
requirepass redis
# 工作目录
dir /usr/local/redis-7.2.4/sentinel
# 其它哨兵的通信密码
sentinel sentinel-pass redis
  • 哨兵相关配置
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 配置哨兵监控的master节点,quorum-指定认定主节点客观下线的票数,即当有多少台哨兵节点认定master下线时可认定master下线
sentinel monitor mymaster 127.0.0.1 6379 2
# 主节点访问密码
sentinel auth-pass mymaster redis
# 主观下线配置,设定多少时间没收到主节点的应答时,当前哨兵任务主节点下线
sentinel down-after-milliseconds mymaster 30000
  • 启动哨兵
    进入工作目录,执行以下命令,本文工作目录为:/usr/local/redis-7.2.4
redis-sentinel ./sentinel.conf --sentinel

模拟验证

  1. shutdown master后的投票过程
    image
  • sdown:主观下线master
  • odown: 通过投票客观下线master
  • vote-for-leader: 投票选举(Raft算法)新哨兵leader
  • 哨兵leader发起故障转移,选出新的master
  • 在sentinel.conf添加新的主机配置 sentinel monitor
  • 修改各redis节点的主从配置
  1. 新的主从关系
    image
  2. 原master节点恢复
    重启日志
    image
  • 重启成功后进行tcp请求,获取新的master节点
  • 与新master节点建立连接,并修改本地主从配置
  • 从新master接收db文件,覆盖本地db
  • 从新master接收aof,重写本地aof

哨兵故障恢复过程

  1. 选举新的master,哨兵leader节点从健康的slave节点,依次按照节点优先级relica-priority参数、数据同步偏移量offset以及runId三个条件作比较进行选择。
  2. 未被选中的slave通过slaveof命令重新连接新的master节点。
  3. 故障节点恢复后连接新的master,并修改本地配置。

缺点

哨兵模式下,故障迁移时需要时间,迁移时间内无法进行写操作。

posted @ 2024-02-27 23:03  周仙僧  阅读(25)  评论(0编辑  收藏  举报