哨兵實(shí)例之間可以相互發(fā)現(xiàn),要?dú)w功于 Redis 提供的 pub/sub 機(jī)制,也就是發(fā)布 / 訂閱機(jī)制。
在主從集群中,主庫上有一個(gè)名為__sentinel__:hello的頻道,不同哨兵就是通過它來相互發(fā)現(xiàn),實(shí)現(xiàn)互相通信的。在下圖中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)發(fā)布到__sentinel__:hello頻道上,哨兵 2 和 3 訂閱了該頻道。那么此時(shí),哨兵 2 和 3 就可以從這個(gè)頻道直接獲取哨兵 1 的 IP 地址和端口號(hào)。然后,哨兵 2、3 可以和哨兵 1 建立網(wǎng)絡(luò)連接。
通過這個(gè)方式,哨兵 2 和 3 也可以建立網(wǎng)絡(luò)連接,這樣一來,哨兵集群就形成了。它們相互間可以通過網(wǎng)絡(luò)連接進(jìn)行通信,比如說對(duì)主庫有沒有下線這件事兒進(jìn)行判斷和協(xié)商。