redis 全量複製條件

以下情況備節點會做全量複製:
1. 備節點第一次連到主節點。
2. 節點重啓,主節點runid會變,備節點runid會丟失,redis <4.0 會發生全量複製。
3. 部分複製失敗,以下條件會產生改原因:
    -> 主備失聯超過repl-backlog-ttl(默認60分鐘),導致複製積壓緩衝區數據被清空。
        解決辦法:計算合理的repl-backlog-size值大小
                  通過主庫每秒增量的master複製偏移量master_repl_offset(info replication指令獲取)大小,如每秒offset增加是5MB,那麼主實例複製積壓緩衝區要保留最近60秒寫入內容,backlog_size設置就得大於300MB(60*5)。而從實例重啓加載RDB文件是較耗時的過程,如重啓某個重實例需120秒(RDB大小和CPU配置相關),那麼主實例backlog_size就得設置至少600MB.
    -> 主備失聯時間在repl-backlog-ttl之內,但是slave的offset與master可提供部分複製的條件不符,比如複製積壓緩衝區的未被同步的數據被部分沖掉或者slave記錄的偏移量大於server的記錄的偏移量。
        解決辦法同上。
        
client-output-buffer-limit這個配置也可能影響主備同步,先看下這個參數配置是什麼樣的:

client-output-buffer-limit slave 256mb 64mb 60
這裏對是客服端是slave的做限制
256mb 是一個硬性限制,當output-buffer的大小大於256mb之後就會斷開連接
64mb 60 是一個軟限制,當output-buffer的大小大於64mb並且超過了60秒的時候就會斷開連接

如果主備全量同步時間過久而且同步時的命令流量過大會導致client output buffer>256M或者>64M 持續的時間超過60秒,則master會主動斷開slave,slave後面會再次連接,做全量同步,如果還有相同的問題那麼主備會不停的做全量複製長期佔有系統資源和網絡資源。
解決辦法是output-buffer或者關閉限制。

redis主從複製原來推薦文章:

https://blog.csdn.net/gqtcgq/article/details/51287116

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章