哨兵的作用
- 监控:向主、从库发送心跳,确定主、从库是否下线
- 选主:哨兵判断主库已下线时,从从库中筛选出一个作为新的主库
-
哨兵集群
哨兵在向主库发送心跳时,可能会由于网络波动等原因照成哨兵误判主库下线。为防止哨兵误判,引入哨兵集群。
监控:由集群内的各个哨兵判断主从库是否 “主观下线”
- 选主:有哨兵 “主观” 判断主库已下线时发起投票,投票通过后主库为 “客观下线”状态,由哨兵 Leader 重新选主
- 通知:选主后,由哨兵 Leader 将主库信息通知给从库和 client
如何判断主库 “客观下线”❓
- 集群内的各个哨兵分别向主库发送心跳
- 有哨兵 “主观” 判断主库已下线时发起投票
投赞成票的哨兵数量 >= 哨兵配置文件中的 quorum 值,标识主库为 “客观下线” 状态,否则投票作废
如何成为 Leader❓
哨兵 A “主观判断” 主库下线后,发起主库下线投票
- 投票通过后,哨兵 A 发起 Leader 竞选,赞成票数+1
- 其它哨兵收到竞选信息后投票
- 当前哨兵也发起了竞选时,返回反对票
- 当前哨兵已经投过赞成票时,返回反对票
- 当前哨兵未发起竞选且未投过赞成票时,返回赞成票
- 赞成票数 > 哨兵总数/2 && 赞成票数 >= 哨兵配置文件中的 quorum 值时,哨兵当选 Leader
如何选主❓
主库被 “客观下线” 后,由哨兵 Leader 重新选主。