Redisのクラスター(マスターとスレーブ、センチネル、フラグメンテーション)

Redisのクラスタ

需要を満たすとき、我々は、単一のサーバ上でのみRedisのデータベースを展開することができ、他のサーバーはIP、ポートなどにより、このサーバーにアクセスすることができます。

サーバが満たすことができないときしかし、私たちは満たす需要に複数のマシン上のRedisのクラスタを展開する必要があります。

Redisのは、主に以下のコア機能を持っているクラスター:

  1. マスタースレーブのレプリケーション
  2. センチネルモード
  3. スライスパーティション

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

需要
単一障害点を避けるためには、別のアプローチは、サーバに障害が発生した場合でも、他のサーバーは、まだサービスを提供し続けることができるようにすることを、異なるサーバー上の複数のコピーに展開されるようにデータベースをコピーすることです。

部門
マスタスレーブレプリケーションクラスタマスターが提供するサービスを読み書きするノード、スレーブノードは、読み取り専用の機能を提供し、データ同期マスタノードの責任です。機能に影響を与えないマスタノード障害が読んだ場合、スレーブノードは、手動で(センチネルモードが自動的に選択される)スレーブノードを選択するためにサービスを提供するためのマスターとして作用することができます。

作業メカニズム
アクティブにスレーブは、SYNCのマスターにコマンドを送信します。スナップショットファイルとキャッシュ書き込みコマンド保存しSYNCコマンドのスナップショット(RDBの永続性)を受信し、この時の書き込みコマンドのスナップショットを保存するためにキャッシュし、そして後にバックグラウンドで保存されたマスタがスレーブに送信されます。ロード・スナップショットファイルとキャッシュは、スナップショットファイルとコマンドにスレーブを受けた後にコマンドを記述します。初期化が完了したコピーします。

後に、受信した各ライトコマンドにマスタがデータの一貫性を確保するためにマスターから、同期スレーブに送信されます。クライアントがホストへの書き込みの実行を送信する際に続いて楽観的複製は、ホストはすぐに、パフォーマンスに影響を与えないように、ライブラリにコマンドを送信するために、クライアントに返される結果の実装、および非同期に完了します。また、マスターから入手書き込みの少なくとも数に同期を設定することができます。

パートコピー
バージョン切断と再接続のマスターは、サーバの間から出てくる2.8のRedis、後に、マスターは切断コマンドは、データベースの再送信の際に、道の一部である同期させることができます。
それはこのように動作します:
レプリケーション・ストリームのためのマスターサーバーは、メモリ・バッファ(メモリ内のバックログ)を維持します。マスターサーバーから、オフセットコピー(複製オフセット)とマスタ実行IDを保持し
、接続が切断されると、サーバーからマスターサーバーを再接続し、同じマスターサーバIDの場合、2つのマスター・ラン、続行するための要求をコピーまた、効果的にメモリバッファに指定されたオフセット、コピーは、それが継続してオフに左のポイントから開始します。これらの条件のいずれかが満たされていない場合は、(再同期は、直接バージョン2.8の前に完了している)完全再同期が存在します。
メインの実行IDをディスクに保存されていないので、再起動すると、サーバーからのみ、完全に同期させることができます。

いいえディスク複製しない
一般的には、ディスク上のファイルを作成し、サーバーからのデータを送信するために、ファイルをロードするために、完全な再同期RDBの必要性。

あなたは、比較的低速なディスクを使用する場合は、この操作は、プライマリサーバ上で大きな圧力をもたらすでしょう。バージョン2.8.18サポートからRedisのは、コピーしようと始めるディスクレス。
この構成を使用する場合、ディスクを中間記憶装置として使用されていないから、子供が直接RDBサーバとネットワークを介して送信されます。


同時に発生する複数の、ダウンタイムのマスターIO急激な増加につながる可能性がとき限りスレーブスタートとして、それは、全量同期要求とホストの同期をお送りしますので、複数のスレーブは、時間を再起動する必要が切断された場合。

マスターに障害が発生すると
、ホストが失敗した場合、フェイルオーバーは手動でスレーブから新しいマスターを指定することができます。ステップ。

  1. 生き残ったマスタスレーブノードの一つは、ノードから切断され、(誰slaveof)新しいマスターノードを作ります
  2. 他のスレーブノードは、新しいマスターノードとの接続(slaveof IPポート)を確立するために、
  3. Redis.confは、各ノードの設定ファイルを変更する主従関係のマッピングを更新し、これまでにあなたが開始主従関係を再起動し、次の時間を維持、マスターデータから不整合を回避します。

センチネルモード

センチネルモデルは、シーン上のマスターの故障が表示さを解決することですが、マニュアル、Redisのクラスタが自動的に選択することができますマスターを必要としません。

Redisの2.8は、定点監視システムおよび自動障害回復へのツールを提供しています。

センティネルの役割は、データベースから実行しているかどうか、プライマリ・データベースへのデータベースから自動的にメインの失敗をRedisの所有者を監視することです。

ここに画像を挿入説明
ワーキングメカニズム

  1. 各センチネルは、すべて10秒が現在のクラスタトポロジを取得するには、マスターに最新の情報の複製のコマンドを送信するノード、この時点で、すべての歩哨は、各スレーブノードの接続情報を取得することができるようになります。
  2. ノードは、次に、センチネルノードが障害と考えられてきた、一定の時間内に応答しない場合、残りのノードのハートビートに応じて判定された場合、すべての1Sは、マスタとスレーブのクラスタに送信される各Sentryは、各ハートビートノード。
  3. 各歩哨すべての2Sは、マスターノードのその判断に指定されたチャンネルのRedisに放出され、各チャンネルに加入センチネルので、マスターノードの相互センチネルセンチネルの判断を知ることができます。
  4. 投票、警備員の1がマスターノードに障害が発生したとき、センチネルノードの障害以上の指定された数が考慮されている場合、他のはセンチネルリーダークラスタのフェイルオーバーの歩哨として働き、その後、マスターセンチネルノードの判断が表示されます、フェイルオーバー手動転送の手順と一致しています。
  5. 選挙、マスターノードスレーブ接続から切断生き残ったノードのいずれかを選択して新しいマスターノードにします
  6. その後、他のスレーブは、新しいマスターノードとの接続を確立するノード
  7. マップからマスターを更新し、各ノード構成ファイルredis.conf最後に変更

なぜこれほど多くの番兵は、ネットワークを形成していますか?
ときにのみセンチネルセンチネルがハングアップした場合、それは自動フェイルオーバーを実現することはできません。
センチネルネットワークでは、限り生きセンチネルがあるとして、あなたはフェイルオーバーを実現することができます。

クライアントは、マスターになる方法を知っている
、クライアントがセンチネルで実装されたサービスを提供してRedisのデータノードを扱うが、接続センチネルIPとポート、特定のRedisを提供していないマスターノード、センチネルが知覚するときにハングアップしますそしてそれは、ユーザーに新しいマスターノードを提供します。

ライン上の元のマスターがあれば
、自動的にオンラインに戻ったときに、元のマスターノードの後に現在のノードのマスターノードから変換。

スライスパーティション

マスターである、そして、総データストレージクラスタになりますつだけのサーバーが限られているので、十分な収納スペースの状況ならば、我々はRedisのスライスパーティションを使用する必要があります。

redis3.0前に、我々は、キーリングのハッシュが断片化された方法により、行うことをクライアントによって断片化されています。断片化は、各ノードの記憶圧力を解決するが、高い保守コスト、追加、除去されたノードの面倒を生じることができるが。

Redisの3.0リリース後のデータの断片化クラスタを構築するためのRedisClusterを紹介します。

クラスタを使用して、唯一のコンフィギュレーション・ファイルを開く必要があり、クラスタ有効Redisのを設定することができます。
ここに画像を挿入説明

機構の
仮想スロットのデータ片を用いRedisClusterの方法は、0から16383(16384のスロット)に仮想スロットRedisの範囲、及び溝の範囲内のデータチャネルは、各スロットを有する(各マスターノードの指定された範囲の原因であります多くの主要な仲間、これらはマスターノードのメモリに鍵となります)
ここに画像を挿入説明

すべての読み取りおよび書き込み動作中キー、H(K)= CRC16 [K]&16383ハッシュ関数による位置キースロットを計算し、その対応するマスタ処理ノードを見つけ、自動的に最終ジャンプする必要ノードが動作します。

特長:

  1. RedisClusterを使用する場合は、マスターノードの数は、少なくとも3つが必要で、各マスタースレーブノードは、任意の数を有することができます。
  2. すべてのノードがバックアップとして、ライブラリからのサービスを提供しない(マスタ複数からのものであってもよい)マスタ - スレーブのみ
  3. 、削除ノードを追加するには、オンラインサポート
  4. クライアントは、読むために、マスターノードのいずれかを接続して書き込みすることができます

操作は許されません

データは、各ノードに分散されるので、いくつかのアクションは許可されていないため

  1. キー操作は、高同時実行状況は、パフォーマンスを低下させ、予期しない動作をもたらすことができるキー値を作成下で、例えばMSET、焼結等のために、複数を含みます。
  2. 取引のノードにまたがることはできません。
  3. 複数のデータベースをサポートしていない、各ノードは、唯一のマスターデータベースを持つことができます。
  4. パイプライン(パイプライン)をサポートしていません
公開された67元の記事 ウォン称賛32 ビュー60000 +

おすすめ

転載: blog.csdn.net/weixin_43751710/article/details/104670498