1. 程式人生 > >redis叢集 資料遷移方式 Hash槽 和 一致性hash對比,優缺點比較

redis叢集 資料遷移方式 Hash槽 和 一致性hash對比,優缺點比較

叢集:
是一個提供多個Redis(分散式)節點間共享資料的程式集。
叢集部署
Redis 叢集的鍵空間被分割為 16384 hash個槽(slot), 叢集的最大節點數量也是 16384 個

關係:cluster>node>slot>key

分片:
Redis Cluster在設計中沒有使用一致性雜湊(Consistency Hashing),而是使用資料分片引入雜湊槽(hash slot)來實現;

一個 Redis Cluster包含16384(0~16383)個雜湊槽,儲存在Redis Cluster中的所有鍵都會被對映到這些slot中,

叢集中的每個鍵都屬於這16384個雜湊槽中的一個,叢集使用公式slot=CRC16(key)/16384來計算key屬於哪個槽,其中CRC16(key)語句用於計算key的CRC16 校驗和。

按照槽來進行分片,通過為每個節點指派不同數量的槽,可以控制不同節點負責的資料量和請求數.


當前叢集有3個節點,槽預設是平均分的:
節點 A (6381)包含 0 到 5499號雜湊槽.
節點 B (6382)包含5500 到 10999 號雜湊槽.
節點 C (6383)包含11000 到 16383號雜湊槽.
這種結構很容易新增或者刪除節點. 比如如果我想新添加個節點D, 我需要從節點 A, B, C中得部分槽到D上. 如果我像移除節點A,需要將A中得槽移到B和C節點上,然後將沒有任何槽的A節點從叢集中移除即可. 由於從一個節點將雜湊槽移動到另一個節點並不會停止服務,所以無論新增刪除或者改變某個節點的雜湊槽的數量都不會造成叢集不可用的狀態.

資料遷移
資料遷移可以理解為slot(槽)和key的遷移,這個功能很重要,極大地方便了叢集做線性擴充套件,以及實現平滑的擴容或縮容。

現在要將Master A節點中編號為1、2、3的slot遷移到Master B節點中,在slot遷移的中間狀態下,slot 1、2、3在Master A節點的狀態表現為MIGRATING(遷移),在Master B節點的狀態表現為IMPORTING(入口)。


此時並不重新整理node的對映關係

IMPORTING狀態

被遷移slot 在目標Master B節點中出現的一種狀態,準備遷移slot從Mater A到Master B的時候,被遷移slot的狀態首先變為IMPORTING狀態。

鍵空間遷移


鍵空間遷移是指當滿足了slot遷移前提的情況下,通過相關命令將slot 1、2、3中的鍵空間從Master A節點轉移到Master B節點。此時重新整理node的對映關係。


複製&高可用:
叢集的節點內建了複製和高可用特性。


特點:1、節點自動發現
2、slave->master 選舉,叢集容錯
3、Hot resharding:線上分片
4、基於配置(nodes-port.conf)的叢集管理
5、客戶端與redis節點直連、不需要中間proxy層.
6、所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬.