1.マスタースレーブアーキテクチャの中核となる原則
スレーブノードを起動すると、PSYNCコマンドがマスターノードに送信されます。
これがマスターノードに再接続するスレーブノードである場合、マスターノードは欠落しているデータをスレーブパーツにのみコピーします。それ以外の場合、スレーブノードが初めてマスターノードに接続すると、完全な再同期がトリガーされます。
完全再同期を開始すると、マスターはバックグラウンドスレッドを開始してRDBスナップショットファイルの生成を開始し、クライアントから受信したすべての書き込みコマンドをメモリにキャッシュします。RDBファイルが生成された後、マスターはこのRDBをスレーブに送信し、スレーブは最初にローカルディスクに書き込み、次にローカルディスクからメモリにロードします。次に、マスターはメモリにキャッシュされた書き込みコマンドをスレーブに送信し、スレーブもこれらのデータを同期します。
スレーブノードでマスターノードとのネットワーク障害が発生して切断された場合、自動的に再接続されます。マスターが再接続するスレーブノードが複数あることを検出した場合、マスターはrdb保存操作のみを開始し、すべてのスレーブノードにデータの1つのコピーを提供します。
2.マスター/スレーブレプリケーションブレークポイントの再開
Redis 2.8以降、マスタースレーブレプリケーションブレークポイントの再開送信がサポートされています。マスタースレーブレプリケーションプロセス中にネットワーク接続が切断された場合、最初からコピーする代わりに、最後にコピーした場所をコピーし続けることができます。
多くの場合、マスターノードのメモリにはバックログがあり、マスターとスレーブの両方がレプリカオフセットとマスターIDを保存し、オフセットはバックログに保存されます。マスターとスレーブ間のネットワーク接続が切断された場合、スレーブはマスターに最後のレプリカオフセットからのレプリケーションを続行させます
ただし、対応するオフセットが見つからない場合は、再同期が実行されます
3.ディスクコピーなし
マスターはメモリ内に直接RDBを作成してスレーブに送信しますが、ローカルディスクには着陸しません。
repl-diskless-sync
repl-diskless-sync-delay、一定時間待ってからコピーを開始します。これは、スレーブが再接続するまで待機する必要があるためです。
4.期限切れのキー処理
スレーブはキーを期限切れにせず、マスターがキーを期限切れにするのを待つだけです。マスターがキーを期限切れにするか、LRUを介してキーを削除すると、delコマンドがシミュレートされてスレーブに送信されます。