Docker下redisの主従配置+哨兵モード
12471 ワード
1、redisミラーを引く
3つのredisコンテナサービスを開始し、それぞれ6379、6380、6381ポートに使用します.
redisクラスタ構成の開始
1、容器内網のipアドレスを見る
dockerコンテナの内部に入り、現在のredisロール(プライマリまたはセカンダリ)を表示します.
redis-cliコマンドを使用してredis-6380、redis-6381を変更するホストは172.17.0.1:6379です.
redis-6379にスレーブが2つあるかどうかを確認します.connected_slaves:2、はい
センスネル哨兵を配置する
3台のredis容器の内部に入って配置し、容器ルートディレクトリにsentinelを作成する.confファイル
ファイル内容:sentinel monitor mymaster 172.17.0.1 6379 1
表示される場合:bash:vim:command not found
解決:1、apt-get update 2、apt-get install vim
最後に、Redis哨兵を起動します.
観察しやすく、複数のウィンドウを開きます.
Sentinel哨兵の配置が完了した.
5.6、テスト
マスターを閉じる
[tcy@tcy1~]$docker stop ab 54741166 e 1 ab 54741166 e 1このとき、残りの2つのスレーブは、自動的に新しいホストを選出し、ここでは172.17.0.2をホストとする.
172.17.0.2を表示すると、ホストになります.
docker pull daocloud.io/library/redis:latest
3つのredisコンテナサービスを開始し、それぞれ6379、6380、6381ポートに使用します.
621debcbbf7a redis "docker-entrypoint..." 17 hours ago Up 18 seconds 0.0.0.0:6381->6379/tcp slavel1
c0cdc2bb85f2 redis "docker-entrypoint..." 17 hours ago Up 8 seconds 0.0.0.0:6380->6379/tcp slavel
35c141d13c74 redis "docker-entrypoint..." 17 hours ago Up 1 second 0.0.0.0:6379->6379/tcp master
redisクラスタ構成の開始
1、容器内網のipアドレスを見る
docker inspect 35c141d13c74
dockerコンテナの内部に入り、現在のredisロール(プライマリまたはセカンダリ)を表示します.
[root@bogon ~]# docker exec -it 35c141d13c74 /bin/bash
root@35c141d13c74 :/data# redis-cli
127.0.0.1:6379> info replication
role:master
connected_slaves:0
master_replid:d43d1ae8cde6cb084220e18b926aba79e0bb2504
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> quit
root@ab54741166e1:/data# exit
exit
redis-cliコマンドを使用してredis-6380、redis-6381を変更するホストは172.17.0.1:6379です.
[root@tcy1 tcy]# docker exec -it 621debcbbf7a /bin/bash //redis-6380
root@a9fa77adc598:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.1 6379
OK
127.0.0.1:6379> quit
root@a9fa77adc598:/data# exit
exit
[root@tcy1 tcy]# docker exec -it c0cdc2bb85f2 /bin/bash //redis-6381
root@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.1 6379
OK
127.0.0.1:6379> quit
redis-6379にスレーブが2つあるかどうかを確認します.connected_slaves:2、はい
[root@tcy1 tcy]# docker exec -it ab54741166e1 /bin/bash
root@ab54741166e1:/data# redis-cli
127.0.0.1:6379> info replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=378,lag=1
slave1:ip=172.17.0.2,port=6379,state=online,offset=378,lag=0
master_replid:ce193b15cfd57f7dc3ccfbf2a4aef6156b131e6d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:378
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:378
127.0.0.1:6379> quit
root@ab54741166e1:/data# exit
exit
センスネル哨兵を配置する
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 / && touch sentinel.conf
root@a9fa77adc598:/# vim /sentinel.conf
表示される場合:bash:vim:command not found
解決:1、apt-get update 2、apt-get install vim
最後に、Redis哨兵を起動します.
root@a9fa77adc598:/# redis-sentinel /sentinel.conf
342:X 24 Jun 11:37:58.934 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
342:X 24 Jun 11:37:58.957 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=342, just started
342:X 24 Jun 11:37:58.958 # Configuration loaded
342:X 24 Jun 11:37:58.959 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
342:X 24 Jun 11:37:58.959 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
342:X 24 Jun 11:37:58.960 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 342
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
342:X 24 Jun 11:37:59.068 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
342:X 24 Jun 11:37:59.089 # Sentinel ID is dfd5a5bfe1036b1df3395c4ba858329034fc5b7e
342:X 24 Jun 11:37:59.091 # +monitor master mymaster 172.17.0.1 6379 quorum 1
342:X 24 Jun 11:37:59.110 * +slave slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.1 6379
342:X 24 Jun 11:37:59.115 * +slave slave 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.1 6379
342:X 24 Jun 11:39:27.601 * +sentinel sentinel ba9b0d0539d8273edfcbd922fe138f50daa78bbb 172.17.0.2 26379 @ mymaster 172.17.0.1 6379
342:X 24 Jun 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 ab 54741166 e 1 ab 54741166 e 1このとき、残りの2つのスレーブは、自動的に新しいホストを選出し、ここでは172.17.0.2をホストとする.
172.17.0.2を表示すると、ホストになります.
[root@tcy1 /]# docker exec -it 6ee2f2f007e6 /bin/bash
root@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379> info replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=66906,lag=1
master_replid:5a7489c8181ddf0d73d418d30d6a4c8e039198ba
master_replid2:ce193b15cfd57f7dc3ccfbf2a4aef6156b131e6d
master_repl_offset:67041
second_repl_offset:65534
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:85
repl_backlog_histlen:66957
127.0.0.1:6379>