マスタースレーブのレプリケーションとは何ですか
マスタからRedisのは、からの複製機構手段可能にされているサーバ(スレーブ)データが正確にマスターサーバー(マスター)の複製を、以下のように:
若しくは
マスタースレーブのレプリケーションモードと作品
仕事:
主に二つのモードがあるからRedisのマスターコピー:完全な再同期化(完全な再同期化)と部分的に再同期(部分再同期)
- 完全な再同期はどの初期レプリケーション処理のため:ステップの完全な再実行と同期SYNCコマンド基本的に同じ、彼らは、プライマリサーバ持つことである作成し、RDBにファイルを送信するために、サーバーから送信され、バッファの内部に保存されています同期のためのコマンドを書きます。
- 再接続の複製の再同期処理の後部つつ:サーバからの切断の後に再接続するときの条件が許す場合は、プライマリサーバは、プライマリサーバから切断するには、サーバから送信されたメインライトコマンド中に実行することができますサーバは、限り、サーバから受信した書き込みコマンドを実行して、プライマリサーバの現在位置しているの状態にデータベースを更新することができます。
完全な同期メカニズムは、我々は非常によく理解しています。例えば、最初の時間の後に、あなたはそれが完全に同期していること、その後、マシンからホストに接続します。このとき、スレーブに送信したホストのドキュメントRDBパッケージは、スレーブが同期させることができます。
この間場合は、新しいホストコマンドの安定した流れは、その後、バッファにすべてのフィット感は、その後、部分的な同期は、機械缶の内側からバッファにデータを送信します。
部分同期の使用は、ネットワークが不安定な場合、オフ、同期スレーブとマスタであることでもあります。また、同期機構の一部を使用しています。
原理:
再同期の部分は、3つの部分から構成されています。
- マスターは、オフセットコピーからのオフセットおよびサーバーをコピー(複製オフセット)。
- マスターサーバーの複製バックログバッファ(レプリケーションバックログ)。
- サーバーID(実行ID)を実行しています。
オフセットコピー
両面のコピーを実行します - サーバのメンテナンスからマスターサーバと1つのコピーが相殺されています。
- マスタNがサーバからデータのバイト伝播するたびに、所有する値Nをコピープラスオフセット。
- Nの普及へのプライマリサーバは、サーバから受信したデータのバイトたびに、所有することになるオフセットプラスNの値をコピーします。
メインサーバからのオフセットコントラスト複製することにより、プログラムが簡単に一貫性のある状態でサーバからホストかどうかを知ることができます。
- プライマリサーバからの一貫した状態にある場合は、両方のプライマリサーバのオフセットは常に同じです。
- マスタとスレーブサーバーの両方があればこれとは対照的に、オフセットは同じではない、マスター・スレーブ・サーバは、一貫した状態にありません。
以下の状況:
コピーバックログバッファ
あなたはオフセットが同じでないことが判明した場合、あなたはバッファを使用する必要があります。
複製バックログは、固定長のバッファは、マスタサーバ(固定サイズ)先入れ先出し(FIFO)キュー、1メガバイトのデフォルトサイズによって維持されます。
コマンド送信のためのプライマリサーバ、それはライトコマンドがサーバーからのすべてに送信されるわけではない場合にのみ、図3に示すように、書き込みコマンドは、バッファの内部にキューイングさのバックログをコピーします。
彼のPSYNCコマンドを介してサーバからプライマリサーバ再接続サーバは、ときにマスターサーバーにオフセットoffsetコピーに、これに応じて決定されるオフセット同期レプリケーション動作を行うサーバからマスタサーバ。
- 複製バックログ(オフセットデータ+ 1を開始オフセットされている)、オフセットドリフト量後のデータがバッファ内部に依然として存在する場合、マスターサーバーの部分から再同期操作を実行します。
- オフセットドリフト量複製バックログ後のデータがバッファに存在しない場合は逆に、マスタは、サーバから完全な再同期を実行します。
サーバーの実行ID
除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID(run ID):
- 每个Redis服务器,不论主服务器还是从服务,都会有自己的运行ID;
- 运行ID在服务器启动时自动生成,由40个随机的十六进制字符组成,例如53b9b28df8042fdc9ab5e3fcbbbabff1d5dce2b3;