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

推薦する

トップに戻るボタンの例の JavaScript 実装

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

Django+vue 登録とログインのサンプルコード

登録するフロントエンドは、vue の axios を使用して値を渡し、取得したアカウントとパスワード...

ウェブデザインレイアウトの理解

<br />矛盾が生じます。私たちのような小さな工房では、デザインとレイアウトは基本的に...

vue-router のハッシュモードと履歴モードの違い

vue-routerには2つのモードがありますハッシュモード履歴モード1. シングルページアプリケー...

Vueにおける混合継承の詳細な説明

目次混合継承の影響: 1. 継承Vue.extend メソッド​プロパティを拡張する2. ミックスイ...

Docker コンテナに TensorRT をインストールする際の問題

Ubuntu にインストールされているバージョンをアンインストールします。 sudo apt-get...

MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装

1. まず、次のパスに従って対応するフォルダを作成します。 ローカルのdockerでmysqlを実行...

Linux での Hbase のインストールと設定のチュートリアル

目次Linux での Hbase のインストールと設定1. Hbaseインストールパッケージをダウン...

ハイパーリンクアイコンの仕様: 記事の読みやすさを向上

1. ハイパーリンクアイコンの仕様とは?<br />ハイパーリンクアイコンの仕様は、「C...

Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

1. 子コンポーネントのthis.$parent.eventを通じて親コンポーネントメソッドを直接呼...

MySQLリモート接続失敗の解決策

以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...

Vue要素ツリーコントロールに点線を追加する詳細な説明

目次1. 成果を達成する2. 実装コード3. その他の実装要約する1. 成果を達成する 2. 実装コ...

モバイル適応型ウェブページ効果は、小さな表示ページの問題を解決します

仕事上、携帯電話に適応した Web ページ効果を作成する必要があります。ようやく完成しました。まずは...

TypeScript で時間を費やした場所の概要

TS で時間を過ごした場所をいくつか記録します。 (まず、文句を言わせてください。stackover...