Redis入门(四)-利用哨兵自动监控、恢复Redis

Redis学习(四)

当主库宕机之后,还是需要手动选择一个从库,升级为主库,然后把其他从库的主库切换为新的主库。

哨兵则是自动进行上述操作,无需人工干预

哨兵

作用

  1. 监控主、从Redis是否正常
  2. 当主库出现故障时,自动将从数据库转为主数据库
  3. 哨兵不仅监控主从,多个哨兵之间也会相互监控
  4. 子节点的自动发现

配置sentinel.conf

格式为: sentinel monitor ,quorum为最低通过票数和判断客观下线的哨兵数

sentinel monitor mymaster 127.0.0.1 6379 1

格式为:sentinel down-after-milliseconds

当主库15秒之内没有响应,则哨兵认为该主库主观下线

sentinel down-after-milliseconds mymaster 15000

启动主从数据库

Master:127.0.0.1:6379

Slave1: 127.0.0.1:16379

Slave2: 127.0.0.1:26379(哨兵默认启动端口为26379,由于被占用了,更换为36379,修改端口在sentinel.conf中)

启动哨兵

# 制定哨兵的配置文件即可
redis-sentinel ./redis/redis-5.0.3/sentinel.conf

信息解读

在这里插入图片描述

  1. 哨兵启动时,拿到了刚才的配置,开始监视主库

  2. 在监视过程中,哨兵每10秒会向主库发送INFO命令,INFO命令会拿到当前监视的Redis的实例的运行ID、复制信息、子节点信息。依靠这一点,哨兵实现了子节点的自动发现

  3. 哨兵每隔1秒会向主、从Redis实例发送PING命令,来确保监视的主从Redis是否正常。如果在down-after-milliseconds 时间之后,还未收到回复,则当前哨兵,认为mymaster主观下线

  4. 哨兵启动之后,还会使用另一个连接去订阅主从的_sentinel_:hello 频道,订阅之后,会每隔2秒向频道发送自己的信息,所以,当有新的哨兵加入时,其他哨兵会根据其共同订阅的频道,很快的发现新加入的哨兵。

    为什么要使用另外一条连接去订阅频道?

    因为订阅频道之后,就不能执行其他命令了。

    1. 杀死6379主库

    2. sdown(subjectively down)-主观下线。哨兵认为6379主库主观下线

    3. odown(objectively down)-客观下线。大于等于quorum个数的哨兵都认为6379主库下线时,则认为主库客观下线

    4. try-failover,开始进行故障恢复

    5. selected-slave 开始在slave中选举

    6. failover-end 故障恢复完毕

    7. switch-master mymaster 127.0.0.1 6379 127.0.0.1 16379。将主库从6379转移到16379上

    8. 如果在新的master产生之后,6379又恢复了正常,则6379会被当做新master的从库。

    9. -sdown代表6379又恢复正常了

    10. convert-to-slave,将6379转为16379的从库

多个哨兵时如何选举出领头哨兵?

为什么要选择领头哨兵?

需要领头哨兵选举出新的主库。因此,第一步,必须先选出领头哨兵。

如果不能保证有一个领头哨兵会发生什么?

极端情况下,每个哨兵都作为领头哨兵进行选举,有可能每个哨兵此时拿到的整体主从Redis实例信息不一致,导致,选出多个主数据库。多个主数据库之间会互相通知其他数据库作为从库。引起混乱。

  • 发现主库下线的哨兵向其他哨兵发送命令,希望其他哨兵选举它为领头哨兵

  • 如果其他哨兵没选过其他人,则同意

  • 如果由超过quorum票数的哨兵都同意将A设置为领头哨兵。则A成为领头哨兵

  • 当出现了多个哨兵都在竞选领头哨兵,会出现没有任何哨兵当选的可能。此时需要等待一个随机时间后,重新发起选举,直到选出一个领头哨兵。

哨兵如何在多个从库之间挑选出最适合作为主库的?

在所有从库中选择优先级最高的。从库优先级配置见,配置文件:
在这里插入图片描述

配置从库的优先级,数字越小,优先级越高

replica-priority 100

如果优先级一样,则哪个从库的复制的偏移量大,选哪个。因为,偏移量大的代表复制原来主库的数据越完整

如果偏移量一样大,则选择运行ID最小的

找到合适的从库之后,如何恢复?

使用SLAVEOF NO ONE,将选择的从库提升为主库

向其他从库发送SLAVEOF命令。

这两步其实就是手动恢复故障时的命令

如何部署合适的哨兵?

一个哨兵会存在很大的风险,一旦哨兵挂了,没有人工干预的情况下,整个Redis的主从也不会恢复过来。

因此,哨兵之间也要互相监控

建议
  1. 无论主从,为每个节点都部署一个哨兵。好处是可以全方位监控。坏处是,大量的哨兵会产生大量的请求连接。
  2. 设置投票数qunorm为N/2+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值