Redis主從同步


主從架構

主從架構設計的思路大概如下:

  • 只有一台主服務器,只負責寫入數據,不負責讀取數據。
  • 多台從服務器,不寫入數據,只負責同步主服務器的數據,提供外部程序讀取。
  • 主服務器寫入數據后,將命令發送到從服務器,使主從數據同步。
  • 應用程序可以讀取某一台從服務器的數據,負載均衡。
  • 當某些從服務器癱瘓時,系統影響不大。當主服務器癱瘓時,選舉某一台從服務器成為主服務器

Redis主從同步

 

圖中左邊的流程是主服務器,而右邊的流程為從服務器。
(1)無論如何要先保證主服務器的開啟,開啟主服務器后,從服務器通過命令或者重啟配置項可以同步到主服務器。
(2)當從服務器啟動時,讀取同步的配置,根據配置決定是否使用當前數據響應客戶端,然后發送 SYNC 命令。

當主服務器接收到同步命令的時候,就會執行 bgsave 命令備份數據,但是主服務器並不會拒絕客戶端的讀/寫,而是將來自客戶端的寫命令寫入緩沖區 。從服務器未收到主服務器備份的快照文件的時候,會根據其配置決定使用現有數據響應客戶端或者拒絕。

(備注:bgsave命令,是一個異步保存命令,也就是系統將啟動另外一個進程,把Redis的數據保存到對應的數據文件中。

bgsave和save命令最大的不同是它不會阻塞客戶端的寫入,也就是在執行bgsave的時候,允許客戶端繼續讀/寫Redis)
(3)當 bgsave 命令被主服務器執行完后,開始向從服務器發送備份文件,這個時候從服務器就會丟棄所有現有的數據,開始載入發送的快照文件。
(4)當主服務器發送完備份文件后,從服務器就會執行這些寫入命令。此時就會把bgsave 執行之后的緩存區內的寫命令也發送給從服務器,從服務完成備份文件解析,就開始像往常一樣,接收命令,等待命令寫入。
(5)緩沖區的命令發送完成后,當主服務器執行一條寫命令后,就同時往從服務器發送同步寫入命令,從服務器就和主服務器保持一致了。而此時當從服務器完成主服務器發送的緩沖區命令后,就開始等待主服務器的命令了。
以上就是Redis主從同步的過程。

只是在主服務器同步到從服務器的過程中,需要備份文件,所以在配置的時候一般需要預留 一些內存空間給主服務器,用以騰出空間執行備份命令。 一般來說主服務器使用50%~65%的內存空間 ,以為 主從復制留下可用的內存空間。

Redis多從機同步機制

如下圖所示:

如果出現多台同步,可能會出現頻繁等待和頻繁操作 bgsave 命令的情況,導致主機在較長時間里性能不佳。

 

參考資料:

《SSM框架和Redis實現》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM