Redis シャーディング クラスター
Redis シャーディングは、クライアント側のシャーディング テクノロジです。
Redis Sharding は、Redis Cluster が登場する前に業界で一般的に使用されていたマルチ Redis インスタンスのクラスター手法であると言えます。主なアイデアは、ハッシュ アルゴリズムを使用して Redis データのキーをハッシュすることであり、ハッシュ関数を通じて、特定のキーが特定の Redis ノードにマッピングされます。 (推奨学習: Redis ビデオ チュートリアル )
このようにして、クライアントはデータを操作する Redis ノードを認識します。クライアント側、完了しました。
java redis クライアント jedis は、Redis シャーディング機能、つまり ShardedJedis およびキャッシュ プールと組み合わせた ShardedJedisPool をすでにサポートしています。 Jedis の Redis シャーディング実装には次の特徴があります:
1. 一貫したハッシュ アルゴリズム (一貫したハッシュ) を使用します
キーとノード名を同時にハッシュし、マッピング マッチング。使用されるアルゴリズムは MURMUR_HASH です。一貫性のあるハッシュの主な理由は、ノードを追加または削除するときに、再照合による再ハッシュが発生しないことです。整合性ハッシュは隣接ノードのキー割り当てにのみ影響を与え、影響は小さいです。コンシステント ハッシュ アルゴリズムの詳細については、http://blog.csdn.net/cywosp/article/details/23397179/
2 を参照してください。 ##ShardedJedis は、ハッシュ化の名前に基づいて、各 Redis ノードを 160 の仮想ノードに仮想化します。マッピングとマッチングに仮想ノードを使用すると、Redis ノードを追加または削減するときに、隣接するノードのみが影響を受けるのではなく、Redis ノード間でキーをより均等に移動できます。図に示すように、Redis ノード 1 は、ハッシュ リング内の NODE1-1 と NODE1-2 に仮想化されます。このように、object1 と object2 がハッシュされると、最も近いノード NODE1-1 と NODE1-2 が選択され、NODE1-1 と NODE1-2 は NODE ノードの仮想ノードになります。つまり、実際には NODE に格納されます。ノード。
仮想ノードを追加すると、バランスを確保できます。つまり、あるマシンに多くのデータが保存され、他のマシンには少ないデータが保存されるのではなく、各 Redis マシンが同様のデータを保存します。3. ShardedJedis は keyTagPattern モードをサポートします
キーに合理的な名前を付けることで、関連するキーのグループをクロスノードアクセスを避けるために同じ Redis ノードを使用します。つまり、クライアントは同じ Redis ノード上の同じルールのキー値を指定して保存します。
ノードを追加または削減するときは?
Redis シャーディングはクライアント シャーディング方式を採用しており、サーバー上の Redis は依然として比較的独立した Redis インスタンス ノードです。同時に、追加の中間処理コンポーネントを追加する必要がなく、これは非常に軽量で柔軟な Redis マルチインスタンス クラスター ソリューションです。
もちろん、この軽量で柔軟なアプローチは、クラスターの他の機能を犠牲にする必要があります。たとえば、スケールアップする場合、Redis ノードを追加する場合、整合性のあるハッシュが使用されている場合でも、異なるキーが異なる Redis ノードに配布されます。 拡張する必要がある場合は、シャード リストにマシンを追加します。このとき、クライアントはキーを元に計算し、元のマシンとは別のマシンに到達するため、ある値が得られるはずなのに得られない可能性があります。 この状況では、一般的なアプローチは、データを取得できなくなった後、バックエンド データベースから直接リロードすることですが、場合によっては、キャッシュ層を突破してデータベース層に直接アクセスすると、大きな損害が発生することがあります。システムアクセスへの大きなプレッシャー。Redis の作者は、プリシャーディングという方法を提供しました。
はオンライン拡張方法です。原理は、各物理マシンで異なるポートを使用して複数の Redis インスタンスを実行することです。たとえば、物理マシンが 3 台ある場合、各物理マシンは 3 つの Redis インスタンスを実行します。 , その後、シャーディング リストには実際には 9 つの Redis インスタンスがあります。拡張する必要がある場合は、物理マシンを追加します。手順は次のとおりです:
1. 新しい物理マシンで Redis-serverを実行します。 .
2. Redis サーバーは、シャード リスト内の Redis サーバー (RedisA と呼ばれるものとします) に属します。 3. マスター/スレーブのレプリケーション (Replication) が完了したら、クライアント シャード リストの RedisA の IP とポートを、新しい物理マシンの Redis-Server の IP とポートに変更します。 4. Redis の停止Aこれは、特定の Redis サーバーを新しいマシンに移行することと同じです。ただし、依然として Redis 自体のレプリケーション機能に大きく依存しているため、メイン データベースのスナップショット データ ファイルが大きすぎると、レプリケーション処理に時間がかかり、メイン Redis にも負荷がかかります。この分割プロセスの低ビジネス アクセス方法。ピーク時間帯に実施されます。ノードに障害が発生した場合
キー値の損失の原因となるのは、Redis ノードの追加または削除だけではありません。より大きな障害は、Redis の突然のダウンタイムによって発生します。ノード。
Redis のパフォーマンスに影響を与えないように、AOF および RDB ファイルの保存機能を有効にしないようにするため、Redis のアクティブ/スタンバイ モードを構築する必要があります。スタンバイ Redis にはバックアップがあるため、データは失われません。 シャーディングは次のように進化しました: このようにして、私たちのアーキテクチャ モデルは、プライマリ Redis とスタンバイ Redis を含む Redis ノード スライスになります。アクティブとスタンバイは、自動化によって一緒に Redis ノードを形成します。フェイルオーバー 、ノードの高可用性を確保します。Redis Sentinel
Redis モニタリングやアクティブ モードおよびバックアップ モードでのフェイルオーバーなどの機能を提供し、システムの高可用性を実現します。
読み取りと書き込みの分離
アクセス時間が長い場合、シャーディングが使用されている場合でも、単一ノードは依然として大きなアクセス圧力にさらされています。この時点では、さらに分解する必要があります。それ。
通常、読み取りは書き込みより数倍高速であることがよくありますが、現時点では読み取りと書き込みを分離することができ、読み取りの方がより多くのインスタンスを提供します。マスタースレーブモードは、読み出しと書き込みの分離を実現するために使用され、マスターは書き込みを担当し、スレーブは読み取りのみを担当し、同時に 1 つのマスターに複数のスレーブを接続できます。 Redis Sentinel 監視では、ノード障害の自動監視も確実に行うことができます。
Redis 関連の技術記事の詳細については、「Redis データベース チュートリアルの使用方法の概要」 列にアクセスして学習してください。
以上がRedisをクラスタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。