Redis主從同步:全量同步 增量同步
阿新 • • 發佈:2018-12-25
日常工作中使用的Redis叢集是一主多從的架構模型(如下圖,主1+主2組成一套完整的資料),當主1發生宕機時,會切寫到從(為了方便製作預案主1主2會同時切,分別切向從1從2作為新的主),此時面臨的問題是主2沒有宕機,如果直接寫從2,那寫進從2的資料會不會被主2重新覆蓋(主2沒有宕機)?
針對以上問題引申出Redis主從同步的機制問題,學習瞭解後記錄如下:
Redis主從同步分為兩種機制:全量同步、增量同步。
主從複製過程:
當設定好slave伺服器後,slave會建立和master的連線,然後傳送sync命令。無論是第一次同步建立的連線還是連線斷開後的重新連線,master都會啟動一個後臺程序,將資料庫快照儲存到檔案中,同時
總結如下:
當Slave需要和Master進行資料同步時:
1) Salve會發送sync命令到Master
2) Master啟動一個後臺程序,將Redis中的資料快照儲存到檔案中
3) 啟動後臺程序的同時,Master會將儲存資料快照期間接收到的寫命令快取起來
4) Master完成寫檔案操作後,將該檔案傳送給Salve
5) Salve將檔案儲存到磁碟上,然後載入檔案到記憶體恢復資料快照到Salve的Redis上
6) 當Salve完成資料快照的恢復後,Master將這期間收集的寫命令傳送給Salve端
7) 後續Master
總結一下,主從剛剛連線的時候,進行全量同步;全同步結束後,進行增量同步。當然,如果有需要,slave 在任何時候都可以發起全量同步。所以,回到我們最初的疑問,正常情況下,當切寫到從2時,主2由於沒有資料寫入不會觸發增量同步也不會觸發全量同步,所以正常情況下主2的資料不會覆蓋從2新寫入的資料。