场景
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