2023-02-10 一、集群的定義 1、redis集群實現了對redis的水平擴容,即啟動N個redis節點,將整個資料庫分佈存儲在N個節點中,每個節點存儲總數據的1/N。 2、redis集群通過分區來提供一定程度的可用性:即使集群中有一部分節點失效或者無法進行通訊,集群也可以繼續處理命令請求 二 ...
2023-02-10
一、集群的定義
1、redis集群實現了對redis的水平擴容,即啟動N個redis節點,將整個資料庫分佈存儲在N個節點中,每個節點存儲總數據的1/N。
2、redis集群通過分區來提供一定程度的可用性:即使集群中有一部分節點失效或者無法進行通訊,集群也可以繼續處理命令請求
二、-c 採用集群策略連接,設置數據會自動切換到相應的寫主機
redis-cli -c -p 6379
三、通過cluster nodes命令查看集群信息
cluster nodes
四、redis cluster分配六個節點的方式
1、一個集群至少要有三個主節點
2、選項 --cluster-replicas 1表示希望為集群中的每個主節點創建一個從節點
3、分配原則儘量保證每個主資料庫運行在不同的IP地址,每個從庫和主庫不在一個IP地址上。
五、slots
1、slots的含義
插槽
2、說明
(1)一個redis集群包含16384個插槽(hash slot),資料庫中的每個鍵都屬於這16384個插槽的其中一個。
(2)集群使用公式CRC16(Key)%16384來計算鍵key屬於哪個槽,其中CRC16(Key)語句屬於計算鍵key的CRC16校驗和。
(3)集群中的每個節點負責一部分插槽。例如:
節點A負責處理0號至5460號插槽;
節點B負責處理5461號至10922號插槽;
節點C負責處理10923號至16383號插槽;
六、在集群中錄入值
不在一個slot下的鍵值,是不能使用mget,mset等多鍵操作。可以通過使用{}來定義組的概念,從而使key中{}內相同內容的鍵值放到一個slot中。
七、查詢集群中的值
1、計算key應該保存在哪個插槽
cluster keyslot key
2、計算某個插槽中保存的key的數量
cluster countkeysinslot slot
3、返回count個slot槽中的鍵
cluster getkeysinslot <slot> <count>
八、故障恢復
問:如果所有某一段插槽的主從節點都宕掉,redis服務是否還能繼續?
如果所有某一段插槽的主從都掛掉,而
cluster-require-full-coverage
為yes,那麼,整個集群都掛掉;
如果所有某一段插槽的主從都掛掉,而
cluster-require-full-coverage
為no,那麼,該插槽數據全都不能使用,也無法存儲,其他插槽不受影響;