1、环境准备
#关闭防火墙 systemctl stop firewalld #查看防火墙状态 systemctl status firewalld #拉取redis:6.0.8镜像 docker pull redis:6.0.8
2、新建6个docker容器redis实例
docker run -d --name redis-node-1 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis-node-2 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 docker run -d --name redis-node-3 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383 docker run -d --name redis-node-4 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384 docker run -d --name redis-node-5 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
- 命令分步解释
- docker run
- 创建并运行docker容器实例
- --name redis-node-6
- 容器名字
- --net host
- 使用宿主机的IP和端口,默认
- --privileged=true
- 获取宿主机root用户权限
- -v /data/redis/share/redis-node-6:/data
- 容器卷,宿主机地址:docker内部地址
- redis:6.0.8
- redis镜像和版本号
- --cluster-enabled yes
- 开启redis集群
- --appendonly yes
- 开启持久化
- --port 6386
- redis端口号
3、进入容器构建6台机器构建主从集群关系
#进入容器 docker exec -it redis-node-1 /bin/bash #构建关系 redis-cli --cluster create 192.168.111.99:6381 192.168.111.99:6382 192.168.111.99:6383 192.168.111.99:6384 192.168.111.99:6385 192.168.111.99:6386 --cluster-replicas 1
4、登录某个阶段,查看集群和节点状态
#进入某个阶段 docker exec -it redis-node-6 /bin/bash
#登录redis
redis-cli -p 6386 #查看集群状态 cluster info #查看节点状态 cluster nodes
5、主从容错切换迁移
#进入reidis容器 docker exec -it redis-node-6 /bin/bash redis-cli --cluster check 192.168.111.99:6386
主从关系为1-4,2-5,3-6
****node1宕机,node4成为新的master
docker stop redis-node-1 docker exec -it redis-node-2 /bin/bash redis-cli -p 6382 -c cluster nodes
****node1恢复,node1成为slave
docker start redis-node-1 cluster nodes
6、集群主从扩容
#新增两台主机 docker run -d --name redis-node-7 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 docker run -d --name redis-node-8 --net host --privileged=true -v /Users/zhaoshuzhan/data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388 #查看状态 docker ps #进入容器内部 docker exec -it redis-node-7 /bin/bash #将新增节点6387作为master节点加入原集群 redis-cli --cluster add-node 192.168.111.99:6387 192.168.111.99:6381 #查看状态 redis-cli --cluster check 192.168.111.99:6381
#重新分配槽位 redis-cli --cluster reshard 192.168.111.99:6381 # redis-cli --cluster check 192.168.111.99:6381 #从节点加入主节点 redis-cli --cluster add-node 192.168.111.99:6388 192.168.111.99:6387 --cluster-slave --cluster-master-id 5ca30828ee3e2d671cfbc55010fdfd64b56ee125 #查看状态
redis-cli --cluster check 192.168.111.99:6381
7、集群主从缩容
#删除从节点 redis-cli --cluster del-node 192.168.111.99:6388 0b9640d53d468288b6ec55d62ed4d7948c280329 # redis-cli --cluster check 192.168.111.99:6381 #请空主节点槽位,重新分配 redis-cli --cluster reshard 192.168.111.99:6381 #删除主节点 redis-cli --cluster del-node 192.168.111.99:6387 5ca30828ee3e2d671cfbc55010fdfd64b56ee125