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

推薦する

角丸四角形の HTML+CSS 実装コード

退屈していたので、突然角丸四角形の実装を思いつきました。しかし、私たちはこの話題についてあまりにも長...

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

JavaScript で外部変数にアクセスするサブ関数の 3 つのソリューション

序文Web ページを作成するときに、次のような状況に遭遇することはよくあります。 <本文>...

Vueはカスタム命令を使用してページの下部に透かしを追加します

プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

Webpack ファイル パッケージ化エラー例外

webpack をパッケージ化する前に、次の作業が完了していることを確認する必要があります。 1) ...

Nginx を使用して DoNetCore を Alibaba Cloud にデプロイする方法

基本的な環境設定まずはご自身でドメイン名とサーバーを購入してくださいクラウドサーバーECSに基づいて...

MySQL 5.5.27 インストール グラフィック チュートリアル

1. MYSQLのインストール1. ダウンロードしたMySQLインストールファイルmysql-5.5...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

Linux コマンドラインターミナルで画面を分割するための 2 つのツール

ターミナル分割画面ツールは2つあります: screen と tmux 1. 画面分割を使用する(上下...

ウェブページ作成時のHTMLタグの使用に注意してください

この記事では、Web ページの作成を学習するときに注意すべき HTML タグに関するいくつかの問題を...

MySQL ユーザーと権限、およびルートパスワードをクラックする方法の例

MySQL ユーザーと権限MySQL には、MySQL と呼ばれるシステムに付属するデータベースがあ...

フロントエンド JavaScript におけるリフレクションとプロキシ

目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...

Vue2とVue3のライフサイクルの比較の詳細な理解

目次サイクル比較使用法要約するサイクル比較ヴュー2ヴュー3作成前設定作成された設定マウント前マウント...

Vueメソッドに基づくシンプルなタイマーの実装

Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...