sentinel 哨兵
哨兵是用来解决redis高可用性的,可以监控集群中主从的变化,然后进行故障转移。
哨兵原理
任务
哨兵有三个定时任务,获取集群中节点的状态:
- 每10秒:对集群内节点执行
info
,获得集群节点信息和从属关系。 - 每2秒:通过
master
节点的pub/sub
的频道(__sentinel__:hello
)通信,交换对节点状态的看法。 - 每1秒:对所有节点(包括哨兵),进行心跳检测(
ping
)。
流程
哨兵的工作流程:
- 判断主节点是否是主观下线
sdown
。 - 一旦主节点的主观下线到了一定数量,哨兵群进行客观下线
odown
的判断。 - 哨兵群选举一个Leader,准备对客观下线的节点进行故障转移。
- Leader选择一个slave a,其他哨兵确认。
- 其他slave成为a的slave。
节点状态
节点状态分为:ok、主观下线、客观下线。
正常(ok
):就是节点在线,能够正常响应哨兵的检测和命令。