redis哨兵模式

1. 哨兵模式解决什么问题?

  使用主从架构模式,在主库down机后,就无法提供写服务了,哨兵模式是增加哨兵对Redis工作节点进行监控,在主库挂掉之后,通过选举算法重新选举出合适的节点作为主库提供写服务,以此来提供不间断的服务,提高服务的可用性。

2. 哨兵模式如何工作?

  哨兵的工作内容为监控、选主、通知。

  1. 监控。哨兵每秒会发送PING命令给服务节点,如果正常响应,那代表节点正常工作。如果响应超时,则哨兵将节点标记为主管下线。如果是从库,那么影响不大,如果是主库,则由哨兵集群互相通信,确认主库是否下线,如果超过半数标记主库主观下线,则进入选主流程。
  2. 选主。按如下流程进行选主过程:
    1. 选择所有在线的从库;
    2. 选择从库断连次数小于一定阈值的节点。这是因为,如果大于一定阈值(哨兵配置文件中的 quorum),那么可以认为该节点的网络不太稳定,即使选择该节点作为主,那么也很可能在不久就需要重新选主;
    3. 打分。首先根据配置的slave-priority优先级进行打分,再根据slave_repl_offset与master_repl_offset,即同步程度进行打分。如果通过以上俩个分数还是一样,那么选取runID最小的作为主库;
  3. 通知。
      1. 哨兵哨兵提升一个从库为新主库后,哨兵会把新主库的地址写入自己实例的pubsub(switch-master)中。客户端需要订阅这个pubsub,当这个pubsub有数据时,客户端就能感知到主库发生变更,同时可以拿到最新的主库地址,然后把写请求写到这个新主库即可,这种机制属于哨兵主动通知客户端;
      2. 如果客户端因为某些原因错过了哨兵的通知,或者哨兵通知后客户端处理失败了,安全起见,客户端也需要支持主动去获取最新主从的地址进行访问;
      我们可以使用Codis来做代理管理Redis,Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 ([不支持的命令列表]), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。

3. 哨兵之间如何互相发现连接的?

  哨兵连接上主库后,会发布自己的连接信息到**__sentinel__:hello**频道,并且会订阅该频道的信息,这样哨兵之间就可以通过拿到的连接信息互相建立起连接;同时,哨兵在连接上主库之后,会通过INFO命令,获取到从库的信息,并与从库建立连接。

 

posted @ 2020-12-01 11:54  少羽大怪兽  阅读(227)  评论(0编辑  收藏  举报