1. 程式人生 > >Redis-叢集-Sentinel(哨兵)

Redis-叢集-Sentinel(哨兵)

1、如果主節點掛掉後,咋樣進行主從切換,而不影響線上業務,毫無疑問是自動切換,Redis提供了一種高可用方案指出自動主從切換,即Redis Sentinel(哨兵),我們可以將Redis的叢集看作是一個Zookeeper叢集,它是高可用核心,一般由幾個節點組成,如果個別節點掛掉後,不影響叢集正常執行

2、自動切換原理:Redis的哨兵負責監控主從節點的健康,若主節點掛掉後,自動選擇一個最優的從節點切換為主節點,客戶端連結叢集時,先連線哨兵,哨兵查詢主節點的地址,然後在連線主節點進行互動

3、訊息丟失:Redis採用非同步複製,如果主節點掛掉後,從節點沒有收到全部的同步訊息,這部分未同步到就丟失了,哨兵無法保證完全不丟失,但是通過選項可以儘量保證訊息少丟失

min-slaves-to-write 1

Min-slaves-max-lag 10

第一個引數表示主節點至少有一個從節點在正常的複製,否者就停止對外寫服務,但是喪失了可用性。

第二個引數是衡量如何是正常的複製,如果10秒內沒有收到從節點的反饋,則意味著從節點同步不正常

4、Sentinel基本使用:

sentinel 的預設埠是 26379,不同於 Redis 的預設埠 6379

哨兵進行主從切換後,客戶端如何知道地址變更呢

1)連線池建立新的連結時,會去查詢主庫地址,然後和記憶體中主庫地址進行對比,如果變更,就斷開所有連結,重新使用新地址連線

2)如果是舊的主節點掛掉後,所有正在使用的連結都會被關閉,重連結時會用上新的地址

3)如果sentinel主動進行主從切換後,之前的主庫被降級到從庫,所有修改性的指令都會跑出ReadonlyError異常,redis-py在處理命令的時候捕獲該異常,這個異常將所有的舊連結全部關閉,後續指令會進行重新連結,redis-py是python一個客戶端