1. 程式人生 > >Redis-主從架構原理

Redis-主從架構原理

一、為什麼需要搭建主從架構?

單機的redis吞吐量不高,幾乎不太可能做到QPS超過10萬+。在實際開發中,需要主從架構通過讀寫分離,實現高併發。一般來說,對於快取,寫的請求是比較少的,可能寫請求也就一秒鐘幾千,大量的請求都是讀,一秒鐘幾萬次讀。

二、主從架構的核心原理

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

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

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

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

三、主從複製的端點續傳

如果主從複製過程中,網路連線斷掉了,那麼可以接著上次複製的地方,繼續複製下去,而不是從頭開始複製一份。master node會在記憶體中常見一個backlog,master和slave都會儲存一個replica offset還有一個master id,offset就是儲存在backlog中的。如果master和slave網路連線斷掉了,slave會讓master從上次的replica offset開始繼續複製。但是如果沒有找到對應的offset,那麼就會執行一次resynchronization。

四、無磁碟化複製

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

五、過期key處理

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