1. ホーム
  2. redis

Dockerデプロイメント redis高可用性(Sentinel Mode)

2022-02-21 11:55:56

ディレクトリ

I. はじめに

II. 環境準備

III. デプロイメントの手順

IV. Redisビジュアルインターフェースのインストール

V. テスト


I. はじめに

センチネルパターンは、まずRedisがセンチネルのコマンドを提供し、それがプロセスとして独立して動くという特殊なパターンである。センチネルは、コマンドを送信してRedisサーバーの応答を待つことで、複数のRedisインスタンスが動作していることを監視するという原理である。

この記事では、dockerとredis-sentinelをベースにした高可用性redisクラスタの構築について説明します。多くの場合、redis-sentinelも高可用性にする必要があるので、ここではまずredisのマスターと2つのスレーブ環境、さらにredisマスターを監視するredis-sentinelを3つ構築しています。

公式の推奨では、健全なクラスタデプロイメントには少なくとも3つのSentinelのインスタンスが必要とされています。

II. 環境の準備

<テーブル ノードIP ノード名 システム Dockerのインストールとバージョン ポートを開く 192.168.51.187 ノード187 CentOS 7 Docker Engine - コミュニティ 19.03.14 7001, 27001 192.168.51.226 ノード226 CentOS 7 Docker Engine - コミュニティ 19.03.14 7002, 27002 192.168.51.236 ノード236 CentOS 7 Docker Engine - コミュニティ 19.03.14 7003, 27003

説明:インストール手順に従い、4つのノードにそれぞれDockerをインストールします。  https://blog.csdn.net/DZP_dream/article/details/104670943

III. 展開の手順

1.画像を引っ張ってきて、フォルダを作成(3つのノードに分かれて実行)

Pull the image
docker pull redis

Create the folder
mkdir redis

2. 設定ファイル

ノード1

redis7001.confのリソースアドレスです。  https://download.csdn.net/download/DZP_dream/13764030?spm=1001.2014.3001.5503

sentinel27001.confリソースのアドレスです。  https://download.csdn.net/download/DZP_dream/13764042?spm=1001.2014.3001.5503

ノードIIです。

redis7002.confのリソースアドレスです。  https://download.csdn.net/download/DZP_dream/13764033?spm=1001.2014.3001.5503

sentinel27002.conf   https://download.csdn.net/download/DZP_dream/13764049?spm=1001.2014.3001.5503

ノード3です。

redis7003.confのリソースアドレスです。  https://download.csdn.net/download/DZP_dream/13764039?spm=1001.2014.3001.5503

sentinel27003.confリソースのアドレスです。   https://download.csdn.net/download/DZP_dream/13764054?spm=1001.2014.3001.5503

設定ファイルでは、以下を変更します。

3.redisのインストール(3つのノードでそれぞれ実行)。

#redisInstallation
# node1 execution
[root@node187 redis]# sudo docker run -d --restart=always \
-p 7001:7001 \
-v /home/redis/redis1/redis7001.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis/redis1/data:/data \
--name=redis1 redis:latest redis-server /usr/local/etc/redis/redis.conf 

#node2 execute
[root@node226 redis]# sudo docker run -d --restart=always \
-p 7002:7002 \
-v /home/redis/redis2/redis7002.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis/redis2/data:/data \
--name=redis2 redis:latest redis-server /usr/local/etc/redis/redis.conf 

#node3 execute
[root@node236 redis]# sudo docker run -d --restart=always -p 7003:7003 \
-v /home/redis/redis3/redis7003.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis/redis3/data:/data \
--name=redis3 redis:latest redis-server /usr/local/etc/redis/redis.conf 

4. Sentinelのインストール(3つのノードでそれぞれ実行される)

#Sentinel
# Execute on node one 
[root@node187 redis]# sudo docker run -d --restart=always \
-p 27001:27001 \
-v /home/redis/redis27001/sentinel27001.conf:/usr/local/etc/redis/sentinel.conf \
-v /home/redis/redis27001/data:/data \
--name=redis27001 redis:latest redis-sentinel /usr/local/etc/redis/sentinel.conf 

# Execute on node two 
[root@node226 redis]# sudo docker run -d --restart=always \
-p 27002:27002 \
-v /home/redis/redis27002/sentinel27002.conf:/usr/local/etc/redis/sentinel.conf \
-v /home/redis/redis27002/data:/data \
--name=redis27002 redis:latest redis-sentinel /usr/local/etc/redis/sentinel.conf 

# Execute on node three 
[root@node236 redis]# sudo docker run -d --restart=always \
-p 27003:27003 \
-v /home/redis/redis27003/sentinel27003.conf:/usr/local/etc/redis/sentinel.conf \
-v /home/redis/redis27003/data:/data \
--name=redis27003 redis:latest redis-sentinel /usr/local/etc/redis/sentinel.conf 

5. インストールを確認する

#node1
[root@node187 redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a70a484a8f7 redis:latest "docker-entrypoint.s..." 29 seconds ago Up 23 seconds 6379/tcp, 0.0.0.0:27001->27001/tcp   redis27001
abfb008b2c61 redis:latest "docker-entrypoint.s..." 5 minutes ago Up 5 minutes 6379/tcp, 0.0.0.0:7001->7001/tcp redis1

#node2
[root@node226 redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07201fab4202 redis:latest "docker-entrypoint.s..." 21 seconds ago Up 20 seconds 6379/tcp, 0.0.0.0:27002->27002/tcp   redis27002
ad247183f7ce redis:latest "d

6. redis の状態を確認する

[root@node187 redis1]# docker exec -it redis1 bash   
# master container query cluster status
root@e0fcaafbb45a:/data# redis-cli -a aAzhjy@123 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:7001> info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.51.226,port=7002,state=online,offset=670505,lag=1
slave1:ip=192.168.51.236,port=7003,state=online,offset=670791,lag=1
master_replid:705a47c71c1c661af4e08b1861b800652ec932e8
master_replid2:000000000000000000000000000000000000000000
master_repl_offset:670791
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:670791

7. セントリーモニタリングの表示

[root@node187 redis1]# docker exec -it redis27001 bash
root@30d656aaceab:/data# redis-cli -p 27001

# view the cluster master library
127.0.0.1:27001> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.51.187"
 5) "port"
 6) "7001"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"

# View cluster slave library
127.0.0.1:27001> sentinel slaves mymaster
1) 1) "name"
    2) "192.168.51.226:7002"
    3) "ip"
    4) "192.168.51.226"
    5) "port"
    6) "7002"
2) 1) "name"
    2) "192.168.51.236:7003"
    3) "ip"
    4) "192.168.51.236"
    5) "port"
    6) "7003"

8. プロジェクトでアクセスを設定する

9. クライアントアクセスによる表示

IV. Redisビジュアルインターフェースのインストール

1. データベースredis-managerの作成

ノード2のmysqlデータベースにredis-managerというデータベースを作成し、redisクラスタの情報を格納します。

2. redis-managerのインストール

sudo docker run -d --name redis-manager \
-p 8048:8182 \
-e DATASOURCE_URL='jdbc:mysql://192.168.51.226:3306/redis-manager?characterEncoding=UTF-8&useUnicode=true&serverTimezone= Asia/Shanghai' \
-e DATASOURCE_USERNAME='root' \
-e DATASOURCE_PASSWORD='aAzhjy@123' \
reasonduan/redis-manager

3. クラスタの状態を確認する

Address: http://192.168.51.226:8048

アカウントパスワード: admin/admin

V. テスト

1. redisサービスの停止