1. 程式人生 > >04、redis主從複製原理、斷點續傳、無磁碟化複製、過期key處理

04、redis主從複製原理、斷點續傳、無磁碟化複製、過期key處理

1、主從架構的核心原理

當啟動一個slave node的時候,它會發送一個PSYNC命令給master node

如果這是slave node重新連線master node,那麼master node僅僅會複製給slave部分缺少的資料; 否則如果是slave node第一次連線master node,那麼會觸發一次full resynchronization

開始full resynchronization的時候,master會啟動一個後臺執行緒,開始生成一份RDB快照檔案,同時還會將從客戶端收到的所有寫命令快取在記憶體中。RDB檔案生成完畢之後,master會將這個RDB傳送給slave,slave會先寫入本地磁碟,然後再從本地磁碟載入到記憶體中。然後master會將記憶體中快取的寫命令傳送給slave,slave也會同步這些資料。

slave node如果跟master node有網路故障,斷開了連線,會自動重連。master如果發現有多個slave node都來重新連線,僅僅會啟動一個rdb save操作,用一份資料服務所有slave node。

2、主從複製的斷點續傳

從redis 2.8開始,就支援主從複製的斷點續傳,如果主從複製過程中,網路連線斷掉了,那麼可以接著上次複製的地方,繼續複製下去,而不是從頭開始複製一份

master node會在記憶體中常見一個backlog,master和slave都會儲存一個replica offset還有一個master id,offset就是儲存在backlog中的。如果master和slave網路連線斷掉了,slave會讓master從上次的replica offset開始繼續複製

但是如果沒有找到對應的offset,那麼就會執行一次resynchronization

3、無磁碟化複製

master在記憶體中直接建立rdb,然後傳送給slave,不會在自己本地落地磁碟了

repl-diskless-sync
repl-diskless-sync-delay,等待一定時長再開始複製,因為要等更多slave重新連線過來

4、過期key處理

slave不會過期key,只會等待master過期key。如果master過期了一個key,或者通過LRU淘汰了一個key,那麼會模擬一條del命令傳送