Redis之主從同步

來源:互聯網
上載者:User

標籤:redis   同步   

 同步

     Redis為什麼要實現主從同步?

    主從同步,有以下好處:

  1.      實現資料的備份,減少單點故障帶來的損失;
  2.      有利於實現負載平衡。本來一台伺服器負責所有資料的讀寫,而通過主從同步,可以讓多個從伺服器負責資料的讀,而主伺服器主要負責資料的寫,減輕了單點壓力。


部分重同步

     Redis從2.8開始,引入了PSYNC,支援部分重同步:主伺服器和從伺服器中斷連線這段時間,主伺服器的資料可能只是發生了少量的變化,那麼當從伺服器重新連上主伺服器時,就沒有必要把主伺服器裡面的資料全部發給從伺服器進行資料覆蓋,只需要把不一致的資料發給從伺服器,這樣避免了主伺服器進行資料備份、資料的網路傳輸。



同步的過程

下面使用兩台機器,A(10.15.62.11 :6379)作為從伺服器,B(10.15.62.12  :6380)作為主伺服器,介紹一下A和B進行初次完全同步和部分重同步的過程。

  1. 通過用戶端向A發送slaveof 10.15.62.12 6380的命令, A收到命令之後,會向用戶端返回+OK;
  2. A和B之間建立通訊端;
  3. A向B發送PING命令,有兩個目的:1)驗證AB之間的通訊端有沒有問題;2)B伺服器能夠處理命令,對外服務。
  4. B向A返回PONG;
  5. 如果A設定了masterauth,表示需要身分識別驗證。那麼A會向B發送AUTH命令,命令參數是masterauth的值。
  6. 如果A發送的值和B的requirepass值相同,則通過驗證。
  7. A向B發送REPLCONF listening-port 6379,B會把A的連接埠儲存起來,唯一的用途是:使用者使用用戶端向B發送INFO replication命令時,顯示從伺服器的連接埠。
  8. A向B發送PSYNC ? -1;
  9. B接受PSYNC命令後,把自己的run-id和自己的複製位移量發給A,A會把B的運行id儲存起來,並且把B的複製位移量作為自己的複製位移量;B然後執行BGSAVE操作,通過子進程產生一份RDB資料,同時把執行BGSAVE命令期間接收到的寫命令儲存起來。
  10. B把RDB資料發給A,A把自己的資料庫清空,把B的RDB資料載入到記憶體裡面;B把複製的寫命令發給A。
  11. 同步完成;
  12. 然後向B寫資料時,B會向A傳遞命令。
  13. A和B突然斷開;
  14. A和B重新串連;
  15. A向B發送PSYNC <run-id>  <offset>……run-id是自己儲存的主伺服器的運行id,offset是自己的複製位移量。
  16. B接收到PSYNC及其參數,發現運行id和自己的運行id相同;發現offset之後的資料在自己的複製積壓緩衝區裡面,只需要部分重同步,向A返回+CONTINUE。
  17. B把積壓緩衝區裡面的資料發給A。
  18. 再次同步。


代碼實現:

未完待續。



參考資料:

《Redis設計與實現》第15章

Redis主從同步源碼淺析-Slave端
















Redis之主從同步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.