Redisのは、マイクロボー億のソーシャル・ネットワーキング・プラットフォームをサポートする高性能なインメモリデータベースとして、また、多くのインターネット企業の標準となっています。ここでは戦闘の原則から、その後Redis5の最新バージョンに基づいてクラスタのクラスタコアを、Redisの、となり、楽しいRedisのクラスタ
共通Redisのクラスタリングソリューション
Redisのクラスタのクラスタリング・ソリューションを導入する前に、比較を容易にするために、業界簡単には共通のRedisクラスタープログラムを見てみましょう。
1クライアントベースのフラグメンテーション
Redisのクラスタの前にRedisのシャーディングうち、業界で一般に使用されるクラスタ方式におけるマルチRedisのインスタンス。主なアイデアは、ハッシュアルゴリズムに基づいて鍵データRedisのデータスライスのハッシュ値に基づいて、データがそれぞれのノードにマッピングされています
利点は欠点はRedisのクラスタ調整は、各クライアントを更新する必要があるときに調整することで、簡単です
プロキシ・サーバに基づく2断片
クライアントは、プロキシコンポーネントの独立した展開に要求を送信するプロキシクライアントコンポーネントは、データを解析し、正しいノードに要求を転送し、クライアントに結果を返します
利点は、透過的なアクセスは、容易にクラスタ、多層転送エージェントは、性能損失を有するという欠点を拡張することです
3 Redisのセンチネル(センチネル)
RedisのSentinelは、クラスタ全体センチネルRedisのクラスタの増加モニタリングに基づき、Redisのマスタースレーブレプリケーションクラスタで提供Redisの2.6正式版からの高可用性ソリューションです。Redisのクラスタマスターノードに障害が発生した場合は、センチネルのフェイルオーバー、センチネル自体が高可用性クラスタの展開をサポートしながら、新しいマスターを選出
利点は、ときRedisのサーバーを制限することにより、負荷容量、サポートの高可用性クラスタ、高い読み取りおよび書き込みすることを、データの断片化を達成全く欠点がない、各ノードは完全なデータセットを運ぶために必要がある唯一のマシンのメモリの垂直方向の拡大を増加させることによって達成をサポートし、サポートしていません。水平展開
Redisのクラスタの設計
1つの全体的なデザイン
Redisのクラスタバージョン3.0が正式にRedisのセンチネルを比較して、高可用性クラスタソリューションで発売され、Redisのクラスタ方式が主な障害からの切り替え、追加のセンチネルクラスタの展開が、内部通信クラスタを監視することで達成クラスタを必要とせず、同時に、社内のサポートに基づきますデータの断片化のためのハッシュ、動的拡張のためのサポートのレベル
次のように全体的な構造は次のようになります。
クラスタ内のマスター・ノードの複数、複数のノードから各マスターノード、ノード間のデータの主な一致は、3つのマスターノードの最小値は、各ノードからマスターノードの最小値を必要とします
- 可用性:マスターノードに障害が発生すると、自動的にメインから切り替え
- 高性能:読み書きするサービスを提供するために、マスターノード、読み取り専用のサービスノードから、システムのスループットを向上させるために
- スケーラビリティ:クラスタに格納されたデータ片は、マスターノードとの間で各種データは、各メンテナンスに対応するデータが、拡張クラスタノードに追加することができ、いくつかのノードがオフラインの水平体積減少であってもよいです
2データ片
複数のノードに割り当てられた特定の規則に従ってデータのセット全体は、データピースと呼ばれる、スライシングスキームは、ハッシュRedisのクラスタスライスを使用し
基本原理は次の通りである:
スロット= CRC16(キー)&:、Redisのクラスタ番号を最初に定義する0から16383までの間隔の溝と呼ばれる、すべてのキーは、0〜16383のスロットハッシュ関数からの整数、計算式にマッピングされる 16383。各ノードは、溝のマッピング部及びキーデータの溝を維持する責任があります
Redisのスロットがデータ管理クラスタの基本的な単位であり、クラスタ伸縮は、ノード間のモバイルデータチャネルであります
溝とノードとの間のマッピング関係は次のとおり
- 各クラスタ・ノードは、ビットの16384ビット(2kBの)グループを維持0/1はそれ自身のためのスロットを有しているかどうかを識別して、各ビットは、スロットの同じ番号に対応します
- クラスタノードは、クラスタのノードへのスロットのマッピングを維持する長さが16384であり、配列の添字の配列は、スロット番号を表し、ノード情報の値
3クラスター展開
Redisのクラスタサポートの場合は、Redisの新しいノードが既存のクラスタに参加したときに、データ移行トラフの必要性を、クラスタの外部サービス、クラスタの動的容量拡張や収縮には影響しないと、移行後の各ノードは、スロットの同様の数に責任があることを確認するために、各ノード上のデータの分布
全データの移行がRedisのはまた、C言語のRedis-CLIに基づいて、新たなオファーをRedis5、ルビーベースのRedis-trib.rb含むクラスタ管理ツールを提供し、一連の動作を含む、以下ではRedisの-CLIをする例を説明します
次のようにターゲット・ノード指定されたデータスロットへ移行元ノードは、基本的なプロセスです。
- ターゲットノードは、スロットデータに移動する準備ができているように、(1)のRedis-CLIは、スロット状態がインポート指定されたターゲット・ノードを設定します
- ソース・ノードは、その結果のデータスロットを移動する準備ができているように(2)のRedis-CLIソースノードの設定状態は、スロットの移行を指定しました
- スロット内のターゲット・ノードへの(3)のRedis-CLI指定バルクデータ移行元ノード
- (4)データ移行のRedis-CLIは、マスターノードにクラスタ・ターゲット・ノードに割り当てられた後は、すべての溝、マスタノードに通知し、ノードがマッピング関係情報スロットを更新します
データは、クライアント・ノードによって要求されていない場合、通常、ノードは、クライアントが正しいノードに基づいて情報を要求し、移動、リダイレクト情報を応答します。移行されるデータのスロットについては、次のようにクライアントが通常の設計にアクセスできることを確認してください。
- マイグレーションは、スロットノードのマッピング関係情報を完了するまで移行する前に同一のマッピング情報を保持および移動する場合(1)、更新されません
- (2)クライアント・ノード・アクセス元場合、アクセス・キーは、キーの通常処理の外に移動されていません
- (3)ソースノードへのクライアントアクセス、アクセスキーはまだリダイレクト情報は、ASK返すために、ソースノードを移動されている場合
- (4)クライアント・リダイレクションが異常情報抽出対象ノードをASK、ターゲットノードがXianxiang要求操作コマンドを尋ねる送信し、その後、コマンド実行キー
これら二つはASKと次のような違いをリダイレクトMOVED:
- 説明クラスタスロット継続的なデータ移行をリダイレクトASK、クライアントは、移行が完了したとき、それは一時的なリダイレクトすることができ知ることができない、クライアントは、ノードをRedisのために、マップキャッシュスロットを更新しません。
- キースロットに対応したMOVEDリダイレクト指示は明確に新しいノードに割り当てられている、スロットマップキャッシュノードのRedisを更新する必要があります
4 CAPオフ
CAPは、次のとおりです。制限時間内にデータの一貫性は、それが事態のパーティションが行われた、CとAとの間で行われなければならないことを意味した場合の一貫性(一貫性)、可用性(アベイラビリティ)、パーティションのフォールトトレランス(分割耐性)、システムが到達することはできません選択
RedisのクラスタがCAのアーキテクチャを選択した可用性を確保するために、Redisのは、強い一貫性を保証するものではありません、そこには一定の条件の下でデータの不整合であっても、書き込み動作を失われます
第一の理由は次のとおりです。トレードオフのパフォーマンスと一貫性の間を作るために、ノード間のデータのマスタースレーブの同期は、クライアントが正常非同期レプリケーションへの書き込み動作の前にマスターノード、マスター戻っ成功、マスターノードに書き込まれたときに、非同期レプリケーションですスレーブノード
パーティション場合、masterAノードが少数に位置する場合は、ネットワークパーティションが短時間発生した場合、クラスタが正常に動作し続ける、大多数と少数:もう一つの理由は、ネットワークパーティションクラスタを送信するときに、クラスタは、2つの部分に分割されてもよいということです時間が失われ、新たな代替matsterAマスターのための選挙で過半数が、その後、パーティションのデータの間にmasterAを書くように、十分な長さであります
ネットワークパーティションの間に、クライアントはmatsterA最大時間に書き込みコマンドを送信することができます制限され、この制限がタイムアウトノード(クラスタ・ノード・タイムアウト)と呼ばれ、重要なクラスタ構成オプションのRedisのです
概要
ここで紹介これまでのところ、Redisのクラスタのクラスタリングの概念、通信プロトコルのクラスタ、メモリ、データのバックアップもあり、それはマスターコピーおよびその他の機能から学ぶ価値がある、分散システムの設計のモデルであり、導入を拡大する機会を持っています
次に、Redisのクラスタクラスタの戦闘を導入
参照
実際Redisの6年間のマイクロブロギング
https://mp.weixin.qq.com/s/dBWIHwfmrs6Tt7INw-zSyA
Redisの公式サイトでは、クラスタの設計仕様を説明し
https://redis.io/topics/cluster-tutorial
https://redis.io/topics/cluster-spec