Redis複製流程:圖解

一。新版複製PSYNC命令實現:複製實現總流程服務器

 

(1)經過客戶端向從服務器發送 slaveof <master_ip> <master_port>;此爲異步執行,從服務器設置好屬性後向客戶端返回OK時才真正執行復制

 

(2)創建套接字鏈接;(可認爲從服務器變成了主服務器的客戶端)

 

(3)從服務器發送PING命令,主服務器返回PONG命令;返回則繼續執行,不然斷開重連

 

(4)從服務器是否設置了masterauth;設置了則需進行身份驗證,未設置則跳過

 

(5)從服務器向主服務器發送從服務器監聽的端口號

 

(6)PSYNC命令數據同步(完整重同步或部分重同步)

 

(7)命令傳播(保持主從服務器數據一致,收/發命令時,從/主服務器的複製偏移量增長;同時,將命令傳播至複製積壓緩衝區)

 

(8)心跳檢測(默認每秒一次)

 

二。新版複製PSYNC命令實現:同步與命令傳播異步

服務器中的三個重要參數:複製偏移量、複製積壓緩衝區、服務器運行ID
1.主/從服務器的複製偏移量:記錄收/發字節數(主發送多少則偏移量增長多少,從接收多少則偏移量增長多少);用於判斷主從服務器數據是否一致(經過偏移量是否相同)。
2.主服務器的複製積壓緩衝區:固定長度FIFO隊列,默認1M,存儲最近的一部分命令;用於部分重同步。
(首先,命令傳播時不只將命令發送給從服務器還會將命令發送到複製積壓緩衝區;其次,斷線後重複製時先判斷是否可以進行部分重同步即判斷複製偏移量offset以後的數據是否還在複製積壓緩衝區中;最後,若是存在則返回+CONTINUE回覆,將複製積壓緩衝區在偏移量以後的數據發送給從服務器,完成部分重同步;不存在,則返回+FULLRESYNC <runid> <offset>並執行完整重同步)
3.服務器運行ID:記錄主從服務器運行ID;用於部分重同步。
(首先,初次複製時主服務器將本身的運行ID發送給從服務器,從服務器保存該ID;其次,斷線重連後從服務器經過運行ID判斷重連的是否爲上次的主服務器( 是否發送PSYNC <runid> <offset>,發送則爲初次複製);最後,若是不相同則直接執行完整重同步,相同則嘗試經過複製偏移量和複製積壓緩衝區的比對來執行部分重同步)

相關文章
相關標籤/搜索