まず、
でほとんど作業を行わない場合は、デフォルトの構成を変更できます。redis-trib.rb
関数def check_create_parameters
で 。 1つのマスターと1つのスレーブレプリカを設定できます。
この構成の目的は、フォールトトレランスです。スレーブは読み取りにも使用できます(読み取り専用)。 3つのマスターでは、ハッシュスロットが均等に分散され、負荷分散アルゴリズムを使用して、実際のキーを再分散できます。ノード間でキーを分散する可能性のあるアルゴリズムの手順は次のとおりです(私がテストし、期待どおりに機能します):
- マスターの群衆を見つける
- 保持しているキーの総数を取得する
- マスターノードごとに、ホスト名、ポート、およびキーの数を保存します
- キーの分布のバランスをとるために各マスターが保持する必要のあるキーを計算します(クラスターのキーの総数/マスターの数)
- キーを取得または付与する必要のあるマスターノードと、キーを取得/取得する必要のあるキーの総数を確認します
- マスターがキーを受け取っているか、与えているかに応じて、マスターをソースノードまたはターゲットノードとして特徴付けます。
- ソースノードからターゲットノードへの移行を開始します。最初にハッシュスロット、次に関連するキーを使用し、すべてのマスターが同じ量のキーを持つまで繰り返します。
このアルゴリズムは、応答時間を最小限に抑えるのに役立ちます。意味:
3つのマスターを使用すると、応答時間を最小限に抑えることができます。 1つのマスターを持つ構成があり、このマスターがたとえば30000の#keysを保持している場合、一度に1000keysを取得する応答時間は、それぞれ15000を保持する2つのマスターを持つ構成からです。
master1でキーを作成する場合、master2からそのキーに到達(読み取り)しようとすると、MOVEDエラーが発生します。したがって、解決策は、ハッシュスロットを対応するノードにマップするスマートクライアントを作成することです。したがって、master2がリクエストを正しいマスターにリダイレクトする場合にのみ、master2からキーを削除できます。
お役に立てば幸いです。