1. 程式人生 > >(六)Redis叢集搭建

(六)Redis叢集搭建

1. 原理

redis cluster在設計的時候,就考慮到了去中心化,去中介軟體,也就是說,叢集中的每個節點都是平等的關係,都是對等的,每個節點都儲存各自的資料和整個叢集的狀態。每個節點都和其他所有節點連線,而且這些連線保持活躍,這樣就保證了我們只需要連線叢集中的任意一個節點,就可以獲取到其他節點的資料。

Redis叢集沒有並使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊槽(hash slot)的方式來分配的,一致性雜湊對向叢集中新增和刪除例項的支援很好,但是雜湊槽對向叢集新增例項或者刪除例項的話,需要額外的操作,需要手動的將slot重新平均的分配到新叢集的例項中。

redis cluster 預設分配了 16384 個slot,當我們set一個key時,會用CRC16演算法來取模得到所屬的slot,然後將這個key分到雜湊槽區間的節點上,具體演算法就是:CRC16(key)%16384。

Redis 叢集會把資料存在一個master節點,然後在這個master和其對應的salve之間進行資料同步。當讀取資料時,也根據一致性雜湊演算法到對應的master節點獲取資料。只有當一個master 掛掉之後,才會啟動一個對應的salve節點,充當master。

需要注意的是:必須要3個或以上的主節點,否則在建立叢集時會失敗,並且當存活的主節點數小於總節點數的一半時,整個叢集就無法提供服務了。

接下來可能就是動態擴容、增加節點和減少節點,重新分配槽大小等,當然,還有最重要的就是怎麼和我們程式結合起來,以及如何更好的把 Redis 快取叢集發揮出應有的效果,這些才是最重要的。

2. cluster 叢集搭建

花了一個上午的時間,搭建了3主3從的redis叢集,叢集搭建並不難,只是很繁瑣,按照他人經驗一步步操作即可。主要測試了使用redis-cli cluster 的方式搭建叢集。

2.1 ruby 方式

2.2 redis-cli 方式