Docker ベースの Redis マスタースレーブ クラスタの実装

Docker ベースの Redis マスタースレーブ クラスタの実装

最近、多くの友人が私を友人として追加し、Redis クラスターの設定に関する問題について質問してきました。以前書いた「Docker ベースの Redis クラスターの設定」という記事に何か問題があるに違いないと思ったので、以前の記事を数分かけて閲覧し、次の質問をまとめました。

Redis の数が少なすぎるため、インスタンスが 3 つしか作成されません。インスタンスが 3 つしかないため、それらはすべてマスター ノードにしかなれず、クラスターのマスター スレーブ関係を反映できません。マスター スレーブ クラスターを構築するにはどうすればよいでしょうか。スレーブノードを割り当てるにはどうすればいいですか?

前回の記事に基づいて、これらの質問を簡単に説明したいと思います。この記事はDocker + Redis 5.0.5バージョンに基づいており、クラスターモードを介して6つのredisインスタンスのマスタースレーブクラスターを作成します。もちろん、記事では対応するパラメータの説明を示します。そのため、9つのインスタンスのクラスターを作成する場合でも、方法は同じです。

1. Redisイメージを取得する

Redis: バージョン 5.0.5 に基づいて、次の手順を実行します。

docker pull redis:5.0.5

2. 6つのRedisコンテナを作成する

6 つの Redis コンテナを作成します。

  • redis-ノード1:6379
  • redis-ノード2:6380
  • redis-ノード3:6381
  • redis-ノード4:6382
  • redis-ノード5:6383
  • redis-ノード6:6384

実行コマンドは次のとおりです。

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382

docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383

docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384

いくつかのパラメータの説明:

  • --cluster-enabled: クラスターを有効にするかどうか、値を選択: yes、no
  • --cluster-config-file 設定ファイル.conf: ノード情報を指定します。自動的に生成されます
  • --cluster-node-timeout ミリ秒値: ノード接続タイムアウトを構成する
  • --appendonly: 永続性を有効にするかどうか、値を選択: yes、no

コマンド実行のスクリーンショット:

3. Redisコンテナを起動する

実行コマンドは次のとおりです。

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6

起動時のスクリーンショットは次のとおりです。

4. Redisクラスターを構築する

任意の Redis インスタンスを入力します。

# ここでは redis-node1 インスタンスを例にとります docker exec -it redis-node1 /bin/bash

コンポーネント クラスターのコマンドを実行します。

# クラスターを構築します。10.211.55.4 は現在の物理マシンの IP アドレスです。redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 10.211.55.4:6383 10.211.55.4:6384 --cluster-replicas 1

実行コマンドのスクリーンショットは次のとおりです。

作成が成功したら、redis-cli を使用してクラスター ノードの情報を確認します。

ルート@CentOS7:/data# redis-cli
127.0.0.1:6379> クラスターノード

実行コマンドのスクリーンショットは次のとおりです。

5. Redisクラスタ構築について

クラスターを作成するコマンドに戻りましょう。

redis-cli --cluster 作成 10.211.55.4:6379~6384 --cluster-replicas 1

このパラメータ--cluster-replicas 1 に特に注意してください。パラメータの後の数字は、マスターとスレーブの比率を示します。たとえば、ここでの 1 は、マスターとスレーブの比率が 1:1 であることを意味します。これは何を意味するのでしょうか?

つまり、1 つのマスター ノードは複数のスレーブ ノードに対応します。現在インスタンスは 6 つあるため、マスター スレーブの割り当てはマスター ノード 3 つとスレーブ ノード 3 つになります。

クラスターの堅牢性を確保するには、少なくとも 3 つのマスター ノードが必要です。

--cluster-replicas 2 の場合はどうなりますか?

すると、マスターとスレーブの比率は 1:2 となり、つまり 1 つのマスター ノードが 2 つのスレーブ ノードに対応します。

つまり、3 (マスター) + 6 (スレーブ) = 9 個の Redis インスタンスです。

Redis インスタンスが 9 個未満であるが、パラメータが 2 に指定されている場合はどうなりますか?

エラーメッセージは次のとおりです。

プロンプトは非常に明確で、Redis クラスターには少なくとも 3 つのマスター ノードが必要です。次に、スレーブ ノードが 6 つ必要になるため、最終的には少なくとも 9 つのノードが必要になります。

わかりました。少なくとも 3 つのマスター ノードという要件は続けませんが、4 つのマスター ノードと 2 つのスレーブ ノードがあれば十分だと思います。

4 つのマスターノードがあなたのニーズを満たします:

# 起動した Redis インスタンスを入力します。ここでは redis-node1 インスタンスを例に挙げます。docker exec -it redis-node1 /bin/bash

クラスターを構築するには、次のコマンドを実行します。

redis-cli --cluster を作成します 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 --cluster-replicas 0

スレーブなしで 4 つのマスターを指定します。つまり、マスターは 4 つになります。

残りの 2 つのスレーブ ノードはどうなりますか?手動で追加します。

追加方法は?手動で追加してください!

これらのマスター ノードの ID が表示されていますか? スレーブをそれらに割り当てるだけです。

以下のコマンドを続けて実行します。

redis-cli --cluster add-node 10.211.55.4:6383 10.211.55.4:6379 --cluster-slave --cluster-master-id b0c32b1dae9e7b7f7f4b74354c59bdfcaa46f30a

redis-cli --cluster add-node 10.211.55.4:6384 10.211.55.4:6379 --cluster-slave --cluster-master-id 111de8bed5772585cef5280c4b5225ecb15a582e

2 つの Redis インスタンスは他のマスター ノードに接続されます。

最後に、redis-cli に入り、クラスター ノードを通じてノード情報を表示します。

Docker ベースの Redis マスタースレーブ クラスターの実装に関するこの記事はこれで終わりです。Docker Redis マスタースレーブ クラスターの関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • redisクラスタを構築するためのdockerの環境構築を詳しく解説
  • docker ベースの redis-sentinel クラスターの構築例
  • Docker ベースの Redis クラスターの構築方法
  • Docker を使用して Redis マスター スレーブ レプリケーション クラスターを構築する
  • 5分でDockerを使ってRedisのクラスターモードとセンチネルモードを構築する方法を教えます
  • Docker 上で Redis クラスターを構築する
  • Docker 経由で Redis 6.x クラスターをデプロイする方法
  • Docker-swarmを使用してRedisクラスターを素早く構築する方法

<<:  CSSの省略記号とパディングを組み合わせた場合の問題の詳細な説明

>>:  HTMLの基礎知識:ウェブページの基礎知識

推薦する

MySQLの水平および垂直テーブルパーティションの説明

前回の記事で、MySQL ステートメントの最適化には限界があると述べました。MySQL ステートメン...

Linux システムで HugePages をすばやく構成するための完全な手順

序文Linux システムの HugePages と Oracle データベースの最適化については、関...

MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...

MySQLカバーインデックスの使用例

カバーインデックスとは何ですか?クエリで使用されるすべてのフィールドを含むインデックスを作成すること...

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

Windows で nginx を素早くインストールし、自動的に起動するように設定する

目次1. Windows システムでの Nginx のインストールと起動プロセス: 2. 起動時にN...

MySQLのSQL文はインデックスを使用しません

インデックス集約を使用しない MySQL クエリご存知のとおり、インデックスを追加することはクエリ速...

Nexus をベースに Alibaba Cloud プロキシ ウェアハウスを構成するプロセスの分析

Nexus のデフォルトのリモートリポジトリは https://repo1.maven.org/ma...

JS を使用して要素がビューポート内にあるかどうかを確認する方法

序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

MySQL 8.0.18 安定版がリリースされました! 予想通りハッシュ結合が実装されました

MySQL 8.0.18 安定版 (GA) が昨日正式にリリースされ、Hash Join も期待通り...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...

JavaScript の onblur および onfocus イベントの詳細な説明

HTML ページでは、ボタンやテキスト ボックスなどの視覚要素にフォーカスを設定したり、フォーカスを...

知らないかもしれない奇妙で興味深いDockerコマンド

はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...