Redis主從複製的全量和增量同步介紹

chenfeng發表於2018-03-09
全量同步:
1.slave伺服器連線到master伺服器,傳送SYNC命令
     slave伺服器透過 syncWithMaster() 函式來連線 Master 伺服器(如果Master伺服器需要密碼登入的話,先登入),並且傳送SYNC命令請求同步,接著開啟 rdb 檔案(用於儲存由Master傳送過來的資料),建立讀rdb 的 IO 事件(readSyncBulkPayload)
2.master伺服器備份資料庫到 .rdb 檔案
     當slave伺服器傳送SYNC命令到master伺服器時,master 伺服器變回撥用 syncCommand() 函式來進行同步,同步的第一步便是把資料庫的資料儲存為 rdb 檔案,儲存完畢後呼叫updateSalvesWaitingBgsave()函式來傳送 rdb 檔案給所有的slave 伺服器,updateSlavesWaitingBgsave() 要做的事情是, 開啟 rdb 檔案, 建立傳送 rdb 檔案 IO 事件(sendBulkToSlave). 而sendBulkToSlave()主要的工作就是把rdb檔案傳送給 Slave 伺服器。而當 Slave 伺服器接收 rdb 檔案完畢之後(readSyncBulkPayload()函式處理), 會清空原來資料庫的資料,然後把 rdb 檔案的資料匯入到資料庫中
3.全量同步完成
     完成上面的步驟,全量同步基本完成。
增量同步:
     增量同步就是當 master 伺服器有資料更新的時候,會立刻同步到所有的 slave 伺服器
1.當我們在 master 伺服器增減資料的時候,就會觸發 replicationFeedSalves()函式,接下來在 Master 伺服器上呼叫的每一個命令都會使用replicationFeedSlaves() 函式來同步到Slave伺服器。當然,在執行此函式之前master 伺服器會判斷使用者執行的命令是否有資料更新,如果有資料更新並且slave 伺服器不為空,才會執行此函式,而此函式主要的工作就是把使用者執行的命令傳送到所有的 slave伺服器,讓 slave 伺服器執行,這樣就可以實施同步功能了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2151660/,如需轉載,請註明出處,否則將追究法律責任。

相關文章