Redis之哨兵机制学习记录

主从复制可以解决集群中数据不一致的情况。但是一主多从。主挂掉之后怎么办?从服务器挂掉还有主服务器和其它的。这就需要哨兵机制来实现主从库自动切换

哨兵机制

实现主库挂掉之后,的重新选主。有三个具体的点:监控、选主、通知。

监控:监控主库、从库。通过心跳检测,发送ping给主从库,无响应则可判断主观下线了。

选主:只有主库下线有选主流程。根据从库的状态,选择一个从库作为主库

通知:通知其它从库,主库已经变更。通过客户端,主库已变。

具体:

  1. 监控:主观下线:哨兵进程会使用PING来接测主从库和自己之间的网络状况。PING超时就标记为主观下线。客观下线:有时候一个哨兵的判断不准确,就使用多个哨兵集群。只有超过一半的哨兵认为主观下线了,那么这个主库就客观下线了
  2. 选主:筛选和打分。筛选,判断此刻从库是否在线和网络状况是否良好(断连次数超过阈值就判断不行)。打分:从库优先级(有的从库内存多,你可能就hi设置优先级高),从库复制进度,从库ID号。只要某一轮得分高,就选择。
  3. 通知:根据建立的连接进行通知。从库的连接信息是哨兵通过向主库发送info。客户端的连接是客户端订阅了哨兵

哨兵集群

主库的客观下线需要多个哨兵决定。并且防止一个哨兵出现问题,主从库不能正常切换。多个哨兵实例保证正常切换。

配置哨兵的命令为:
sentinel monitor
只要了主库ip和端口号。

那么哨兵怎么知道其它哨兵的地址?不知道就不是集群。

通过pub/sub机制实现哨兵集群

pub/sub的redis的发布订阅模式。一个哨兵既能在主库发布自己的连接信息,也能通过主库订阅到其它从库的连接信息。

通过这个就可以让哨兵集群之间建立网络连接,实现对主库客观下线的判断。

问题1:哨兵如何监控到从库的主观下线呢?怎么知道从库的连接信息?

哨兵通过info命令就可以获取主库的所有从库的ip连接信息。

问题2:哨兵怎么通知客户端主库有变?怎么知道客户端的连接信息?

也是基于发布订阅。客户端订阅哨兵。哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过
程中的不同关键事件。

问题3:哨兵集群做出了决定,那么由哪个哨兵来进行选主呢?

客观下线:是多个哨兵都做出了主观下线的判断,超过半数的。一个哨兵做出主观下线会发送命令给其它哨兵,其它哨兵根据自己和主库的网络连接状态,做出Y和N响应。在一个哨兵获得了仲裁所需的赞成票数后,就可以标记主库为“客观下线”。这个所需的赞
成票数是通过哨兵配置文件中的 quorum 配置项设定的。

例如,现在有 5 个哨兵,
quorum 配置的是 3,那么,一个哨兵需要 3 张赞成票,就可以标记主库为“客观下
线”了。这 3 张赞成票包括哨兵自己的一张赞成票和另外两个哨兵的赞成票。

并且这个哨兵还必须获取到超过一半的哨兵的支持。这个投票过程称为“Leader 选举”

注意:如果哨兵集群只有 2 个实例,此时,一个哨兵要想成为 Leader,必须获得
2 票,而不是 1 票。所以,如果有个哨兵挂掉了,那么,此时的集群是无法进行主从库切
换的。因此,通常我们至少会配置 3 个哨兵实例。

此外,如果当前次数未能满足两个条件(大于选Leader的赞同票和拿到超过一半的赞同票)那么会等下一轮选leader

小结:

哨兵机制:

  1. 是什么:是当主库挂掉之后,进行主从切换的机制。
  2. 怎么切换:通过监控、选主、通知三步进行自动切换。
  3. 具体:监控主从库是哨兵会通过PING发送心跳检测,超时则认为主观下线。选主:通过筛选,在线的且网络连接良好的,打分,从库优先级、复制进度、从库id。通知:通知其它从库和客户端主库已经变。

哨兵集群:

  1. 是什么:是多个哨兵通过发布订阅主库形成的集群
  2. 为什么要用:防止一个哨兵的误判。多个哨兵共同决策。只有超过半数的哨兵认为主库客观下线了,进行选主流程。并且防止一个哨兵挂掉,主从切换异常。
  3. 怎么决定哪个哨兵执行选主:通过选Leader流程,一个哨兵判断主库客观下线后就会向其余哨兵发送命令,如果支持响应Y。自己投自己一票+其余哨兵的票如果大于用户设置的阈值则此哨兵为leader。并且必须拿到超过多数的赞同票,如果未拿到则等待一段时间后再来一次。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值