分散システムのRedisマスタースレーブアーキテクチャ

分散システムのRedisマスタースレーブアーキテクチャ

単一の Redis サーバーは、数万から数十万の QPS を処理できます。キャッシュの場合、通常は読み取りの高同時性をサポートするために使用されます。したがって、アーキテクチャは、1 つのマスターと複数のスレーブを持つマスター スレーブ アーキテクチャになります。マスターは他のスレーブ ノードへのデータの書き込みとコピーを担当し、スレーブ ノードは読み取りを担当します。すべての読み取り要求はスレーブ ノードを経由します。これにより、水平方向の拡張を容易に実現し、高い同時読み取りをサポートできるようになります。

Redis レプリケーション -> マスタースレーブアーキテクチャ -> 読み取りと書き込みの分離 -> 高い読み取り同時実行性をサポートするための水平拡張

Redisレプリケーションのコアメカニズム

  • Redis は非同期メソッドを使用してデータをスレーブ ノードにコピーします。ただし、Redis 2.8 以降では、スレーブ ノードはコピーするデータの量を毎回定期的に確認するようになります。
  • マスター ノードは複数のスレーブ ノードで構成できます。
  • スレーブ ノードは他のスレーブ ノードに接続することもできます。
  • スレーブ ノードがレプリケーションを実行している場合、マスター ノードの通常の操作はブロックされません。
  • スレーブ ノードがレプリケーションを実行している場合、スレーブ ノード自身のクエリ操作はブロックされません。サービスの提供には古いデータセットが使用されます。ただし、レプリケーションが完了したら、古いデータセットを削除し、新しいデータセットをロードする必要があります。現時点では外部サービスは停止されます。

スレーブノードは主に水平拡張と読み取り書き込み分離に使用されます。拡張されたスレーブ ノードにより、読み取りスループットが向上します。

マスタースレーブアーキテクチャを使用する場合は、マスターノードの永続性を有効にすることをお勧めします。スレーブ ノードをマスター ノードのデータのホット バックアップとして使用することはお勧めしません。その場合、マスターの永続性をオフにすると、マスターがクラッシュして再起動したときにデータが空になり、レプリケーション後にスレーブノードのデータが失われる可能性があります。

さらに、マスター用のさまざまなバックアップ計画も作成する必要があります。すべてのローカル ファイルが失われた場合は、バックアップから RDB を選択してマスターを復元し、起動時にデータが存在することを確認します。後述する高可用性メカニズムを採用した場合でも、スレーブノードはマスターノードを自動的に引き継ぐことができますが、センチネルがマスターの障害を検出する前にマスターノードが自動的に再起動する可能性があり、その結果、上記のスレーブノードのデータがすべてクリアされる可能性があります。

Redis マスタースレーブレプリケーションの基本原理

スレーブノードを起動すると、マスターノードに PSYNC コマンドが送信されます。

スレーブ ノードがマスター ノードに初めて接続する場合は、完全な再同期がトリガーされます。このとき、マスターはバックグラウンド スレッドを開始して RDB スナップショット ファイルを生成し、クライアントから受信したすべての新しい書き込みコマンドをメモリにキャッシュします。 RDB ファイルが生成された後、マスターは RDB をスレーブに送信します。スレーブはまずそれをローカル ディスクに書き込み、次にそれをローカル ディスクからメモリにロードします。次に、マスターはメモリにキャッシュされた書き込みコマンドをスレーブに送信し、スレーブもこのデータを同期します。ネットワーク障害によりスレーブノードがマスターノードとの接続を失った場合、自動的に再接続されます。接続が確立されると、マスター ノードは不足しているデータのみをスレーブ ノードにコピーします。

マスタースレーブレプリケーションのブレークポイント再開転送

Redis 2.8 以降では、マスター スレーブ レプリケーションのブレークポイント再開がサポートされています。マスター/スレーブ レプリケーション プロセス中にネットワーク接続が切断された場合、最初からコピーするのではなく、最後のコピー ポイントからコピーを続行できます。

マスターノードはメモリ内にバックログを維持します。マスター ノードとスレーブ ノードの両方がレプリカ オフセットとマスター実行 ID を保存します。オフセットはバックログに保存されます。マスターとスレーブ間のネットワーク接続が切断された場合、スレーブはマスターが最後のレプリカ オフセットからレプリケーションを続行できるようにします。対応するオフセットが見つからない場合は、再同期が実行されます。

ホスト + IP に基づいてマスター ノードを特定することは信頼できません。マスター ノードが再起動されたり、データが変更されたりした場合は、異なる実行 ID に基づいてスレーブ ノードを区別する必要があります。

ディスク複製なし

マスターはメモリ内に直接 RDB を作成し、ローカル ディスクに保存せずにスレーブに送信します。設定ファイルで repl-diskless-sync yes をオンにするだけです。

  1. repl-diskless-sync yes# より多くのスレーブが再接続する必要があるため、レプリケーションを開始する前に 5 秒待機します repl-diskless-sync-delay 5

期限切れキーの処理

スレーブはキーを期限切れにせず、マスターがキーを期限切れにするのを待つだけです。マスターがキーの有効期限を切れるか、LRU を通じてキーを削除すると、del コマンドがシミュレートされ、スレーブに送信されます。

複製の完全なプロセス

スレーブ ノードが起動すると、マスター ノードのホストと IP を含むマスター ノードの情報がローカルに保存されますが、レプリケーション プロセスは開始されません。

スレーブ ノードにはタイマー タスクが内蔵されており、接続して複製する新しいマスター ノードがあるかどうかを毎秒チェックします。見つかった場合、マスターノードとのソケットネットワーク接続を確立します。次に、スレーブ ノードはマスター ノードに ping コマンドを送信します。マスターが requirepass を設定した場合、スレーブ ノードは認証のために masterauth パスワードを送信する必要があります。マスターノードは初めて完全なレプリケーションを実行し、すべてのデータをスレーブノードに送信します。その後、マスター ノードは書き込みコマンドをスレーブ ノードに非同期的に複製し続けます。

全文

  • マスターは bgsave を実行して、rdb スナップショット ファイルをローカルに生成します。
  • マスター ノードは rdb スナップショット ファイルをスレーブ ノードに送信します。 rdb レプリケーション時間が 60 秒 (repl-timeout) を超えると、スレーブ ノードはレプリケーションが失敗したと見なします。このパラメータは適宜増やすことができます(ギガビットネットワークカードを搭載したマシンの場合、通常は1秒あたり100MBが送信され、6Gのファイルは60秒を超える可能性があります)
  • マスターノードが RDB を生成すると、すべての新しい書き込みコマンドがメモリにキャッシュされます。スレーブ ノードは RDB を保存した後、新しい書き込みコマンドをスレーブ ノードにコピーします。
  • レプリケーション中にメモリ バッファーが継続的に 64 MB 以上を消費したり、一度に 256 MB を超えたりすると、レプリケーションは停止され、失敗します。
  1. クライアント出力バッファ制限スレーブ256MB 64MB 60
  • スレーブ ノードは、RDB を受信すると、古いデータをクリアし、RDB を自身のメモリに再ロードしながら、古いデータ バージョンに基づいて外部サービスを提供します。
  • スレーブ ノードで AOF が有効になっている場合は、BGREWRITEAOF がすぐに実行され、AOF が書き換えられます。

増分レプリケーション

  • 完全なレプリケーション プロセス中にマスターとスレーブ間のネットワーク接続が切断された場合、スレーブがマスターに再接続すると増分レプリケーションがトリガーされます。
  • マスターは、自身のバックログから失われたデータの一部を直接取得し、スレーブ ノードに送信します。デフォルトのバックログは 1MB です。
  • マスターは、スレーブによって送信された psync 内のオフセットに基づいてバックログからデータを取得します。

鼓動

マスターノードとスレーブノードは相互にハートビートメッセージを送信します。

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

非同期レプリケーション

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

Redisはどのようにして高可用性を実現するのか

システムが 365 日のうち 99.99% の時間、外部にサービスを提供できる場合、そのシステムは高可用性であると言えます。

スレーブに障害が発生しても、他のスレーブが同じデータを使用して同じ外部クエリ サービスを提供できるため、可用性には影響しません。

しかし、マスターノードが停止した場合はどうなるでしょうか?データを書き込むことができず、すべての書き込みキャッシュが無効です。スレーブノードの用途は何ですか?データを複製するマスターがなければ、システムは使用不可能になります。

Redis の高可用性アーキテクチャは、フェイルオーバー、またはマスター/スレーブ切り替えと呼ばれます。

マスター ノードに障害が発生したときに自動的に検出し、スレーブ ノードをマスター ノードに自動的に切り替えるプロセスを、マスター スレーブ切り替えと呼びます。このプロセスは、Redis のマスター スレーブ アーキテクチャの下で高可用性を実現します。

<<:  Linux の仮想メモリと物理メモリを理解する

>>:  あなたもクラウドの世界の 7 つの新しいパラドックスに直面していますか?

推薦する

インターネット企業の運営:製品競争分析の方法についての簡単な説明

企業では、ほとんどの製品マネージャーが実際の業務で競合製品の分析を行うことはほとんどありません。マー...

トラフィックを爆発的に増やすためにウェブサイトをうまく運営する方法

ウェブサイトの運用はウェブマスターにとって大きな課題であり、運用結果の品質はウェブサイトの価値に直接...

楽しいマーケティング:常識の中に隠れたユニークなオリジナリティを見抜く

1920 年代、アメリカのビール市場における競争は極めて熾烈でした。統計によると、当時のシュリッツビ...

Google のクラウド コンピューティングに関するトップ 10 の予測

Google は最近開催された「Cloud Next」イベントで、あらゆるレベルの開発者や技術意思決...

#Black5# a2hosting: 3.2% オフ (月額 1.98 ドル)、仮想ホスティング、VPS、専用サーバー

17 年以上の運営実績を持つアメリカの老舗ホスティング ブランドである a2hosting が、ブラ...

分裂した知湖

知乎の香港株式市場への上場の追求は前例のない効率を達成した。米国上場の中国株が急落を続ける中、損失を...

タイトルを変更してウェブサイトのスナップショットを更新する方法の実践的な分析

ウェブマスターがウェブサイトの品質を判断する際に最も重要な要素の 1 つは、ウェブサイトのスナップシ...

採用ウェブサイトは卒業生にサービスを提供するためにU-Mail電子メールマーケティングプラットフォームを使用しています

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています暑い7月は...

企業はデジタル変革による苦痛を経験しています。プライベートクラウドは本当に万能薬なのでしょうか? 1 つの記事でクラウド コンピューティングを理解する

クラウド コンピューティングとクラウドには共通点があります。クラウドコンピューティングのリソース使用...

コミュニティサイトにおけるネットユーザーの重要性

ウェブマスターは、独自の Web サイトを所有する人々のグループです。彼らはインターネット上でユーザ...

キーワードランキングが不安定な場合の対処法

みなさんこんにちは。私はHongtu Internetです。 2 か月前、下水道ウェブサイトの最適化...

ファーウェイのホウ・ジンロン氏:フルシナリオインテリジェンスを構築し、世界クラスの「スマート深セン」を創造する

【中国・深セン、2020年7月28日】本日、「スマート深セン、前進」をテーマにしたファーウェイクラウ...

SEO を使用して検索エンジンからの否定的な情報を効果的に抑制するにはどうすればよいですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますBaidu...

impactvps-7 USD/オープン 4 VPS/5IP/4GB メモリ/4 コア/45GB SSD/2TB トラフィック

2003年に、impactvps(バックエンドドメイン名はsubnetlabs.com)を当サイトの...

Google Cloud——Tencent Cloud の新たな仲間か?

一方、グーグルは本社があるカリフォルニアで大規模な開発計画を立てている。一方、同社のクラウドコンピュ...