ホームページ >データベース >Redis >Redis のクラスター モードとは何ですか?

Redis のクラスター モードとは何ですか?

anonymity
anonymityオリジナル
2019-06-05 16:55:474868ブラウズ

Redis クラスターには通常 5 つのタイプがあります:

1、マスター/スレーブ レプリケーション

2、センチネル モード

3、正式にはクラスターRedis クラスター モード (サーバー)

4、Jedis シャーディング クラスター (クライアント シャーディング)

5、Wandojia の codis などのミドルウェア エージェントを使用して提供されます。

Redis のクラスター モードとは何ですか?

モデルを紹介した後、その原理を分析してみましょう:

マスター/スレーブ レプリケーション:

マスターの動作原理-スレーブ レプリケーション: スレーブ ノード サービスが開始され、マスターに接続された後、SYNC コマンドがアクティブに送信されます。同期コマンドを受信した後、マスター サービスのマスター ノードはバックグラウンド保存プロセスを開始し、データ セットを変更するために受信したすべてのコマンドを収集します。バックグラウンド プロセスが完了した後、マスターはデータベース ファイル全体をスレーブに転送して、完全な同期を完了します。同期です。スレーブ スレーブ ノード サービスは、データベース ファイルのデータを受信後、メモリに保存し、ロードします。その後、マスターノードは収集した全ての変更コマンドと新たな変更コマンドを順次スレーブに送信し、今度はスレーブがこれらのデータ変更コマンドを実行して最終的なデータ同期を実現します。

マスターとスレーブ間のリンクが切断された場合、スレーブは自動的にマスターに再接続できますが、接続が成功すると、完全な同期が自動的に実行されます。

マスター/スレーブ レプリケーション構成

スレーブ ノードの構成ファイルを変更します:slaveof masterip masterport

パスワードが設定されている場合は、次のように設定します。 masterauth master-password

Sentinel モード:

このモードは Redis バージョン 2.6 から提供されていますが、当時のこのバージョンのモードは Redis バージョン 2.8 まで不安定でした。その後、センチネル モードが安定しました。マスター スレーブ モードであってもセンチネル モードであっても、これら 2 つのモードには問題があります。これら 2 つのモードは水平方向に拡張できず、これら 2 つのモードの高可用性機能はメモリによって制限されます。マスターノード。

Sentinel プロセスは、Redis クラスター内のマスター サーバーの動作ステータスを監視するために使用されます。マスター サーバーに障害が発生した場合、マスター サーバーとスレーブ サーバーを切り替えてシステムの高可用性を確保できます。

Sentinel プロセスの役割

監視: Sentinel はマスターとスレーブが正常に動作しているかどうかを常にチェックします。

通知: 監視対象の Redis ノードで問題が発生した場合、センチネルは API を通じて管理者または他のアプリケーションに通知を送信できます。

自動フェイルオーバー: マスターが正常に動作しない場合、Sentinel は自動フェイルオーバー操作を開始します。障害が発生したマスターのスレーブの 1 つを新しいマスターにアップグレードし、障害が発生したマスターの他のスレーブを変更します。新しいマスターをコピーするため、クライアントが障害が発生したマスターに接続しようとすると、クラスターは新しいマスターのアドレスもクライアントに返すため、クラスターは現在のマスターを使用して障害が発生したマスターを置き換えることができます。マスターサーバーとスレーブサーバーが切り替わると、マスターの redis.conf、スレーブの redis.conf、および Sentinel.conf 設定ファイルの内容がそれに応じて変更されます。つまり、マスターの redis.conf 設定には、slaveof の余分な行が存在します。ファイルの設定に応じて、sentinel.conf の監視対象が変更されます。

Sentinel プロセスの仕組み

各 Sentinel プロセスは、クラスター全体のマスター サーバーとスレーブ サーバーに 1 秒に 1 回メッセージを送信します。サーバーおよび他の Sentinel プロセス。

PING コマンドに対する最後の有効な応答からの時間が、down-after-milliseconds オプションで指定された値を超えた場合、インスタンスは Sentinel プロセスによって主観的にオフライン (SDOWN) としてマークされます。)

マスター サーバーが主観的オフライン (SDOWN) としてマークされている場合、マスター サーバーを監視しているすべての Sentinel プロセスは、マスター サーバーが実際に 1 秒に 1 回、主観的オフライン状態に入ったことを確認する必要があります。十分な数の Sentinel プロセス (構成ファイルで指定された値以上) により、マスター サーバーが指定された時間範囲内に主観的オフライン状態 (SDOWN) に入ったことを確認すると、マスター サーバーは客観的にオフラインとしてマークされます ( ODOWN)

通常の状況では、各 Sentinel プロセスは 10 秒ごとにクラスター内のすべてのマスター サーバーとスレーブ スレーブに通知し、サーバーは INFO コマンドを送信します。

マスター サーバーが Sentinel プロセスによって客観的にオフライン (ODOWN) としてマークされると、Sentinel プロセスがオフラインのマスター サーバーのすべてのスレーブ スレーブ サーバーに INFO コマンドを送信する頻度が 10 回に 1 回から変更されます。数秒から 1 秒ごとに 1 回。

マスター サーバーのオフラインに同意するのに十分な数の Sentinel プロセスがない場合、マスター サーバーの目的のオフライン ステータスは削除されます。マスター サーバーが Sentinel プロセスに PING コマンドを再度送信し、有効な応答を返すと、マスター サーバーの主観的なオフライン ステータスは削除されます。

Redis 公式 Cluster クラスター モード

Redis Cluster はサーバー シャーディング テクノロジであり、バージョン 3.0 以降で正式に利用可能です。

この図では、それぞれの青い円が Redis サーバー ノードを表します。それらのノードのいずれか 2 つは相互に接続されています。クライアントは任意のノードに接続し、クラスター内の任意のノードにアクセスできます。アクセスやその他の操作を実行します。

Redis クラスター データ シャーディング

Redis の各ノードには 2 つのものがあり、1 つはスロット (slot) で、これは A 変数として理解できます。 2 つの値を保存できます。この変数の値の範囲は 0 ~ 16383 です。もう 1 つはクラスターで、個人的にはこのクラスターをクラスター管理プラグインとして理解しています。アクセス キーが到着すると、redis は crc16 アルゴリズムに基づいて結果を取得し、結果の残りを 16384 まで計算します。これにより、各キーは 0 ~ 16383 の番号が付いたハッシュ スロットに対応します。この値は次の目的で使用されます。対応するスロットに対応するノードを見つけて、アクセス操作のために対応するノードに直接自動的にジャンプします。

Jedis シャーディング クラスター

Redis シャーディングは、Redis クラスターが登場する前に業界で一般的に使用されていた手法であると言えます。データのキーを保存するためのアルゴリズム、ハッシュにより、特定のキーが特定のノードに割り当てられます。

幸いなことに、Java Redis クライアント ドライバー Jedis はすでに Redis シャーディング機能、つまり ShardedJedis とキャッシュ プールと組み合わせた ShardedJedisPool をサポートしています。

Jedis の Redis シャーディング実装には次の特徴があります。

一貫したハッシュ アルゴリズムを使用してキーとノード名を同時にハッシュし、マッピングと照合を実行します。使用されるアルゴリズムは MURMUR_HASH です。単純なハッシュのようなモジュロ マッピングではなく一貫したハッシュを使用する主な理由は、ノードが追加または削除されるときに、再マッチングによる再ハッシュが発生しないためです。整合性ハッシュは隣接ノードのキー割り当てにのみ影響を与え、影響は小さいです。

一貫性のあるハッシュが隣接するノードにのみ影響を及ぼし、ノード割り当てのプレッシャーを引き起こすことを避けるために、ShardedJedis は各 Redis ノードの名前に従って 160 の仮想ノードを仮想化します (いいえ、Jedis はデフォルト名を割り当てます)。重みに応じて、160 倍の仮想ノードも仮想化できます。マッピングのマッチングに仮想ノードを使用すると、Redis ノードを追加または削減するときに、隣接するノードのみが影響を受けるのではなく、Redis ノード間でキーをより均等に移動および分散できます。

ShardedJedis は、シャーディング用に keyTag の一部を抽出する keyTagPattern モードをサポートしています。このようにして、キーに適切な名前を付けることで、関連するキーのグループを同じ Redis ノードに配置でき、アクセスを回避できます。ノード間の関連データ非常に重要です。

ミドルウェア エージェントの使用

ミドルウェアの役割は、一連のアルゴリズムを通じて Redis に保存する必要があるデータのキーから値を計算することです。次に、この値に基づいて対応する Redis ノードを見つけ、この Redis ノードにデータを保存します。

一般的に使用されるミドルウェアには、次のタイプがあります。

Twemproxy

Codis

nginx

以上がRedis のクラスター モードとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。