docker——部署Redis集群
Redis集群构图
当有主机不可用时,对应从机替代成为主机。
创建redis网络
docker network create redis --subnet 172.38.0.0/16
redis网络创建成功:
查看redis网络的配置信息:
docker network inspect redis
通过脚本编写六个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.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
执行上面的脚本后,查看创建的 redis 配置文件(以第一个redis服务为例):
启动六个 redis 容器服务
启动redis-1容器服务:
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动redis-2容器服务:
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动redis-3容器服务:
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动redis-4容器服务:
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动redis-5容器服务:
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动redis-6容器服务:
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动成功后,查看上面六个启动的redis容器服务:
进入redis容器,创建集群
进入redis容器,随便进入一个
docker exec -it redis-1 /bin/sh
里面有aof持久化和redis节点的配置文件。
创建集群:
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --c
luster-replicas 1
查看redis集群信息和节点信息
集群信息:
节点信息:可以看到哪个是主节点哪个是从节点
测试集群的高可用
往redis中设置值:
set name wanli
可以看到这个值设置到redis-2服务中了,并且redis-2是主节点。
停止redis-2容器服务,模拟主节点宕机的情况:
docker stop redis-2
尝试获得刚刚设置的值:
可以看到主机 redis-2宕机后,从它的从机 redis-6 获取到了刚刚设置的值,这样就算主机服务不可用了,从机也能提供服务变成主机,实现了集群的高可用。
再次查看集群中redis节点的信息,看有什么变化: