Docker集群部署:redis

本文详细介绍了如何使用Docker部署Redis集群的过程,并演示了集群的高可用性特性,包括配置步骤、集群创建及宕机测试。

1.部署Redis集群

1.1创建属于redis的网卡

[root@localhost ~]# docker network create --driver bridge --subnet 192.169.10.0/24 --gateway 192.169.10.1 redis  
5bcb076e56e1d452ce8f3e7bb7fa731a86ee488cbc462a5195efa2f1ed1a469a

1.2 下载Redis

 下载6.2版本的

[root@localhost ~]# docker pull redis:6.2
6.2: Pulling from library/redis
33847f680f63: Downloading [=======>                                           ]  4.172MB/27.15MB
26a746039521: Download complete 
18d87da94363: Download complete 
5e118a708802: Downloading [===============================>                   ]  6.433MB/10.12MB
ecf0dbe7c357: Download complete 
46f280ba52da: Download complete 

1.3 安装6部redis

1.3.1 挂载磁盘

我们先挂载好6部redis在主机上对应的磁盘

for port in $(seq 1 6);\
do \
mkdir -p /redis-data/data-${port}/conf
touch /redis-data/data-${port}/conf/redis.conf
cat << EOF >> /redis-data/data-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.169.10.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

我们查看根目录下的文件:

 

1.3.2 创建redis容器

docker run -p 6371:6379 -p 16671:16379 --name redis-6371 -v /redis-data/data-1:/data  -v /redis-data/data-1/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.11 redis:6.2 redis-server /etc/redis/redis.conf 

docker run -p 6372:6379 -p 16672:16379 --name redis-6372 -v /redis-data/data-2:/data  -v /redis-data/data-2/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.12 redis:6.2 redis-server /etc/redis/redis.conf 

docker run -p 6373:6379 -p 16673:16379 --name redis-6373 -v /redis-data/data-3:/data  -v /redis-data/data-3/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.13 redis:6.2 redis-server /etc/redis/redis.conf 

docker run -p 6374:6379 -p 16674:16379 --name redis-6374 -v /redis-data/data-4:/data  -v /redis-data/data-4/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.14 redis:6.2 redis-server /etc/redis/redis.conf 

docker run -p 6375:6379 -p 16675:16379 --name redis-6375 -v /redis-data/data-5:/data  -v /redis-data/data-5/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.15 redis:6.2 redis-server /etc/redis/redis.conf 

docker run -p 6376:6379 -p 16676:16379 --name redis-6376 -v /redis-data/data-6:/data  -v /redis-data/data-6/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.169.10.16 redis:6.2 redis-server /etc/redis/redis.conf 

这里我就直接手写了,还可以通过for循环写下来,我们查看一下运行的容器:

2.创建Redis集群

 然后我们随便进入一个redis

[root@localhost conf]# docker exec -it redis-6371 /bin/bash

配置主从复制的集群(都是一主一从的对应):

root@769b59ac36ac:/data# redis-cli --cluster create 192.169.10.11:6379 192.169.10.12:6379 192.169.10.13:6379 192.169.10.14:6379 192.169.10.15:6379 192.169.10.16:6379 --cluster-replicas 1

随后在弹出的选项中选择yes

root@769b59ac36ac:/data# redis-cli --cluster create 192.169.10.11:6379 192.169.10.12:6379 192.169.10.13:6379 192.169.10.14:6379 192.169.10.15:6379 192.169.10.16:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.169.10.15:6379 to 192.169.10.11:6379
Adding replica 192.169.10.16:6379 to 192.169.10.12:6379
Adding replica 192.169.10.14:6379 to 192.169.10.13:6379
M: defd31277b7c9bd979fa239222d2349f903c69be 192.169.10.11:6379
   slots:[0-5460] (5461 slots) master
M: 6313b8a6a0d8cd76bcc569920b6be1903ddf260c 192.169.10.12:6379
   slots:[5461-10922] (5462 slots) master
M: c0d0dd69c9356cf5258714437ee79c640b2c0869 192.169.10.13:6379
   slots:[10923-16383] (5461 slots) master
S: 51a866ef8d369a476aa73d5a9be0568fd6b1044b 192.169.10.14:6379
   replicates c0d0dd69c9356cf5258714437ee79c640b2c0869
S: 7542939547f9118cd891fa62daa16222c2d68a0b 192.169.10.15:6379
   replicates defd31277b7c9bd979fa239222d2349f903c69be
S: fda819b80c2e62b51b85dfe1b12f229c56d0ff4a 192.169.10.16:6379
   replicates 6313b8a6a0d8cd76bcc569920b6be1903ddf260c
Can I set the above configuration? (type 'yes' to accept): yesyes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.169.10.11:6379)
M: defd31277b7c9bd979fa239222d2349f903c69be 192.169.10.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 7542939547f9118cd891fa62daa16222c2d68a0b 192.169.10.15:6379
   slots: (0 slots) slave
   replicates defd31277b7c9bd979fa239222d2349f903c69be
M: 6313b8a6a0d8cd76bcc569920b6be1903ddf260c 192.169.10.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: fda819b80c2e62b51b85dfe1b12f229c56d0ff4a 192.169.10.16:6379
   slots: (0 slots) slave
   replicates 6313b8a6a0d8cd76bcc569920b6be1903ddf260c
S: 51a866ef8d369a476aa73d5a9be0568fd6b1044b 192.169.10.14:6379
   slots: (0 slots) slave
   replicates c0d0dd69c9356cf5258714437ee79c640b2c0869
M: c0d0dd69c9356cf5258714437ee79c640b2c0869 192.169.10.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

随后输入:

root@769b59ac36ac:/data# redis-cli -c

进入redis数据库,这里的 -c 表示已集群的形式进入

127.0.0.1:6379> set k1 v1
-> Redirected to slot [12706] located at 192.169.10.13:6379
OK
192.169.10.13:6379> set k2 v2
-> Redirected to slot [449] located at 192.169.10.11:6379
OK
192.169.10.11:6379> 

我们发现的是:

 每次插入成功后,会跳转到插入成功的数据库中。

3.集群宕机测试

我们现在把

 这个容器停止,形成宕机。

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
5a7966dbb538   redis:6.2   "docker-entrypoint.s…"   40 minutes ago   Up 40 minutes   0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16676->16379/tcp, :::16676->16379/tcp   redis-6376
b816f03d847d   redis:6.2   "docker-entrypoint.s…"   41 minutes ago   Up 41 minutes   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16675->16379/tcp, :::16675->16379/tcp   redis-6375
f9f22f0ce0e2   redis:6.2   "docker-entrypoint.s…"   41 minutes ago   Up 41 minutes   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16674->16379/tcp, :::16674->16379/tcp   redis-6374
69c312275e80   redis:6.2   "docker-entrypoint.s…"   41 minutes ago   Up 41 minutes   0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16673->16379/tcp, :::16673->16379/tcp   redis-6373
270f32700a87   redis:6.2   "docker-entrypoint.s…"   43 minutes ago   Up 43 minutes   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16672->16379/tcp, :::16672->16379/tcp   redis-6372
769b59ac36ac   redis:6.2   "docker-entrypoint.s…"   44 minutes ago   Up 44 minutes   0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16671->16379/tcp, :::16671->16379/tcp   redis-6371
[root@localhost ~]# docker stop redis-6371
redis-6371
[root@localhost ~]# 

我们查看一下所有的主从节点信息

127.0.0.1:6379> CLUSTER nodes
c0d0dd69c9356cf5258714437ee79c640b2c0869 192.169.10.13:6379@16379 master - 0 1627893832000 3 connected 10923-16383
6313b8a6a0d8cd76bcc569920b6be1903ddf260c 192.169.10.12:6379@16379 myself,master - 0 1627893831000 2 connected 5461-10922
51a866ef8d369a476aa73d5a9be0568fd6b1044b 192.169.10.14:6379@16379 slave c0d0dd69c9356cf5258714437ee79c640b2c0869 0 1627893832864 3 connected
7542939547f9118cd891fa62daa16222c2d68a0b 192.169.10.15:6379@16379 master - 0 1627893831116 7 connected 0-5460
fda819b80c2e62b51b85dfe1b12f229c56d0ff4a 192.169.10.16:6379@16379 slave 6313b8a6a0d8cd76bcc569920b6be1903ddf260c 0 1627893832000 2 connected
defd31277b7c9bd979fa239222d2349f903c69be 192.169.10.11:6379@16379 master,fail - 1627893771513 1627893769000 1 connected

我们可以看到最后一个 defd31277b7c9bd979fa239222d2349f903c69be 192.169.10.11:6379@16379 master,fail - 1627893771513 1627893769000 1 connected 连接失败了,也就是刚刚被我们宕机的redis。

那么刚刚插入在这个redis里面的k2还能查得到吗?

127.0.0.1:6379> get k2
-> Redirected to slot [449] located at 192.169.10.15:6379
"v2"

我们可以看到,k2 从192.169.10.15:6379中拿取出来了,这就是我们的高可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值