《Redis設計與實現》第十七章 集羣

Redis集羣是Redis提供的分佈式數據庫方案,集羣通過sharding分片來進行數據共享,並提供複製和故障轉移功能。
對集羣的節點、slot、命令執行、重新分片、轉向、故障轉移、消息等各方面介紹。

17.1 節點

一個Redis集羣通常由多個節點node組成,在剛開始的時候,每個節點都是相互獨立的,他們都出於一個只包含自己的集羣當。
-w644

17.1.1 啓動節點

一節節點就是一個reis服務器。
-w453
-w699

17.1.2 集羣數據結構

clusterNode結構保存了一個節點的當前狀態、創建時間名字、配置epoch、節點ip端口號和地址等。-w513
-w473
-w587

17.1.3 CLUSTER MEET命令的實現

-w439
相當於區域連通,會通知其他同區域的node。

17.2 槽指派

Redis集羣通過分片方式來保存數據的鍵值對:集羣的整個數據庫被分爲16384個槽slot。
CLUSTER ADDSLOTS槽分配。

17.2.1 記錄節點的槽指派信息

-w703
二進制 2048字節 16384個二進制位,如果爲1表示該節點處理該槽位。

17.2.2 傳播節點的槽指派信息

-w292
告訴自己的職責numslotslots屬性
-w769
-w690
-w493

17.2.4 CLUSTER ADDSLOTS 命令的實現

-w602

17.3 在集羣中執行命令

-w538

17.3.1 計算鍵屬於哪個槽

CRC 校驗
-w412

17.3.2 判斷槽是否由當前節點處理

如果是就執行否就轉發-w570
-w390
-w404

實際上就是一致性哈希。

17.3.4 節點數據庫的實現

保存的方式以及過期的方式跟單機Redis的方式相同。
節點只能使用0號數據庫。

-w722
-w720

17.4 重新分片

-w699

重新分片實現原理
redis-trib負責執行,redis-trib對單個slot分片步驟如下。
-w658
-w320

17.5 ASK錯誤

-w429
重新分片過程中的查找。

17.5.1 CLUSTER SETSLOT IMPORTING 命令的實現

-w722

17.5.2 CLUSTER SETSLOT MIGRATING 命令的實現

記錄了當前節點正在遷移至其他節點的槽。

17.5.3 ASK錯誤

-w412

17.5.4 ASKING命令

-w481

17.5.5 ASK錯誤和MOVED錯誤的區別。

兩者都會導致客戶端轉向,他們區別在於:
1、moved負責全從一個節點到另外一個節點。
2、ask不會記錄信息
-w687

17.6 複製和故障轉移

-w379

17.6.1 設置從節點

CLUSTER REPLCATE NODE_ID
-w297
-w494
-w509

17.6.2 故障檢測

-w742
-w391

17.6.3 故障轉移

-w726

17.6.4 選舉先的主節點

-w685

17.7 消息

-w209
meet消息、ping消息、pong消息、fail消息、publish消息。

17.8 重點回顧

  • 槽就是一致性哈希
  • 計算槽值
  • moved錯誤和ask錯誤
  • 重定向
  • 故障轉移和故障檢測
  • 主節點選舉
  • 消息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章