发布时间:2022-09-23 23:00
为了解决主从模式不能 failover 的缺点,Redis 提出了 sentinel 哨兵模式。
哨兵是一个运行在特殊模式下的 Redis 进程,其和主从库实例同时运行,主要负责 监控、选主、通知
三个任务。
PING
命令监控实例的网络连接状态。如果发现 PING
命令的响应超时了(超过 down-after-milliseconds
参数),那么,哨兵就会先把相应节点标记为「主观下线」。is-master-down-by-addr
命令。其他实例会根据自己和主库的连接情况,决定是否投出赞成票。 → 防止误判频繁主从切换产生不必要的开销。quorum
配置项设定)后,就可以标记主库为「客观下线」。down-after-milliseconds(主从库断连的最大超时时间) * 10
),把不符合条件的从库筛掉。slave-priority
参数配置 → 比如可以给内存大的设置为高优先级repl_backlog_buffer
(忘了就看看主从复制原理==)里的 slave_repl_offset
和 master_repl_offset
的距离决定。 → 在哨兵选主源码中是直接比较从库的slave_repl_offset
来选择和主库最接近的从库。在配置哨兵的信息时,我们只设置了主库的 IP 和端口(命令: sentinel monitor
,并没有配置和其他哨兵以及从库的连接信息,但是最终他们之间还是可以正常通信的,实现这个机制的核心就是 Redis 的 pub/sub
机制。
sentinel:hello
频道上发布自己的连接信息(ip、port),并订阅其他哨兵发布的连接信息。→ 为了区分不同应用的消息,Redis会以频道的形式,对消息进行分类管理,只有消息类别相同,消息才属于同一个频道,只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换。INFO
命令以获取从库列表,并根据其中的连接信息和每个从库建立连接并监控。优点:实现了主从自动切换,进一步提升可用性。
缺点:
参考:蒋德钧老师《Redis核心技术与实战》极客时间专栏,强烈推荐!