哨兵模式

哨兵简介

哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。

哨兵的作用

  1. 监控
    • 不断的检查master和slave是否正常运行
    • master存活检测、master与slave运行情况检测
  2. 通知(提醒)
    • 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
  3. 自动故障转移
    • 断开master与slave连接,选取一个slave作为master,将其他slave连接到断的master,并告知客户端新的服务器地址
      注意:
  • 哨兵也是一台redis服务器,只是不提供数据服务
  • 通常哨兵配置数量为单数(一般最少3个起)

哨兵结构搭建

  1. 配置一拖二的主从结构
  2. 配置三个哨兵(配置相同,端口不同)
  3. 启动哨兵
redis-sentinel sentinel-端口号.conf

例子:

  1. 开启多个会话窗口备用
    img
  2. 复制sentinel.conf文件
cat sentinel.conf | grep -v "#" | grep -v "^$" > ./conf/sentinel-26379.conf
  1. 编辑sentinel-26379.conf
port 26379
dir "/root/redis-6.0.19/data"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
  1. 复制sentinel-26379.conf到sentinel-26380.conf和sentinel-26381.conf
sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
  1. 以同样的方法复制redis-6380.conf到redis-6381.conf,并且在6381文件内配置上主从复制
sed 's/6380/6381/g' redis-6380.conf > redis-6381.conf

img
6. 启动哨兵模式

redis-sentinel sentinel-端口号.conf 

哨兵工作原理

主从切换

  1. 哨兵在进行主从切换过程中经历三个阶段
  • 阶段一:监控(同步信息)

    • 用于同步各个节点的状态信息
      • 获取各个sentinel的状态(是否在线)
      • 获取master的状态
        • master属性
          • runid
          • role:master
        • 各个slave的详细信息
      • 获取所有slave的状态(根据master中的slave信息)
        • slave属性
          • runid
          • role:slave
          • master_host、master_port
          • offset
          • ...
  • 阶段二:通知(保持连通)

  • 阶段三:故障转移(发现问题、竞选负责人、优选新master、新master上任,其他slave切换master,原master作为slave故障恢复后连接)

    • 服务器列表中挑选备选master
      • 在线的
      • 响应慢的
      • 与原master断开时间久的
      • 优先原则
        • 优先级
        • offset
        • runid
    • 发送指令(sentinel)
      • 向新的master发送slaveof no one
      • 向其他slave发送slaveof新masterIP端口
posted @ 2023-06-06 19:10  小肚腩吖  阅读(40)  评论(0编辑  收藏  举报