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