Redis複製《Redis開發與運維讀書筆記》
阿新 • • 發佈:2018-12-12
文章目錄
- 複製功能是高可用Redis的基礎。
- 主從節點之間維護心跳(長連線)和偏移量檢查機制,保證主從通訊正常和資料一致
- Redis複製過程是非同步的,主節點完成後直接返回客戶端,不等待從節點複製完成,可能存在從節點延時。
- 當使用從節點使用者讀寫分離時會存在資料延遲、過期資料、從節點可用性問題
- 主機節點存在多個從節點或者一臺機器上部署多個主節點時可能存在複製風暴的風險。
配置
建立複製
預設情況加每個Redis節點都是主節點。每個從節點只能有一個主節點,每個 主節點可以有多個從節點,從節點還可以有從節點。
配置複製的方式有三種:
1)在配置檔案中加入: slaveiof {masterHost} {masterPort}
--slaveiof {masterHost} {masterPort}
3)在從節點發送命令slaveiof {masterHost} {masterPort}
可以通過info replication
檢視複製相關狀態
斷開復制
- 從節點執行
slaveof no one
斷開與主節點複製關係 從節點流程: 1)斷開與主節點複製關係。 2)從節點晉升為主節點 - 從節點可以通過
slaveiof {newMasterHost} {newMasterPort}
切換主節點 從節點流程: 1)斷開與舊主節點複製關係。 2)與主節點建立複製關係。 3)刪除從節點當前資料。
安全性
主節點設定requirespass
引數進行密碼校驗
拓撲
- 一主一從
- 一主多從:高併發場景可能使主節點負載過高
- 樹狀主從
原理
複製過程
1)從節點儲存主節點資訊
2)從節點記憶體每秒定時任務維護與主機點複製的相關邏輯,如果有新主節點則與新主節點建立連線
3)連線成功後從節點發送ping
請求進行首次通訊。如果沒有收到準點的pong
回覆或者超時則從節點斷開,等待下次定時任務重接。
4)許可權校驗,如果主節點設定了requirespass
5)同步資料集。
6)命令持續複製
資料同步
- 複製偏移量: 參與複製的主從節點都會維護自身的複製偏移量。從節點每秒鐘上報自身的複製偏移量給主機節點,因此主節點也儲存從節點的複製偏移量。
- 複製積壓緩衝區 複製積壓緩衝區是儲存在主節點上的定長佇列(預設1M),儲存最近已複製資料的功能,用於部分複製和複製命令丟失的資料補救。
- 主節點執行ID 每個Redis節點啟動時會動態分配一個40為的十六進位制字串作為執行ID。從節點會儲存自己複製的主節點ID。
- psync命令
從節點通過
psync
命令完成全量複製和部分複製: psync {主節點runId} {當前從節點的複製偏移量offset}
全量複製
主要時間開銷:
- 主節點bgsave
- RDB檔案網路傳輸
- 從節點清空資料
- 從節點載入RDB檔案
- 可能的AOF時間
全量同步發生的場景:
- 主從第一簡歷複製時
- 節點執行ID不匹配時(主節點重啟了)
- 複製積壓緩衝區不足(從節點請求的偏移量不在複製積壓緩衝區內時)
注意事項:
- 如果全量複製總時間超過repl-timeout(預設60秒)則從節點將放棄接受RDB檔案並清空已下載的臨時檔案,造成全量複製失敗。
- 如果RDB傳輸時間過長,在高併發寫入的時候導致主節點複製客戶端緩衝區溢位(預設60M),那麼主節點將關閉複製客戶端連結,造成全量複製失敗。
無盤複製:主節點不生成RDB檔案而是直接通過網路傳送給從節點(預設關閉)。
部分複製
如果 複製偏移量在複製積壓緩衝區 內則直接從複製積壓緩衝區中獲取資料傳送從節點。 如果 複製偏移量不在複製積壓緩衝 區內發生全量複製