0四、redis主從複製原理、斷點續傳、無磁盤化複製、過時key處理

一、主從架構的核心原理node

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

若是這是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。架構

二、主從複製的斷點續傳less

從redis 2.8開始,就支持主從複製的斷點續傳,若是主從複製過程當中,網絡鏈接斷掉了,那麼能夠接着上次複製的地方,繼續複製下去,而不是從頭開始複製一份線程

master node會在內存中常見一個backlog,master和slave都會保存一個replica offset還有一個master id,offset就是保存在backlog中的。若是master和slave網絡鏈接斷掉了,slave會讓master從上次的replica offset開始繼續複製blog

可是若是沒有找到對應的offset,那麼就會執行一次resynchronization內存

三、無磁盤化複製同步

master在內存中直接建立rdb,而後發送給slave,不會在本身本地落地磁盤了

repl-diskless-sync
repl-diskless-sync-delay,等待必定時長再開始複製,由於要等更多slave從新鏈接過來

四、過時key處理

slave不會過時key,只會等待master過時key。若是master過時了一個key,或者經過LRU淘汰了一個key,那麼會模擬一條del命令發送給slave。  

相關文章
相關標籤/搜索