Docker 上で Redis クラスターを構築する

Docker 上で Redis クラスターを構築する

環境: Docker + (Redis:5.0.5 * 3)

1. イメージをプルする

docker pull redis:5.0.5 

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

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

redis-ノード1:6379

redis-ノード2:6380

redis-ノード3:6381

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

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

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

3. コンテナを起動するためにクラスターを起動して構築する

まず、 docker startコマンドを使用して 3 つの Redis コンテナを起動します。

実行コマンドを実行した後、コンテナの起動を確認します。

上記のような状況が発生した場合、 Exited (1) 3 seconds agodocker logsで確認できます。

上記のように、これは権限の問題です。権限を変更してみましょう。

chmod -R 777 /データ

起動が成功すると、次の図が表示されます。

クラスターの構築

Docker で 3 つの Redis によって割り当てられた IP ノード情報を表示します。

「docker examine redis-node1」を実行して、redis-node1 の IP 情報を取得します: 172.17.0.4
「docker examine redis-node2」を実行して、redis-node2 の IP 情報を取得します: 172.17.0.3
「docker examine redis-node3」を実行して、redis-node3 の IP 情報を取得します: 172.17.0.2

IP 情報を取得したら (各人の IP 情報は異なる場合があります)、コンテナーに入り、クラスターを構築します。

# ここでは例として node1 を入力します docker exec -it redis-node1 /bin/bash

# 次にクラスタ形成コマンドを実行します(自分のIP情報に合わせて接続してください)
redis-cli --cluster 作成 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 --cluster-replicas 0 

さて、これでクラスターが構築されました。テストしてみましょう。

テストクラスター

redis-cli -cコマンドを使用してクラスター ノードに接続し、値を設定します。値を設定すると、自動的に 0.2 IP アドレスにリダイレクトされ、get を通じて取得されます。取得が成功すると、クラスターが有効であることが証明されます。

4. 既存の問題

上記の手順により、クラスターは正常に構築されますが、まだいくつかの問題があります。クラスターノードのip地址は、 172.17.0.2のように、ドケットによって内部的に割り当てられるため、 redis集群を使用するプロジェクトがクラスターと同じサーバー上にない場合、プロジェクトはクラスターにアクセスできないため、クラスターを使用できません。

1 つの解決策は、Docker にhost模式ネットワーク接続タイプを使用させることです。Dockerによってhost模式で作成されたコンテナーには、独自の独立したネットワーク名前空間がありません。物理マシンとネットワーク空間を共有し、物理マシンのすべてのポートと IP アドレスを共有できます。これにより、パブリック ネットワークがコンテナーに直接アクセスできるようになります。この方法にはセキュリティ上のリスクがありますが、今のところ他に実行可能なモードは見つかっていません。

既存の問題を解決するために、 host模式を再度採用し、コンテナーを再作成します。

1. 実行中のコンテナを停止する

docker stop redis-node1 redis-node2 redis-node3

2. 以前に作成したコンテナを削除する

docker rm redis-node1 redis-node2 redis-node3

# 上記で作成した設定ファイルをクリアします rm -rf /data/redis-data/node*

3. ホストモードに基づいて再作成する

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

前の作成コマンドとは異なり、まず、 --netネットワーク タイプがhostとして指定され、次に、この場合、 -p 6379:6379などのポート マッピングは必要ありません。これは、この時点でコンテナー ポート サービスを外部で共有する必要があるためであり、公開されているポート-p 6379-p 6380などのみを指定する必要があります。

4. コンテナを起動してクラスターを形成する

# コマンドを開始 docker start redis-node1 redis-node2 redis-node3

# コンテナに入る 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 --cluster-replicas 0 

5. クラスター情報を表示する

ルート@CentOS7:/data# redis-cli
127.0.0.1:6379> クラスターノード
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 マスター - 0 1590905997358 2 接続 5461-10922
6a595b67b​​bff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 マスター - 0 1590905998362 3 接続済み 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 自分、マスター - 0 1590905997000 1 接続 0-5460
127.0.0.1:6379>

6. テストクラスター

redis-cli -cを使用してクラスターに接続し、値set 、他のノードから値を取得して成功したかどうかを確認します。

ルート@CentOS7:/data# redis-cli -c
127.0.0.1:6379> wxiaowei 123 を設定
-> 10.211.55.4:6380 にあるスロット [7515] にリダイレクトされました
わかりました
10.211.55.4:6380> wxiaowei を取得
「123」 

この時点で、Docker ベースの Redis クラスターの單副本模式が構築されました。この記事の 3 つの Redis はすべてマスター ノードを使用しています。複数コピーとマスター スレーブ アーキテクチャの高可用性については、後で補足します。

必要なマスタースレーブ クラスター: https://www.jb51.net/article/212285.htm

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クラスターを素早く構築する方法

<<:  CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

>>:  ブラウザのURLの前に小さなアイコンを表示する方法

推薦する

MySQL 8.0.18 はクローンプラグインを使用して MGR 実装を再構築します

3 ノード MGR 内の 1 つのノードに異常があり、MGR クラスターに再度追加する必要があるとし...

div が iframe に覆われるいくつかの状況とその解決策

類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...

Vue プロジェクトのパッケージ化と最適化の実装手順

目次Vueプロジェクトのパッケージ化、起動、最適化Vueプロジェクトのパッケージ化プロジェクトホステ...

VMware Workstation 14 Pro のインストールとアクティベーションのグラフィック チュートリアル

この記事では、VMware Workstation 14 Proのインストールとアクティベーションに...

シンプルなカレンダー効果を実現する js

この記事では、シンプルなカレンダー効果を実現するためのjsの具体的なコードを参考までに共有します。具...

マウスを動かしたときにセカンダリメニューバーを実装するために HTML+CSS を使用する例

この記事では、マウスを動かしたときにセカンダリ メニュー バーを実装するために HTML+CSS を...

WeChatミニプログラムビデオ集中砲火位置ランダム

この記事では、WeChatミニプログラムのビデオ弾幕の位置をランダム化するための具体的なコードを紹介...

CentOS仮想マシンの時刻を変更する方法

上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...

MySQLは外部SQLスクリプトファイルのコマンドを実行します

目次1. SQLコマンドを含むSQLスクリプトファイルを作成する2. SQLスクリプトファイルを実行...

HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...

Node.js ファイルのコピー、フォルダの作成、その他の関連操作

NodeJS は次のファイルをコピーします:通常、小さなファイルのコピー操作では、ストリーム パイプ...

HTML2 キャンバス SVG が認識されない場合の解決策

ウェブページを画像としてキャプチャする新機能があったので、人気のhtml2canvasを使ってみまし...

テキストエリアのテキストをHTMLに変換する方法、つまり復帰改行について

説明: テキストエリアの値の改行を新しい行に変更しますコードをコピーコードは次のとおりです。 <...

HTML CSS に基づく検索アイコン付き検索ボックス機能を実装する

序文フロントエンドで非常に便利な、小さなアイコン付きの検索ボックスを作成する方法をご紹介します。エフ...

HTML Webページ作成チュートリアル iframeタグを慎重に使用してください

iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...