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の基礎知識:ウェブページの基礎知識

推薦する

CentOSにDockerをインストールする方法

ここでは比較的簡単なインストール方法のみを紹介します。 1. yumを使用してインストールするyum...

sqlalchemy に基づいて MySQL で追加、削除、変更、クエリ操作を実装する

需要シナリオ:上司は、クロ​​ーラーを使用してMySQLデータベースにデータを書き込んだり更新したり...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Mysql SQL ステートメントのコメント

MySQL SQL ステートメントにコメントを追加できます。MySQL SQL ステートメントのコメ...

Vue.js でフォントを読み込む正しい方法

目次font-faceでフォントを正しく宣言するフォントをプリロードするフォントをホストするにはli...

ショートビデオ(Douyin)の透かし除去ツールの実装コード

目次1. まず最初のリンクを取得する2. ブラウザでこのリンクを開いてください3. アドレスを開くと...

VSCode の Remote-SSH を使用して Linux に接続し、リモート開発を行う

Remote-SSHをインストールして設定するまず VSCode を開き、拡張機能を見つけて、Rem...

LambdaProbe を使用して Tomcat を監視する方法

導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

動的および静的分離を実装するための Nginx サンプル コード

この記事のシナリオと組み合わせて、Nginx と Java 環境 (SpringBoot プロジェク...

MySQLでテーブルデータを削除する方法

MySQL でデータを削除する方法は 2 つあります。1 つは DELETE ステートメント、もう ...

MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルは、一時的なデータを保存する必要がある場合に非常に便利です。一時テーブルは現...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...

MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明

1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...

JavaScript で 2 次元配列を作成するためのヒント

Js での 2 次元配列の作成:まず、JavaScript は 1 次元配列のみをサポートしています...