首頁 > 軟體

Redis Cluster原理及設定詳解

2022-11-15 14:02:13

Redis Cluster 原理說的頭頭是道,這些設定不懂就是紙上談兵

Redis Cluster 叢集相關設定,使用叢集方式的你必須重視和知曉。彆嘴上原理說的頭頭是道,而叢集有哪些設定?如何設定讓叢集快到飛起,實現真正的高可用卻一頭霧水,通過下面這些設定詳解也讓你對叢集原理更加深刻。

cluster-enabled

普通的 Redis 範例是不能成為叢集的一員,想要將該節點加入 Redis Cluster,需要設定 cluster-enabled yes

cluster-config-file

cluster-config-file nodes-6379.conf 指定叢集中的每個節點檔案。

叢集中的每個節點都有一個組態檔,這個檔案並不是讓程式設計師編輯的,是我自己建立和更新的,每個節點都要使用不同的組態檔,一定要確保同一個叢集中的不同節點使用的是不同的檔案。

cluster-node-timeout

設定叢集節點不可用的最大超時時間,節點失效檢測。叢集中當一個節點向另一個節點傳送PING命令,但是目標節點未在給定的時限內返回PING命令的回覆時,那麼傳送命令的節點會將目標節點標記為PFAIL(possible failuer,可能已失效);

如果master 節點超過這個時間還是無響應,則用它的從節點將啟動故障遷移,升級成主節點。

注意,任何一個節點在這個時間之內如果還是沒有連上大部分的主節點,則此節點將停止接收任何請求。

預設設定是 cluster-node-timeout 15000,單位是毫秒數。

cluster-port

該埠是叢集匯流排監聽 TCP 連線的埠,預設設定為 cluster-port 0,我就會把埠繫結為使用者端命令埠 + 10000(使用者端埠預設 6379,所以繫結為 16379 作為叢集匯流排埠)。每個 Redis Cluster 節點都需要開放兩個埠:

  • 一個用於服務於使用者端的 TCP 埠,比如 6379.
  • 另一個稱為叢集匯流排埠,節點使用叢集匯流排進行故障監測、設定更新、故障轉移等。使用者端不要與叢集匯流排埠通訊,另外請確保在防火牆開啟這兩個埠,否則 Redis 叢集接地那將無法通訊。

cluster-replica-validity-factor

該設定用於決定當 Redis Cluster 叢集中,一個 master 宕機後,如何選擇一個 slave 節點完成故障轉移自動恢復(failover)。如果設定為 0 ,則不管 slave 與 master 之間斷開多久,都認為自己有資格成為 master。

下面提供了兩種方式來評估 slave 的資料是否太舊。

  • 如果有多個 slave 可以 failover,他們之間會通過交換資訊選出擁有擁有最大複製 offset 的 slave 節點。
  • 每個 slave 節點計算上次與 master 節點互動的時間,這個互動包含最後一次 ping 操作、master 節點傳輸過來的寫指令、上次可 master 斷開的時間等。如果上次互動的時間過去很久,那麼這個節點就不會發起 failover。

針對第二點,互動時間可以通過設定定義,如果 slave 與 master 上次互動的時間大於 (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period,該 slave 就不會發生 failover。

例如,`node-timeout = 30 秒,cluster-replica-validity-factor=10repl-ping-slave-period=10秒, 表示slave節點與master節點上次互動時間已經過去了310秒,那麼slave節點就不會做failover。

調大 cluster-replica-validity-factor 則允許儲存過舊資料的 slave 節點提升為 master,調小的話可能會導致沒有 slave 節點可以升為 master 節點。

考慮高可用,建議大家設定為 cluster-replica-validity-factor 0

cluster-migration-barrier

沒有 slave 節點的 master 節點稱為孤兒 master節點,這個設定就是用於防止出現裸奔的 master。

當某個 master 的 slave 節點宕機後,叢集會從其他 master 中選出一個富餘的 slave 節點遷移過來,確保每個 master 節點至少有一個 slave 節點,防止當孤立 master 節點宕機時,沒有slave節點可以升為 master 導致叢集不可用。

預設設定為 cluster-migration-barrier 1,是一個遷移臨界值。

含義是:遷移後 master 節點至少還有 1 個 slave 節點才能做遷移操作。比如 master A 節點有2個以上 slave 節點 ,當叢集出現孤兒 master B 節點時,A 節點富餘的 slave 節點可以遷移到 master B 節點上。

生產環境建議維持預設值,最大可能保證高可用,設定為非常大的值或者設定 cluster-allow-replica-migration no 禁用自動遷移功能。

cluster-allow-replica-migration 預設設定為 yes,表示允許自動遷移。

cluster-require-full-coverage

預設設定是 yes,表示為當 redis cluster 發現至少還有一個 雜湊槽沒有被分配時禁止查詢操作。

這就會導致叢集部分宕機,整個叢集就不可用了,當所有雜湊槽都有分配,叢集會自動變為可用狀態。

如果你希望 cluster 的子集依然可用,設定成 cluster-require-full-coverage yes

cluster-replica-no-failover

預設設定為 no,當設定成 yes,在master 宕機時,slave 不會做故障轉移升為 master。

這個設定在多資料中心的情況下會很有用,你可能希望某個資料中心永遠不要升級為 master 節點,否則 master 節點就漂移到其他資料中心了。

cluster-allow-reads-when-down

預設是 no,表示當叢集因主節點數量達不到最小值或者雜湊槽沒有完全分配而被標記為失效時,節點將停止所有使用者端請求。

設定成 yes,則允許叢集失效的情況下依然可從節點中讀取資料,保證了高可用。

cluster-allow-pubsubshard-when-down

設定成 yes,表示當叢集因主節點數量達不到最小值或者雜湊槽沒有完全分配而被標記為失效時,pub/sub 依然可以正常執行。

cluster-link-sendbuf-limit

設定每個叢集匯流排連線的傳送位元組緩衝區的記憶體使用限制,超過限制緩衝區將被清空(主要為了防止傳送緩衝區傳送給慢速連線時無限延長時間的問題)。

預設禁用,建議最小設定1gb,這樣預設情況下叢集連線緩衝區可以容納至少一pubsub訊息(client-query-buffer-limit 預設是1gb);

以上就是Redis Cluster原理及設定詳解的詳細內容,更多關於Redis Cluster原理設定的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com