redis主從復制、主從延遲知幾何


本篇章節主要從 redis 主從復制延遲相關知識及影響因素做簡要論述。

1、配置:repl-disable-tcp-nodelay

也即是TCP 的 TCP_NODELAY 屬性,決定數據的發送時機。

配置關閉:主節點產生的數據無論大小都會及時的發送給從節點。redis默認關閉此配置,以保障較小的主從延遲。當然,這需要主從間保持較好的網絡狀況。

配置打開:主節點會合並較小的TCP數據包以節省寬帶,默認發送時間間隔由linux內核設置決定,默認一般40ms。雖然這樣大大增加了主從之間的延遲,但是對於網絡狀況達不到條件或者對主從延遲不敏感的情況比較適用。

在實際應用中,我們可能也會遇到需要異地機房部署主從的情景,因此需要充分考慮對數據更新及時性及數據本身變動特性來決定具體的架構模式。

2、復制偏移量:master_repl_offset | slave_repl_offset

 

參與復制角色自身維護的復制偏移量。

主節點每次處理完寫操作,會把命令的字節長度累加到master_repl_offset中。

從節點在接收到主節點發送的命令后,會累加記錄子什么偏移量信息slave_repl_offset,同時,也會每秒鍾上報自身的復制偏移量到主節點,以供主節點記錄存儲。

在實際應用中,可以通過對比主從復制偏移量信息來監控主從復制健康狀況。

3、復制積壓緩沖:repl_backlog_*

關於redis內存分析,內存優化 介紹過復制積壓緩沖內存占用,主節點保持的一個固定長度隊列,默認大小1M,當主節點有從節點連接時,主節點在把寫操作發送給從節點的同時,也會寫入一份到復制積壓緩沖區。

復制積壓緩沖隊列,先進先出,主要用於增量復制及丟失命令補救等。

repl_backlog_active:0 | 1  關閉 | 開啟復制積壓緩沖區標志

repl_backlog_size:緩沖區最大長度

repl_backlog_first_byte_offset:緩沖區起始偏移量

repl_backlog_hislen:已存儲的數據長度。

可用偏移量范圍:[repl_backlog_first_byte_offset, repl_backlog_first_byte_offset + repl_backlog_hislen]

4、redis 實例運行id:run_id:

用以網絡中唯一標識區別redis運行實例。

需要注意的是redis重啟之后run_id會隨之改變,如下:

通常我們需要同一個redis實例保持唯一不變的運行ID,以保障主從復制數據安全性。

在需要重新加載配置時通常可以通過執行 debug reload 命令操作:

需要注意的是,debug reload 是阻塞操作,執行時首先生成本地RDB快照,然后清空數據再加載RDB數據。

5、主從復制:sync | psync

 

run_id就是上面我們所說的run_id,offset則是復制偏移量。

psync是v2.8版本之后的命令。

FULLRESYNC:全量復制

CONTINUE:部分復制

ERR:從節點版本限制無法識別psync命令。

全量復制:

 

部分復制:

 

6、主從心跳

 

 

主從之間維持長連接發送信條信息。

主節點每隔10s發送ping命令檢測從節點存活。配置:repl-ping-slave-period

 

從節點每隔1s發送 repconfig 命令,上報復制偏移量。

關於repconfig:

實時檢測主從節點網絡狀況。

上報復制偏移量,檢查數據復制狀況。

維護從節點數據量(min-slaves-to-write)及延遲性功能(min-slaves-max-lag)。

 


免責聲明!

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



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