Redisのマスター・スレーブ同期(レプリケーション)
マスター・スレーブ同期(コピー)とは何ですか
2つのインスタンスRedisの⇒AおよびBが存在すると仮定
コンテンツと同期のB例A例の内容
データベース・インスタンスからプライマリ・データベース・インスタンスA、Bがであることを特徴とします
このプロセスは、マスタ・スレーブ同期と呼ばれています
なぜ、マスター・スレーブ同期(コピー)を使用します
- 単一障害点の発生を防止
- 拡張メモリ
マスタースレーブの同期をオフ/オンにする方法
同期を有効に
- プロフィールを追加します
slaveof 主数据库地址 主数据库端口
- コマンドラインでコマンドを実行します
redis> slaveof 主数据库地址 主数据库端口
- ターンでは、サーバからのコマンドを実行
$ reids-server --port 6380 --slaveof 主数据库地址 主数据库端口
同期をオフにして、マスター・データベースになります
redis> slaveof no one
原理(実現)
接続の確立、データ同期(SYNC)と三段階のコマンドの伝播(コマンド伝搬)にコピー
ここでは関係なく、コピー原理の、接続が確立されていることではありません
以下は、2つの段階でコマンド・スプレッドとのデータの同期についての主です
コピー機能を最適化するために、バージョン2.8からRedisの後、我々はコピーの古いバージョンについて話し始めます。
古いレプリケーション・プロセス
ステップ | プライマリサーバー | サーバーから |
---|---|---|
同期プロセス | ||
1 | SYNCコマンドは、メインサーバに送信されます | |
2 | SYNCコマンドを受信し、BGSAVE生成RDBファイルを実行 | |
3 | 現在のレコードの書き込みコマンドからのバッファを使用します | |
4 | RDBサーバに生成された文書を送信します | |
5 | バッファにWriteコマンドは、サーバから送信されます | 受信したRDBファイルをロード |
6 | メインサーバーから送信された書き込みコマンドを受信して実行 | |
コマンド伝播プロセス | ||
1 | 送信クライアントは私に書き込みコマンドを送信し | |
2 | サーバーから送信された書き込みコマンドのエグゼクティブ・ディレクター | |
リコネクション | 同期プロセスと一致して | 同期プロセスと一致して |
マスタサーバ状態から上記の手順の後に同じままであってもよいです。
注意深い読者は、以前のコピーからいくつかの問題を発見しました。
再接続プロセスが再取る最後の同期する必要があり、メインサーバで同期プロセスは、RDB RDBファイルを生成し、ファイルIO操作を実行し、再接続の高コストになり、サーバーから特に激しいです
だから、バージョン2.8の後から、再同期プロセスの実行を防止するために、新しい技術の使用をRedisの
新しいレプリケーション・プロセス
ステップ | プライマリサーバー | サーバーから |
---|---|---|
完全な同期プロセス | ||
1 | PSYNCは、ホストサーバーにコマンドを送信します | |
2 | PSYNCは、コマンド実行BGSAVE生成RDBファイルを受信しました | |
3 | 現在のレコードの書き込みコマンドからのバッファを使用します | |
4 | メインサーバーから送信された書き込みコマンドを受信して実行 | |
5 | バッファにWriteコマンドは、サーバから送信されます | 受信したRDBファイルをロード |
6 | RDBサーバに生成された文書を送信します | |
コマンド伝播プロセス | ||
1 | 送信クライアントは私に書き込みコマンドを送信し | |
2 | サーバーから送信された書き込みコマンドのエグゼクティブ・ディレクター | |
再接続処理 | ||
1 | PSYNCコマンドを送信します | |
2 | 書き込みコマンドを処理するために、サーバーから切断送ります | |
3 | Writeコマンド |
後の手順上記の新しいコピーを達成し、データベースからの主な状態することができます。
再接続処理では、唯一のあなたは、このようにコピーの以前のバージョンよりも、IO操作の多くを保存し、コマンドの切断処理を非同期にすることができ、再実行する必要があります
その後、再接続は、それを達成する方法ですか?
再同期部(再接続)の
4つの変数によって重いのRedisの同期部分:
- 実行ID(実行ID)サーバー
- インスタンスが再起動すると、40個のランダムな16進文字を生成します
- マスターレプリケーションバックログバッファ(レプリケーションバックログ)
- 各コマンドにマスターサーバーがデータベースから送信され、キューバックログ(固定長周期キュー)に命令します
- オフセットマスタサーバのレプリケーション(複製オフセット)
- バックログキューへのプライマリサーバのコマンドは、現在のコマンドのオフセットを記録した場合、サーバから送信されました
- レプリケーションサーバからのオフセット
- オフセットコマンドにサーバーから受信したマスターサーバーから送信されました
これら4つの変数がリストされた後にたぶん、あなたは右、はい、それはそう実装されている、それが実装されているか想像する読者を指示することができます
プロセス:
再同期プロセスの一部
ステップ | プライマリサーバー | サーバーから |
---|---|---|
1 | ID送信コマンドプライマリ・データベースPSYNC最新のオフセットコマンドを実行する前にオフ | |
最新の前に1を実行2.切断コマンドは、対応するオフセットIDは、上記の条件は、キューの再同期で動作すること、または完全同期を実行することができる満たしているかどうかを決定することができます | ||
2 | データベースから送信されたコマンドは、オフセット後 | |
3 | コマンドを実行します。 |
概要
最適化性能のみ最適化の一つであるマスタースレーブ同期(コピー)に多くの詳細でのRedis。