3. 【Redis主從架構】Redis主從複製原理,斷點續傳,無磁盤化複製,key過期處理
1. Redis主從架構數據複製原理
-
當啓動一個slave node的時候,它會發送一個PSYNC命令給master node節點,master node同時觸發一次full resynchronization。
- 開始 full resynchronization的時候,master會啓動一個後臺線程,開始生成一份rdb快照文件,同時將生成快照文件期間的客戶端接收到的所有寫命令緩存到內存中。rdb快照文件生成完畢後,master會將這個RDB快照文件發送slave。
- slave node如果跟master node有網絡故障,斷開了連接,會自動重連。master如果發現有多個slave node都來重新連接,僅僅會啓動一個rdb slave操作,用一份數據服務多個slave node。
-
如果slave node 重新連接master node,那麼master node 僅僅複製, 從斷掉連接開始計算,到slave本次重新連接那部分缺少的數據。
2. 主從複製斷點續傳
redis2.8開始,redis就支持主從複製的斷點續傳,如果主從複製的過程中,網絡故障斷掉了,那麼就接着從上次複製的地方開始複製,而不是從頭開始複製。
master node會在內存中維護一個backlog,master和slave都會保存一個replica offset,還有一個masterid,offset就是保存在backlog中。如果master和slave網絡連接斷掉了,slave就會讓master從上次的replicate offset開始繼續複製。
但是如果沒有找到對應的offset,那麼就會執行一次full resynchronization
3. 無磁盤化複製
master在內存中直接創建rdb快照文件,然後發送給slave,不會在本地落地到磁盤了。
- 無磁盤化配置
repl-diskless-sync
repl-diskless-sync-delay yes,等待一定時長再開始複製,因爲要等更多的slave重新連接過來
4. 過期key處理
slave不會過期key,只會等待master過期key。如果master過期key,或者通過LRU淘汰一個key,那麼master就會模擬一條del命令發送給slave。
參考 石衫老師 《億級流量教程》課程筆記