Bootstrap

Docker中使用自定义网络方式实现Redis集群部署与测试流程

场景

Docker中Docker网络-理解Docker0与自定义网络的使用示例:

Docker中Docker网络-理解Docker0与自定义网络的使用示例-CSDN博客

参考上面的流程实现自定义网络的实现。

下面记录其应用实例,使用Docker的自定义网络实现redis集群部署。

注:

博客:
霸道流氓气质-CSDN博客

实现

1、创建自定义网络

docker network create redis_net --subnet 192.138.0.0/16

查看下自定义网络确保创建成功,这里名称为redis_net

docker network inspect redis_net

2、使用脚本创建redis的6个配置

for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${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.138.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

注意上面的for循环变量port从1到6,然后依次创建目录,创建文件,并通过EOF指令,将配置项写入到文件中。

done代表循环结束。

新建成功后找一个配置文件进行验证

3、拉取redis镜像

下面启动容器时使用的redis的镜像为

redis:5.0.9-alpine3.11

所以事先将其拉取到本地

docker pull redis:5.0.9-alpine3.11

4、循环启动6个redis容器

使用如下脚本循环启动6个redis的容器

for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis_net --ip 192.138.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done

启动成功后可以通过

docker ps

验证

5、创建集群

进入任意一个docker容器,这里进入redis-1

docker exec -it redis-1 /bin/sh

执行创建集群指令

redis-cli --cluster create 192.138.0.11:6379 192.138.0.12:6379 192.138.0.13:6379 192.138.0.14:6379 192.138.0.15:6379 192.138.0.16:6379 --cluster-replicas 1

集群创建成功

中间会提示确认,输入yes即可。

6、连接集群

进入redis1并连接集群

redis-cli -c

redis集群后查看集群信息

cluster info

redis集群后查看节点信息

cluster nodes

这里可见11、12、13为master,14、15、16为slave。

7、redis集群效果测试演示

当前在redis-1上,设置一个值

set a b

可见其存储在13上。

另起一个ssh连接,停掉redis-3容器

docker stop redis-3

此时再redis-1内再获取a

get a

发现其在14上面

再次获取集群节点信息,发现13已经挂掉,并且14代替了13成为了master

cluster nodes

此时再重新启动13,发现13变成了slave

docker start redis-3

cluster nodes

;