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 を使用してマテリアル ライブラリを構築する方法

推薦する

同じレベルの要素で Position:fixed と margin-top を一緒に使用する場合の CSS の問題

問題の説明CSS を使用して上部の固定効果を実現したいと思います。 margin-top と pos...

Linux ps および pstree コマンドの知識ポイントのまとめ

Linux の ps コマンドは Process Status の略です。 ps コマンドは、システ...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

Vueはシンプルなマーキー効果を実装します

この記事では、Vueの具体的なコードを共有して、シンプルなマーキー効果を実現しています。具体的な内容...

実務経験7年のフロントエンドスーパーバイザーによる経験共有

今日はベテランの貴重な経験を共有します。著者は技術管理の経験が7年あり、多い時は80人以上を率いてい...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

JS でクリップボード API を使用する方法

目次1. Document.execCommand() メソッド(1)コピー操作(2)貼り付け操作(...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

VMware pro15 インストール macOS10.13 詳細インストール図(画像とテキスト)

編集者は最近、macOS システムを使い始めたかったので、VMware に macOS イメージ シ...

CSS 3D からソースコードによる空間座標軸へ

かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

SSL で Nginx リバース プロキシを構成する簡単な手順

序文リバース プロキシは、Web 経由で行われたリクエスト (http と https の両方) を...

Tomcat サーバーの応答が遅い場合の解決策

1. 分析的思考1. 機械自身の理由を排除する2. サーバーパフォーマンス分析3. プロジェクト自体...

HTML 内の CSS および JS リンクのバージョン番号 (キャッシュを更新)

背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...