redis主從之間的複製邏輯
- redis2.8版本以前只有徹底複製功能,命令SYNC
- redis2.8版本以後新增部分重同步實現,命令PSYNC
- redis2.8版本以後新增心跳檢測,命令REPLCONF ACK <replication_offset>
一、SYNC命令的步驟請看下圖
二、PSYNC命令執行的過程請看下圖
2.一、什麼是積壓緩衝區
redis的積壓緩衝區的默認大小爲1MB,從服務器在執行PSYNC 命令,若是runid是主服務器的runid,則在積壓緩衝區裏面查找offset若是存在則返回 CONTINUE,開啓重同步。複製積壓緩衝區是一個固定長度的FIFO對了。redis
三、複製的實現步驟
- SLAVEOF 127.0.0.1 6379 執行復制命令
- 創建套接字鏈接
- 從服務器發送PING命令,主返回PONG表ok。若是timeout或則返回錯誤則從新建套接字
- 身份驗證以下圖
- 發送端口信息,從執行REPLCONF listening-port 命令,信息保存主服務器信息中
- 同步,執行PSYNC命令
- 命令傳播,主給從發送寫命令
四、心跳檢測
每一個1s,從向主服務器發送REPLCONF ACK <replication_offset>服務器
- 檢測主從服務器的網絡鏈接狀態。
- 輔助實現min-slaves選項
- 檢測命令丟失