redis主從同步機制

李奔三發表於2020-12-03

高可用:

1.資料儘量少丟失 aof/rdb

2.服務儘量少中斷 主從模式

讀寫分離 從庫讀操作 主庫支援讀寫操作

為什麼分離 如果主從都可以寫,必然涉及 加鎖,例項協商

主從同步過程

1.從庫執行slave of 主庫地址,當該命令執行後,會傳送給主庫一個命令,告知主庫開始給我同步

2.主庫fork一個子程式,開始生產rdb檔案.

為什麼不用aof ?rdb小,頻寬消耗小. 解析速度快

 

  注意:fork操作其實是會阻塞的.

再看一下增量同步

 

1. repl_backlog_buffer用於主從間的增量同步。主節點只有一個repl_backlog_buffer緩衝區,各個從節點的offset偏移量都是相對該緩衝區而言的。

2. replication buffer用於主節點與各個從節點間 資料的批量互動。主節點為各個從節點分別建立一個緩衝區,由於各個從節點的處理能力差異,各個緩衝區資料可能不同

repl_backlog_buffer裡面存的也是寫操作命令

replication buffer就是 bufferedWriter,寫緩衝區.每個client都有

 

repl_backlog_buffer是所有從庫共享的,slave_repl_offset是由從庫自己記錄的,這也是因為每個從庫的複製進度不一定相同

 

 

為什麼有主從從同步?

 

主從從同步

1.為什麼出現級聯同步

主同步時,會fork生成rdb檔案,可能會阻塞,會消耗記憶體,cpu.傳輸會消耗頻寬

 

總結:

  1. Redis採用讀寫分離的好處:避免了加鎖,例項間協商是否完成修改等複雜操作
  2. 全量同步的發生時機:首次上線 和 從庫的環形緩衝區位置標識被覆蓋
  3. 增量同步保障機制依賴於一個特殊的資料結構:環形緩衝區
  4. 首次同步分為三個階段,①:建立連線,②:同步RDB檔案,③:同步增量資料
  5. 全量同步需要主機fork子程式,產生全量RDB檔案,併傳送,為了減輕主機的壓力,從機之間也可用互相同步
  6. 增量同步可以緩解主機全量同步的壓力,它需要特殊機制保障:replication buffer,環形緩衝區,master_repl_offset,slave_repl_offset
  7. 從機的同步位置標識,在環形緩衝區被覆蓋後,會觸發新的一輪全量同步,所repl_backlog_buffer的大小是redis重要的調優引數
  8. 主從同步有三種機制:全量同步,基於長連結的命令傳播(在寫這個筆記時把它忽略了),增量同步

 

怎麼解決主從同步延遲問題.

1.預設從庫會響應讀請求.我們可以設定從主庫讀取(slave-serve-stale-data)

2.監控.

可以監控主從同步的差距.如果太大,可以動態設定禁止讀從庫吧.

其他不清楚了

 

 

 

相關文章