Docker での Redis のマスタースレーブ構成チュートリアルの詳細説明

Docker での Redis のマスタースレーブ構成チュートリアルの詳細説明

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

docker pull redis

2. それぞれポート6379、6380、6381を使用して3つのRedisコンテナサービスを起動します。

docker run --name redis-6379 -p 6379:6379 -d redis
docker run --name redis-6380 -p 6380:6379 -d redis
docker run --name redis-6381 -p 6381:6379 -dredis

3. コンテナを表示する

[tcy@tcy1 ~]$ docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
a9fa77adc598 daocloud.io/library/redis "docker-entrypoint.s 2 時間前 2 時間前 0.0.0.0:6381->6379/tcp redis-6381   
6ee2f2f007e6 daocloud.io/library/redis "docker-entrypoint.s 2 時間前 2 時間前にアップ 0.0.0.0:6380->6379/tcp redis-6380   
ab54741166e1 daocloud.io/library/redis "docker-entrypoint.s 3 時間前 3 時間前にアップ 0.0.0.0:6379->6379/tcp redis-6379

4. テストコンテナ、成功

docker exec -it ab54741166e1 redis-cli: コンテナに入ります [root@tcy1 tcy]# docker exec -it ab54741166e1 redis-cli
127.0.0.1:6379> b tcy を設定
わかりました
127.0.0.1:6379> 取得b
「tcy」
127.0.0.1:6379> 終了[root@tcy1 tcy]#

5. Redisクラスタ構成を開始する

5.1. コンテナイントラネットのIPアドレスを確認する

[root@tcy1 tcy]# docker inspect a9fa77adc598

ここに画像の説明を挿入

3 つの Redis のイントラネット IP アドレスは次のとおりです。

redis-6379: 172.17.0.1:6379
redis-6380: 172.17.0.2:6379
レディス-6381:172.17.0.3:6379

5.2. Dockerコンテナに入り、現在のRedisロール(マスターまたはスレーブ)を確認します。

[root@tcy1 tcy]# docker exec -it ab54741166e1 /bin/bash
ルート@ab54741166e1:/data# redis-cli
127.0.0.1:6379> 情報レプリケーション
# レプリケーション
役割:マスター
接続されたスレーブ:0
マスター返信ID:d43d1ae8cde6cb084220e18b926aba79e0bb2504
マスター返信ID2:0000000000000000000000000000000000000000000
マスター_repl_オフセット:0
秒_repl_offset:-1
repl_backlog_active:0
レプリケーションバックログサイズ:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>終了
root@ab54741166e1:/data# 終了 
出口

現在、3つすべてがマスター状態です

5.3. redis-cli コマンドを使用して、redis-6380 と redis-6381 のホストを 172.17.0.1:6379 に変更します。

[root@tcy1 tcy]# docker exec -it a9fa77adc598 /bin/bash //redis-6380
ルート@a9fa77adc598:/data# redis-cli
127.0.0.1:6379>スレーブ172.17.0.1 6379
わかりました
127.0.0.1:6379>終了
root@a9fa77adc598:/data# 終了
出口
[root@tcy1 tcy]# docker exec -it 6ee2f2f007e6 /bin/bash //redis-6381
ルート@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379>スレーブ172.17.0.1 6379
わかりました
127.0.0.1:6379>終了

5.4. redis-6379 にすでに 2 つのスレーブがあるかどうかを確認します。connected_slaves: 2、yes

[root@tcy1 tcy]# docker exec -it ab54741166e1 /bin/bash
ルート@ab54741166e1:/data# redis-cli
127.0.0.1:6379> 情報レプリケーション
# レプリケーション
役割:マスター
接続スレーブ:2
スレーブ0:ip=172.17.0.3、ポート=6379、状態=オンライン、オフセット=378、ラグ=1
スレーブ1:ip=172.17.0.2、ポート=6379、状態=オンライン、オフセット=378、ラグ=0
マスター返信ID:ce193b15cfd57f7dc3ccfbf2a4aef6156b131e6d
マスター返信ID2:0000000000000000000000000000000000000000000
マスター_repl_オフセット:378
秒_repl_offset:-1
repl_backlog_active:1
レプリケーションバックログサイズ:1048576
repl_backlog_first_byte_offset:1
レプリケーションバックログ履歴長:378
127.0.0.1:6379>終了
root@ab54741166e1:/data# 終了
出口

5.5. Sentinel の設定

設定用の3つのRedisコンテナを入力し、コンテナのルートディレクトリにsentinel.confファイルを作成します。

ファイルの内容は次のとおりです: sentinel monitor mymaster 172.17.0.1 6379 1

[root@tcy1 tcy]# docker exec -it a9fa77adc598 /bin/bash
root@a9fa77adc598:/data# cd / && sentinel.conf をタッチします 
root@a9fa77adc598:/# vim /sentinel.conf

bash: vim: コマンドが見つからない場合

解決策: 1. apt-get update 2. apt-get install vim

最後に、Redis Sentinel を起動します。

ルート@a9fa77adc598:/# redis-sentinel /sentinel.conf
342:X 24 Jun 11:37:58.934 # oO0OoO0OoO0Oo Redis が起動しています oO0OoO0OoO0Oo
342:X 24 Jun 11:37:58.957 # Redis バージョン=4.0.10、ビット=64、コミット=00000000、変更=0、pid=342、開始しました
342:X 24 Jun 11:37:58.958 # 設定が読み込まれました
342:X 24 Jun 11:37:58.959 # 最大クライアント数 10000 を要求しましたが、最大ファイル記述子数は少なくとも 10032 必要です。
342:X 24 Jun 11:37:58.959 # OS エラーのため、サーバーは最大オープンファイルを 10032 に設定できません: 操作は許可されていません。
342:X 24 Jun 11:37:58.960 # 現在開いているファイルの最大数は 4096 です。 ulimit が低いため、maxclients は 4064 に減らされました。 maxclients をさらに増やす必要がある場合は、「ulimit -n」を増やしてください。
        _._                         
      _.-``__ ''-._                       
   _.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 ビット
 .-`` .-```. ```\/ _.,_ ''-._                  
 ( ' , .-` | `, ) センチネルモードで実行中
 |`-._`-...-` __...-.``-._|'` _.-'| ポート: 26379
 | `-._ `._ / _.-' | PID: 342
 `-._ `-._ `-./ _.-' _.-'                  
 |`-._`-._ `-.__.-' _.-'_.-'|                 
 | `-._`-._ _.-'_.-' | http://redis.io    
 `-._ `-._`-.__.-'_.-' _.-'                  
 |`-._`-._ `-.__.-' _.-'_.-'|                 
 | `-._`-._ _.-'_.-' |                 
 `-._ `-._`-.__.-'_.-' _.-'                  
   `-._ `-.__.-' _.-'                    
     「-._ _.-」                      
       「-.__.-」                        
 
342:X 24 Jun 11:37:59.068 # 警告: /proc/sys/net/core/somaxconn が 128 という低い値に設定されているため、TCP バックログ設定 511 を適用できません。
342:X 24 Jun 11:37:59.089 # センチネルIDはdfd5a5bfe1036b1df3395c4ba858329034fc5b7eです
342:X 6月24日 11:37:59.091 # +モニター マスター mymaster 172.17.0.1 6379 クォーラム 1
342:X 6月24日 11:37:59.110 * +スレーブ スレーブ 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.1 6379
342:X 6月24日 11:37:59.115 * +スレーブ スレーブ 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.1 6379
 
342:X 6月24日 11:39:27.601 * +sentinel sentinel ba9b0d0539d8273edfcbd922fe138f50daa78bbb 172.17.0.2 26379 @ mymaster 172.17.0.1 6379
342:X 6月24日 11:41:59.144 * +sentinel sentinel f0510f8582b72c056531f219397ed8826683e665 172.17.0.1 26379 @ mymaster 172.17.0.1 6379

複数のウィンドウを開いて簡単に観察できます。

ここに画像の説明を挿入

Sentinel センチネルの設定が完了しました

5.6 テスト

マスターを閉じる

[tcy@tcy1 ~]$ docker stop ab54741166e1
ab54741166e1

この時点で、残りの 2 つのスレーブは自動的に新しいマスターを選出し、ここでは 172.17.0.2 がマスターとして選出されます。

ここに画像の説明を挿入

172.17.0.2 を確認すると、ホストになっています。

[root@tcy1 /]# docker exec -it 6ee2f2f007e6 /bin/bash
ルート@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379> 情報レプリケーション
# レプリケーション
役割:マスター
接続スレーブ:1
スレーブ0:ip=172.17.0.3、ポート=6379、状態=オンライン、オフセット=66906、ラグ=1
マスター返信ID:5a7489c8181ddf0d73d418d30d6a4c8e039198ba
マスター返信ID2:ce193b15cfd57f7dc3ccfbf2a4aef6156b131e6d
マスター_repl_オフセット:67041
秒の繰り返しオフセット:65534
repl_backlog_active:1
レプリケーションバックログサイズ:1048576
repl_backlog_first_byte_offset:85
レプリケーションバックログ履歴:66957
127.0.0.1:6379>

要約する

上記は、編集者が紹介した Docker での redis のマスター スレーブ構成です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。

以下もご興味があるかもしれません:
  • Docker ベースの Redis マスタースレーブ クラスタの実装
  • Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明
  • docker を使用して Redis マスター/スレーブを構築する方法
  • Docker を使用して Redis マスター スレーブ レプリケーション クラスターを構築する
  • CentOS 6 は Docker を使用して Redis マスター スレーブ データベース操作例を展開します
  • Docker ベースの Redis マスタースレーブ + センチネルの構築例

<<:  MySql で SQL 実行プランをクエリするために explain を使用する方法

>>:  vue3 を使用してマテリアル ライブラリを構築する方法

推薦する

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

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

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

Tomcatがセッションを管理する方法の例

ConcurrentHashMapを学習しましたが、どのように適用すればよいかわかりませんか? To...

JavaScript で配列の最大値と最小値を実装する 6 つの方法

配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを...

コンテナDockerCommitを介してイメージを送信し、DockerPushでイメージをプッシュします。

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

Dockerに関するよくある質問

Docker はポートを IPv6 にのみマッピングし、IPv4 にはマッピングしません。 dock...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

CentOSバージョンにDockerをインストールする際のエラーの解決方法

1. バージョン情報 # cat /etc/system-release CentOS Linux ...

JavaScript でアルゴリズムの複雑さを学ぶ方法

目次概要Big O 表記法とは何ですか?オー(1)の上) (n^2) O(logn) ですの上!)結...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

文字列の GBK および GB2312 エンコードとデコードのフロントエンド実装 (概要)

序文プロジェクトを開発しているときに、かなり厄介な問題に遭遇しました。この製品では、判断のためにブラ...

MySQL 8.0はJSONを扱えるようになりました

目次1. 概要2. JSON基本ツール3. JSONパス式4. JSONを検索して変更する序文:長い...

MySQL REVOKE でユーザー権限を削除する

MySQL では、REVOKE ステートメントを使用してユーザーの特定の権限を削除できます (ユーザ...

mysqldumpデータエクスポートの問題に関する詳細な議論

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

全画面ページのスクロール効果を実現するJavaScript

JavaScript DOM を読み終えた後、解釈型 JavaScript スクリプト言語に対する...