redis 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機制),內部使用二進制協議優化傳輸速度和帶寬.
?
總結
以上是生活随笔為你收集整理的redis Hash槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow从入门到精通之:Te
- 下一篇: TensorFlow搭建简易Wide a