请先看 哨兵机制
哨兵之间要进行通信,就需要知道 ip地址加端口(ip_port)
哨兵都能在主库的__sentinel__:hello 频道上进行发布和订阅
假设哨兵1在频道1上进行pub自己的ip_port,其它哨兵就能通过sub获取到哨兵
1的ip_port进行通信,形成集群
哨兵通过向主库发送INFO命令,获取从库信息,从而连接到从库进行监控
1.当某一个哨兵实例觉得主库下线后(投一票),向其它哨兵发送is_master_down_by_addr命令,其它哨兵要应答(也觉得主库下线了:yes 投一票,没有:no)
2.当总票数 >= quorum(可配置)的值 则进行主备切换
sa:哨兵,主库下线状态投票发起者
1.sa的下线状态投票通过后,由sa再次发起投票(自己先投自己一票),要求由自己执行主从切换,其它哨兵(yes:投一票,no)
2.当票数 > 哨兵总数的1/2 & 票数 >= quorum 则由sa进行主从切换
3.当sa投票未通过,则由其它哨兵重复该流程
主库虽然不在了,但是哨兵一直在,也是可以订阅的。
订阅哨兵的 switch_master 频道,这里会返回新主库的具体信息(如ip,端口等)