场景

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

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

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

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

注:

博客:
霸道流氓气质

实现

1、创建自定义网络

docker network create redis_net --subnet 192.138.0.0/16
  • 1.

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

docker network inspect redis_net
  • 1.

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

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

done代表循环结束。

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

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

3、拉取redis镜像

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

redis:5.0.9-alpine3.11

所以事先将其拉取到本地

docker pull redis:5.0.9-alpine3.11
  • 1.

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

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

启动成功后可以通过

docker ps
  • 1.

验证

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

5、创建集群

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

docker exec -it redis-1 /bin/sh
  • 1.

执行创建集群指令

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
  • 1.

集群创建成功

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

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

6、连接集群

进入redis1并连接集群

redis-cli -c
  • 1.

redis集群后查看集群信息

cluster info
  • 1.

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

redis集群后查看节点信息

cluster nodes
  • 1.

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

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

7、redis集群效果测试演示

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

set a b
  • 1.

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

可见其存储在13上。

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

docker stop redis-3
  • 1.

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

此时再redis-1内再获取a

get a
  • 1.

发现其在14上面

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

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

cluster nodes
  • 1.

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

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

docker start redis-3

cluster nodes
  • 1.
  • 2.
  • 3.

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