17_redisレプリケーションの完全なフロープロセスと原則が再び徹底的に分析されます

1.コピーの完全なプロセス

(1)スレーブノードが起動し、マスターノードのホストとIPを含むマスターノードの情報のみを保存するが、レプリケーションプロセスは開始しない

マスターホストとIPはどこから来たか、redis.confのslaveof設定

(2)スレーブノード内に時限タスクがあり、接続する新しいマスターノードがあるかどうかを毎秒確認し、コピーがあれば、マスターノードとのソケットネットワーク接続を確立します
(3)スレーブノードはpingコマンドをマスターノードに送信します
(4)パスワード認証、マスターがrequirepassを設定する場合、スレーブノードは過去の認証用にmasterauthパスワードを送信する必要があります
(5)マスターノードは初めてフルコピーを実行し、すべてのデータをスレーブノードに送信します
(6)マスターノードは今後もコマンドを書き込み続けます、スレーブノードへの非同期レプリケーション

2.データ同期に関連するコアメカニズム

スレーブがmsaterに初めて接続するときに、完全なコピーが実行され、そのプロセスの詳細なメカニズムの一部を指します

(1)マスターとスレーブはオフセットを維持します

マスターは継続的にオフセットを累積し、スレーブは継続的にオフセットを累積します。
スレーブはオフセットを毎秒マスターに報告し、マスターは各スレーブのオフセットも保存します。

これは、特定が完全コピーに使用されていると言っているのではなく、主にマスターとスレーブが互いのデータの不整合を知るために、それらのデータのオフセットを知っている必要があるということです。

(2)バックログ

マスターノードにはバックログがあります。デフォルトは1MBです。
マスターノードがデータをスレーブノードにコピーすると、データのコピーもバックログに書き込まれます。
バックログは主に、フルコピーが中断されたときの増分レプリケーションに使用されます。

(3)マスター実行ID

情報サーバーでは
マスター実行ID がホスト+ IPに従ってマスターノードを見つけた場合、それは信頼できません。マスターノードが再起動するか、データが変更される場合、スレーブノードは異なる実行IDに従って区別される必要があります。全額をコピー
しますが、実行IDを変更する必要がある場合のRedisを再起動しないで、あなたはRedisの-CLIデバッグreloadコマンドを使用することができます

(4)psync

スレーブノードはpsyncを使用してマスターノードからコピーします。psyncrunidオフセット
マスターノードは、自身の状況に応じて応答情報を返します。FULLRESYNCrunidオフセットがフルコピーをトリガーするか、CONTINUEが増分コピーをトリガーする可能性があります。

3.完全なコピー

(1)マスターがbgsaveを実行し、ローカルでrdbスナップショットファイルを生成します
(2)マスターノードがrdbスナップショットファイルをスレーブノードに送信します。rdbレプリケーション時間が60秒を超える場合(repl-timeout)、スレーブノードはレプリケーションが失敗したと見なしますこのパラメーターは適切に調整できます。
(3)ギガビットネットワークカードを備えたマシンでは、通常、毎秒100MBおよび6Gファイルを転送します。これは60秒を超える場合があります。
(4)マスターノードがRDBを生成すると、すべての新しい書き込みコマンドをメモリにキャッシュしますこのプロセスでは、salveノードがRDBを保存した後、新しい書き込みコマンドをsalveノードにコピーします
(5)client-output-buffer-limitスレーブ256MB 64MB60。コピー中に、メモリバッファーが64MB以上、または1度消費し続ける場合パフォーマンスが256MBを超える場合は、レプリケーションを停止し、レプリケーションが失敗します
(6)スレーブノードがRDBを受信した後、自身の古いデータを空にし、RDBを独自のメモリにリロードし、古いデータバージョンに基づいて外部サービスを提供します
(7)スレーブの場合ノードがAOFを開くと、BGREWRITEAOFがすぐに実行され、AOFを書き換えます

RDB生成、ネットワーク経由のRDBコピー、スレーブの古いデータのクリーンアップ、書き換えのスレーブ、時間がかかる

コピーされるデータの量が4Gと6Gの間である場合、フルコピー時間は1分半から2分かかります。

4.増分レプリケーション

(1)フルコピープロセス中にマスタースレーブネットワーク接続が切断された場合、スレーブがマスターに再接続すると、スレーブはインクリメンタルレプリケーションをトリガーします。
(2)マスターは、失われたデータの一部を自身のバックログから直接取得し、スレーブノードに送信します。デフォルトのバックログは1MBです
(3)msaterは、スレーブによって送信されたpsyncのオフセットに従ってバックログからデータを取得します

5、ハートビート

マスターノードとスレーブノードはハートビート情報を互いに送信します

マスターはデフォルトで10秒ごとにハートビートを送信し、スレーブノードは1秒ごとにハートビートを送信します

6.非同期レプリケーション

マスターは書き込みコマンドを受信するたびに、データを内部に書き込み、非同期でスレーブノードに送信します

おすすめ

転載: www.cnblogs.com/hg-super-man/p/12716874.html