【Redis】哨兵模式(redis sentinel)

https://blog.csdn.net/zzu_seu/article/details/106447100?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-8.pc_relevant_aa&spm=1001.2101.3001.4242.5&utm_relevant_index=11

Master如果发送宕机

需要做下面这些事情:

  • 将宕机的master下线
  • 找一个slave作为master
  • 通知所有的slave连接新的master
  • 启动新的master与slave
  • 全量复制*N+部分复制 *N

什么是redis sentinel

哨兵(sentinel)在redis集群架构中是一个非常重要的组件,其主要功能有下面这些:

  • 监控
    不断的检查master和slave是否正常运行
    master存活检测、master与slave运行情况检测

  • 通知(提醒)
    当被监控的服务器出现问题时,向其他(哨兵间、客户端)发送通知

  • 自动故障转移
    断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的master的地址。

注意: 哨兵也是一台redis服务器,只是不提供数据服务,通常哨兵配置数量为单数

如何配置哨兵

通过配置文件配置,配置后使用命令启动。
配置文件:

[root@localhost redis-4.0.6]# cat sentinel.conf | grep -v "#" | grep -v "^$"
port 26379
dir /tmp
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
----------------------------------------------------------------------------
以上分别为:
端口号
路径
监控的master 地址 端口号 哨兵认定数量
连接未响应时长
重设master后同时同步数量
认定下线时间(毫秒)

   
   

启动哨兵指令:

redis-sentinel 配置文件.conf

连接命令:

redis-cli -p 端口号

工作原理

监控阶段

在这里插入图片描述
在这里插入图片描述

工作内容:
  1. 第一个sentinel与master进行连接后,发送info指令
  2. 建立长期cmd连接,sentinal同时保存所有哨兵状态,master中记录redis实例信息
  3. 通过master中的slave信息与其中的slave进行连接并发送info指令
  4. 第二个sentinel进入,与master连接发送info指令,发现master端的sentinels
    有信息
  5. 与第一个sentinel建立连接并同步信息,互相发送ping命令保证对方在线,并于master建立cmd连接

通知阶段

工作内容:由其中一个sentinel通过建立的cmd连接获取主从机的工作状态,获取到信息并且与相互连接的其他sentinel之间进行信息同步。
在这里插入图片描述

故障转移阶段

故障转移阶段引起原因:其中一台sentinel多次获取master状态失败。

发现master宕机

这个哨兵将master中标记为SRI_S_DOWN(主观下线),消息在sentinel之间传播,表示发现master掉线。
其他sentinel连接master,连接失败的sentinel在sentinel之间表示发现master掉线,当连接失败的sentinel占sentinel总数超过一半时,将master标记为SRI_O_DOWN(客观下线),确定master掉线。

选出sentinel担任处置工作:

所有的sentinel同时对其余的sentinel发送一条指令(SENTINEL is-master-down-by…),其中包含:下线的ip、下线的端口、竞选次数、runid
通过循环的投票机制,选出一台sentinel担任处置工作。

投票机制:每个sentinel均是投票者也是参选者,例如:当前有五台sentinel,其中4台sentinel会同时向剩余的一台sentinel发送自己的信息,剩余这台的sentinel会将自己的票投给信息最先到达的sentinel,最后通过所有投票情况选出获得票数最多的sentinel。

通过投票机制产生的sentinel从服务器列表中选择出备选的master

担任master的选择条件:

  • 在线的
  • 响应速度快的
  • 与原master断开时间短的
  • 优先原则:
    • 优先级
    • offset
    • runid
发送指令

向新的master发送slaveof no one,表示与master断开连接
向其他slave发送slaveof 新master的IP 端口,使其他slave与新master产生主从关系

当原来的master重新启动后,会变成看slave节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值