DBAtlas · データベース運用アトラス

レプリケーションの切断と終わらない完全再同期のループを解消する (backlog、replica バッファ)

Redisレプリケーション

コマンド

INFO replication
# Master: connected_slaves, slaveN:...,state=online,offset=,lag=  Replica: master_link_status, master_last_io_seconds_ago, master_sync_in_progress
INFO stats
# sync_full / sync_partial_ok / sync_partial_err: repeated full syncs = backlog too small
CONFIG GET repl-backlog-size
CONFIG SET repl-backlog-size 256mb
# If the replica buffer exceeds its limit during a full sync, the link drops and sync starts over:
CONFIG GET client-output-buffer-limit
CONFIG SET client-output-buffer-limit "replica 1gb 512mb 120"

概要

マスターとレプリカでリンク状態、オフセットの差、部分 / 完全同期のカウンターを表示する。短時間の切断が完全同期にならないようレプリケーション backlog を拡大し、完全同期が途中で切断されないようレプリカの出力バッファ上限を引き上げる。

使用する場面

レプリカが 'MASTER <-> REPLICA sync started' でループし続ける場合、sync_full カウンターが増加する場合、またはマスターのログに 'scheduled to be closed ASAP for overcoming of output buffer limits' と表示される場合。

注意

完全同期のたびに、マスターで fork + RDB の生成が行われる。このループはマスターのメモリとディスクに負荷をかける。repl-backlog-size はマスターのメモリから割り当てられる。レプリカバッファの上限を引き上げると、完全同期中にマスターがその分の追加メモリを使用する可能性があるため、maxmemory の計算に含める。変更を永続化するには CONFIG REWRITE または redis.conf が必要。

DBAtlas で開く →

関連項目