Redis - 集羣模式總結

集羣模式下,擁有16384個slot,只有當所有slot都有指派,集羣才處於上線狀態,出於性能考慮,每個節點都會記錄所有slot的指派狀態。

重新分片:將任意數量已經指派給源節點的slot指派給新的節點。

節點接受命令請求的過程:先檢查鍵所在的slot是否由自己處理,如果不是,返回一個MOVED錯誤,指引client轉向正確節點;如果鍵正在被遷移到其他節點,返回一個ASK錯誤,指引client轉向遷移後的節點,client發送ASKING指令,新節點設置REDIS_ASKING標識(一次性標識),破例執行關於正在遷移的鍵的命令,如果不發送ASKING,返回MOVED命令,指向源節點。

計算鍵屬於哪個slot的方法:CRC16(key) & 16383

故障轉移步驟:1.選擇從節點 2.執行SLAVEOF no one命令,成爲新的主節點 3.撤銷已下線節點的slot指派,轉移給自己 4.廣播一條PONG消息,更新其他節點中的信息 5.開始接受自己負責的slot相關的命令,故障轉移完成。

新的主節點選舉模式:基於Raft算法的領頭選舉(搶佔式,半數以上投票,配置紀元,每個紀元最多進行一次選舉),與sentinel領頭選舉模式基本相同。

集羣節點通過發送和接受消息通信,常見的有MEET,PING,PONG,PUBLISH,FAIL,消息頭中包含發送者的自身信息,接收者可以知道發送者的狀態、角色和slot指派信息是否發生變化。

故障檢測:接受PING消息的節點沒有在規定時間內返回PONG,將被髮送者標記爲疑似下線狀態(PFAIL),如果半數以上節點將某主節點標記爲疑似下線狀態,則該節點被標記爲下線狀態,標記下線狀態的節點會廣播一條關於該節點的FAIL消息。

從以上幾點,判斷redis主從與集羣的關係 -> 集羣同樣包含許多主從節點,但每個主節點負責不同的slot,即有分片。

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