一、查看并创建redis网络
- 执行命令查看docker网络情况
docker network ls
结果:
- 如果有多余的相关redis的网络可以使用docker network rm {name}删除指定网络
- 如果没有则创建reids网络
#我这里使用的是指定网络及网关创建的
docker network create redis --subnet 127.18.0.0/16 --gateway 127.18.0.1
#注:docker network create redis
#如果使用这个创建网络系统则会自定给你分配网络但是在后面创建redis容器时会报错(不能使用指定的网络)所以创建不了
结果:再次使用docker network ls命令查看是否创建成功
二、创建redis配置文件
- 执行脚本创建六个redis的配置文件,以下是脚本文件
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 172.18.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
结果:
- 分别到不同的配置文件中是使用vim redis.conf 修改配置文件 ,分别将地址修改成11、12、13、....
三、创建redis容器
分别执行以下命令,可以根据自己的redis配置文件路径进行相应调整
#第一个节点配置命令
docker run -p 6371:6379 -p 16371:16379 --name redis-01 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.11 redis /etc/redis/redis.conf
# 命令参数解释:
# -p 6371:6379 对外端口
# -p 16371:16379 Redis内部通信端口
# -v /mydata/redis/node-1/data:/data 绑定挂载卷(容器内外挂载路径)
# -d 在后台运行容器并打印容器ID
# --net redis 使用自定义redis网络
# --ip 指定IP地址
# redis 指定的redis镜像
#第二个节点配置命令
docker run -p 6372:6379 -p 16372:16379 --name redis-02 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.12 redis /etc/redis/redis.conf
#第三个节点配置命令
docker run -p 6373:6379 -p 16373:16379 --name redis-03 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.13 redis /etc/redis/redis.conf
#第四个节点配置命令
docker run -p 6374:6379 -p 16374:16379 --name redis-04 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.14 redis /etc/redis/redis.conf
#第五个节点配置命令
docker run -p 6375:6379 -p 16375:16379 --name redis-05 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.15 redis /etc/redis/redis.conf
#第六个节点配置命令
docker run -p 6376:6379 -p 16376:16379 --name redis-06 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.18.0.16 redis /etc/redis/redis.conf
结果:此时我们创建的redis容器还是单独的
四、创建redis集群
- 先进入任意一个redis容器中去执行创建集群的命令
docker exec -it redis-01 /bin/sh #进入到redis容器中去
#创建集群
redis-cli --cluster create 172.18.0.11:6379 172.18.0.12:6379 172.18.0.13:6379 172.18.0.14:6379 172.18.0.15:6379 172.18.0.16:6379 --cluster-replicas 1
结果:
六、查看集群
# 进入集群 地址任意一个即可
redis-cli -c -h 172.18.0.11 -p 6379
# 查看集群内节点
cluster nodes
结果:
七、测试redis集群的高可用
先停止点docker-01容器
进入redis中查看集群情况
八、删除集群
先删除docker容器,再删除redis网络
#1.停止运行中的docker容器
docker stop redis-01 redis-02 redis-03 redis-04 redis-05 redis-06
#2.删除docker容器
docker rm redis-01 redis-02 redis-03 redis-04 redis-05 redis-06
#删除redis网络
docker network rm redis