1. 程式人生 > >Redis主從同步:全量同步 增量同步

Redis主從同步:全量同步 增量同步

日常工作中使用的Redis叢集是一主多從的架構模型(如下圖,主1+主2組成一套完整的資料),當主1發生宕機時,會切寫到從(為了方便製作預案主1主2會同時切,分別切向從1從2作為新的主),此時面臨的問題是主2沒有宕機,如果直接寫從2,那寫進從2的資料會不會被主2重新覆蓋(主2沒有宕機)?

針對以上問題引申出Redis主從同步的機制問題,學習瞭解後記錄如下:

Redis主從同步分為兩種機制:全量同步、增量同步。

主從複製過程:

當設定好slave伺服器後,slave會建立和master的連線,然後傳送sync命令。無論是第一次同步建立的連線還是連線斷開後的重新連線,master都會啟動一個後臺程序,將資料庫快照儲存到檔案中,同時

master主程序會開始收集新的寫命令並快取起來。後臺程序完成寫檔案後,master就傳送檔案給slaveslave將檔案儲存到磁碟上,然後載入到記憶體恢復資料庫快照到slave上。接著master就會把快取的命令轉發給slave。而且後續master收到的寫命令都會通過開始建立的連線傳送給slave。從masterslave的同步資料的命令和從 client傳送的命令使用相同的協議格式。當masterslave的連線斷開時slave可以自動重新建立連線。如果master同時收到多個 slave發來的同步連線命令,只會使用啟動一個程序來寫資料庫映象,然後傳送給所有slave

總結如下:

Slave需要和Master進行資料同步時:

1)     Salve會發送sync命令到Master

2)     Master啟動一個後臺程序,將Redis中的資料快照儲存到檔案中

3)     啟動後臺程序的同時,Master會將儲存資料快照期間接收到的寫命令快取起來

4)     Master完成寫檔案操作後,將該檔案傳送給Salve

5)     Salve將檔案儲存到磁碟上,然後載入檔案到記憶體恢復資料快照到SalveRedis

6)     Salve完成資料快照的恢復後,Master將這期間收集的寫命令傳送給Salve

7)     後續Master

收集到的寫命令都會通過之前建立的連線,增量傳送給salve

總結一下,主從剛剛連線的時候,進行全量同步;全同步結束後,進行增量同步。當然,如果有需要,slave 在任何時候都可以發起全量同步。所以,回到我們最初的疑問,正常情況下,當切寫到從2時,主2由於沒有資料寫入不會觸發增量同步也不會觸發全量同步,所以正常情況下主2的資料不會覆蓋從2新寫入的資料。

其他