ホームページ  >  記事  >  データベース  >  Redis クラスター原理の分析例

Redis クラスター原理の分析例

WBOY
WBOY転載
2023-05-27 14:55:06977ブラウズ

Redis クラスターの原則

Redis の高可用性を実現するためにセンチネルに依存し、大量のデータを収容しながら高い同時実行性をサポートしたい場合は、Redis が必要です。集まる。 Redis クラスターは、redis が提供する分散データ ストレージ ソリューションであり、データ シャーディングを通じてデータを共有し、レプリケーションおよびフェイルオーバー機能を提供します。

ノード

Redis クラスターは複数のノードで構成されており、複数のノードはクラスターミートコマンドを介して接続されます。ノードのハンドシェイクプロセス:

  1. ノード A はクライアントからクラスターのミート コマンドを受信します

  2. #A は受信した IP アドレスとポート番号に基づいて B にミート メッセージを送信します

  3. #ノード B が会議メッセージを受信し、pong を返します
  4. #A は、B が会議メッセージを受信したことを認識し、ping メッセージを返し、ハンドシェイクが成功します
  5. 最後に、ノード A はゴシップ プロトコルを通じてノード B の情報をクラスタ内の他のノードに広め、他のノードも B
  6. slot
  7. と握手をします。
redis はクラスター シャーディングの形式でデータを保存します。クラスター データベース全体は 16384 個のスロットに分割されます。クラスター内の各ノードは 0 ~ 16384 個のスロットを処理できます。データベース内の 16384 個のスロットすべてがノードによって処理されると、クラスターはそれ以外の場合は、1 つのスロットが処理されない限り、オフライン ステータスが処理されます。スロットは、clusteraddslots コマンドを使用して、処理のために対応するノードに割り当てることができます。

slot はビット配列で、配列の長さは 16384/8=2048 で、配列の各ビットはノードによって処理される 1 で表され、0 は処理されないことを表します。図では、ノード A が 0 ~ 7 スロットを処理することを意味します。

クライアントがノードにコマンドを送信するとき、スロットが現在のノードに属していることが判明した場合、ノードはコマンドを実行します。そうでない場合は、ガイドとして MOVED コマンドがクライアントに返されます。クライアントを正しいノードに接続します。 (MOVED プロセスは自動です)

ノードを追加または削除する場合、スロットの再割り当ても非常に便利です。Redis は、スロットの移行を実現するためのツールを提供します。プロセス全体は完全にオンラインであり、停止する必要はありませんサービス。 。

フェイルオーバー

ノード A がノード B に ping メッセージを送信し、ノード B が指定された時間内に pong に応答しない場合、ノード A はノード B を pfail の疑いのあるオフライン状態としてマークします。同時に B のステータスをメッセージの形式で他のノードに送信します。ノードの半数以上が B を失敗ステータスとしてマークすると、B はオフライン失敗としてマークされます。このとき、フェイルオーバーが発生し、優先順位が高くなります。複数のスレーブ ノードからデータを複製する マスター ノードとなる 1 つを選択し、オフライン ノードのスロットを引き継ぐ 全体のプロセスはセンチネルのプロセスと非常によく似ており、どちらも選択のための Raft プロトコルに基づいています。

以上がRedis クラスター原理の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。