05.簡單瞭解redis replication核心原理/斷點續傳/無磁盤化複製以及master持久化的意義

1、redis replication核心原理


(1) 當啓動一個 slave node 的時候,它會發送一個 PSYNC 命令給 master node。
(2) 若是這是 slave node 初次鏈接到 master node,那麼會觸發一次 full resynchronization 全量複製。
(3) 此時 master 會啓動一個後臺線程,開始生成一份 RDB 快照文件,同時還會將從客戶端 client 新收到的全部寫命令緩存在內存中。
(4) master 會將這個 RDB 發送給 slave,slave 會先寫入本地磁盤,而後再從本地磁盤加載到內存中
(5) 接着 master 會將內存中緩存的寫命令發送到 slave,slave 也會同步這些數據。
(6) slave node 若是跟 master node 有網絡故障,斷開了鏈接,會自動重連,鏈接以後 master node 僅會複製給 slave 部分缺乏的數據。
在這裏插入圖片描述node


2、redis replication的核心機制


  • redis採用異步方式複製數據到slave節點,不過redis 2.8開始,slave node會週期性地確認本身每次複製的數據量
  • 一個master node是能夠配置多個slave node的
  • slave node也能夠鏈接其餘的slave node
  • slave node作複製的時候,是不會block master node的正常工做的
  • slave node在作複製的時候,也不會block對本身的查詢操做,它會用舊的數據集來提供服務;
    可是複製完成的時候,須要刪除舊數據集,加載新數據集,這個時候就會暫停對外服務了
  • slave node主要用來進行橫向擴容,作讀寫分離,擴容的slave node能夠提升讀的吞吐量


3、replication的斷點續傳


若是主從複製過程當中,網絡鏈接中斷,那麼能夠接着上次複製的地方,繼續複製下去,而不是從頭開始複製一份程序員

原理:

master node 會在內存中維護一個 backlog,master 和 slave 都會保存一個 replica offset和一個 master run id,offset 就是保存在 backlog 中的。若是 master 和 slave 網絡鏈接斷掉了,slave 會讓 master 從上次的offset 開始繼續複製,若是沒有找到對應的 offset,那麼就會執行一次 resynchronizationredis


4、無磁盤化複製


master在內存中直接建立rdb,而後發送給slave,不會在本身本地落地磁盤了緩存

適用狀況:由於磁盤傳輸性能比較低,網絡帶寬容許的狀況下能夠考慮使用diskless模式。
配置以下:安全

repl-diskless-sync no
repl-diskless-sync-delay 5

開啓diskless模式,在主機開始同步以前須要等待全部slave的到來,並將傳輸任務緩存到傳輸隊列。默認主機等待時間是5秒,若是設置爲0時候,傳輸就不會等待全部從機的到來。網絡


5、過時key處理


  • slave不會過時key,只會等待master過時key。架構

  • 若是master過時了一個key,或者經過LRU淘汰了一個key,那麼會模擬一條del命令發送給slave。less


6、master持久化對於主從架構的安全保障的意義


若是採用了主從架構,那麼建議必須開啓master node的持久化!不建議用slave node做爲master node的數據熱備。異步

緣由分析
  1. 若是你關掉master的持久化,那麼master的數據都存儲在內存中,此時master宕機後是沒有本地數據能夠恢復的,而後就會直接認爲本身的數據是空的,重啓後master就會將空的數據集同步到slave上去,全部slave的數據所有清空,這樣全部slave數據都丟失了。
  2. 即便採用了哨兵模式,slave node能夠自動接管master node,可是也可能sentinal尚未檢測到master failure,master node就自動重啓了,仍是可能致使上面的全部slave node數據清空故障
總結

master節點,必需要使用持久化機制,master的各類備份方案,還要考慮本地文件丟失的狀況; 從備份中挑選一份rdb去恢復master; 這樣才能確保master啓動的時候,是有數據的
這裏能夠參考個人上一篇文章04.簡單瞭解一下Redis企業級數據備份方案性能




hi~我是Mirror,一個爲了自由安逸的將來而不斷前進的的程序員。 若是你以爲文章對你有一點點幫助,一個小小贊,即是對個人承認,若是有不足之處,也歡迎各位指正。

相關文章
相關標籤/搜索