2017-08-21 6 views
0

Redisのクラスタでないredis.confは言う:どのように「ディスク・バックアップ」複製作業が

1)ディスク・バックアップ:Redisのマスターは、ディスク上のRDB ファイルを書き込み、新しいプロセスを作成します。その後、ファイルは親の プロセスによって徐々にスレーブに転送されます。

"親プロセスによってスレーブに転送された"ということはどういう意味ですか?

ありがとう

答えて

0

簡単です。まず、RDBファイルをバッファーに読み込み、socket.writeを使用してこれをlistenしているsalveのポートに送ります。

実装は、私が言ったよりも複雑です。しかし、これはredisがすることです。詳細は、redis/srcのreplication.cを参照してください。

EDITED:

はい、ディスクレス機構だけ子プロセスが直接中間記憶装置としてのディスクを使用することなく、スレーブにワイヤ上RDBを送信する使用します。
実際に、ディスクを使用してRDBを保存すると、redisマスターはキューイングなしで同時に多くのスレーブにサービスを提供できます。ディスクレスレプリケーションがスレーブで機能し、別のスレーブが来て完全な同期が必要な場合は、最初のスレーブが終了するのを待つためにキューに入れる必要があります。このため、他の設定をrepl-diskless-sync-delayにすると、より多くのスレーブがこの並列処理を行うのを待つことになります。

これらの2つの方法は、何か問題が発生した後にのみ発生します。通常の場合、マスターとスレーブの間で同じままにするためにスレーブのredisコマンドを複製するには、正常に接続されたワイヤを介してスレーブとマスタをスレーブします。また、ワイヤが破損している場合やスレーブが落ちた場合は、スレーブが逃した部品を得るために部分的な再同期動作を行う必要があります。 psyncが達成できない場合は、完全再同期を試みます。完全再同期は私たちが話したものです。

これは、完全な同期が詳細にどのように動作するかです:

マスターは、R​​DBファイルを生成するために、バックグラウンドの保存プロセスを開始します。同時に、クライアントから受信したすべての新しい書き込みコマンドをバッファリングし始めます。バックグラウンド保存が完了すると、マスタはデータベースファイルをスレーブに転送し、スレーブはディスクに保存してメモリにロードします。マスターは、バッファされたすべてのコマンドをスレーブに送信します。これは、コマンドストリームとして実行され、Redisプロトコル自体と同じ形式です。

ディスクレスレプリケーションは、低速ディスクのストレスに対応するために完全再同期をサポートする新しい機能です。詳細はhttps://redis.io/topics/replicationを参照してください。 psyncのやり方やpsyncの失敗の理由など、この記事から回答を見つけることができます。

+0

ありがとうございます。それで "ディスクレス"と同じですか? "#2)ディスクレス:Redisマスターは、ディスクに全く触れることなく、スレーブソケットに #RDBファイルを直接書き込む新しいプロセスを作成します。 「ディスクバックアップ」と「ディスクレス」の両方で、socket.writeを使用してデータを送信しているようです。唯一の違いは、「ディスクバックアップ」はRDBファイルを作成し、「ディスクレス」は作成しないことです。 – bylijinnan

+0

答えが編集されます。それが役に立つと願う – GuangshengZuo

関連する問題