blog

Redisのマスター・スレーブ同期の原理と実践を詳しく説明する

Redisの読み取りと書き込み速度は非常に高速ですが、同じ理由でMySQLのマスタースレーブレプリケーションでは、読み取り要求がより大きな圧力を生成するために、Redisを読んでの圧力を共有するために...

Jan 29, 2020 · 2 min. read
シェア

マスタースレーブモード

MySQLのマスタースレーブレプリケーションと同じ理由で、Redisは、読み取りと書き込みが非常に高速ですが、読み取り要求が多い場合にも、より多くの圧力を生成するために、Redisを読んでの圧力を共有するために、Redisは、マスタースレーブレプリケーションアーキテクチャをサポートし、スレーブノードは、マスターノードの読み取り圧力を共有することができますRedisのマスタースレーブレプリケーションは、フルボリュームかどうかに応じて、完全な同期と増分同期に分けることができます。

構成

スレーブ・ノードの設定ファイルに

slaveof ip:port #マスターノードのアドレス

完全同期

完全同期はスレーブの初期化段階で発生し、この段階でスレーブはマスター上のすべてのデータをこのノードにコピーする必要があります:

1:スレーブノードはマスターノードに接続後、SYNCコマンドを送信します;

2:SYNCコマンドを受信したマスターノードは、BGSAVEコマンドを実行してRDBファイルの生成を開始し、BGSAVE実行後に実行されたすべての書き込みコマンドをバッファに記録します;

3:BGSAVEコマンド実行後、マスターノードから全スレーブサーバにスナップショットファイルを送信し、送信期間中は書き込みコマンドを継続的に記録します;

4: スレーブノードはスナップショットファイルを受信した後、古いデータをすべて破棄し、新しく受信したスナップショットをロードします;

5: スナップショット送信後、マスターはバッファに記録された期間、スレーブサーバーへの書き込みコマンドの送信を開始します;

6: スレーブサーバはスナップショットデータの読み込みが終わると、バッファ内のコマンドの受信を開始し、スレーブノード上でコマンドを実行します;

7: データ同期が完了すると、スレーブ・ノードのデータ初期化が完了し、スレーブ・ノードはクライアントからの読み取り要求の受信を開始できます。

インクリメンタル同期

インクリメンタル同期とは、スレーブノードの初期化データ完了後の通常動作中に、マスターノードが書き込み要求を受けてスレーブサーバーに同期するプロセスです。

インクリメンタル同期のプロセスは、マスター・ノードが書き込み要求を受信し、同じコマンドをスレーブ・ノードに同期させ、スレーブ・ノードが書き込みコマンドを受信して実行するというものです。

同期化ストラテジー

マスター・ノードが接続されると完全同期が実行され、完全同期が完了すると増分同期が実行されます。スレーブ・ノードはいつでも完全同期を開始することができます;

複数のスレーブノードがハングした場合、再起動中にマスターにSYNCリクエストが送信されます。複数のノードが同時にSYNCリクエストを送信すると、IOが劇的に増加し、マスターノードのダウンタイムが発生する可能性があります。

マスタースレーブレプリケーションの特徴

1: 非同期レプリケーションの使用

2: マスターノードは複数のスレーブノードを持つことができます。

3:スレーブノードは、スレーブ間の同期を実現するために、他のスレーブノードと関連付けることができます。

4: データ同期中も、マスターノードはリクエストを正常に処理でき、マスターをブロックすることはありません。

Read next

2020年に作られたホイール、スクロールローディング

一度ホイールを作る工程を思い出してみてください、スクロールローディングを行う必要性は誰にでもあると思います。UIコンポーネントを使う?自分でスクロールイベントを聞く?万が一落とし穴があったときのために、他の人のUIコンポーネントを使う?従来のスクロールイベントをリッスンする方法は、イベント集中型であり、パフォーマンス上の問題が発生しがちでした。そこで、2020年の今日、何か違うことをすることは可能でしょうか?

Jan 28, 2020 · 4 min read