【前提】:docker安装了redis:6.0.8镜像
关闭防火墙+启动 docker 后台服务
systemctl start docker
docker run -d --name redis-node-1 --net host --privileged=true -v /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 /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 /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 /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 /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 /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
docker exec -it redis-node-1 /bin/bash
构建主从关系
//注意,进入 docker 容器后才能执行一下命令,且 注意自己的真实 IP 地址
redis-cli --cluster create 192.168.3.15:6381 192.168.3.15:6382 192.168.3.15:6383 192.168.3.15:6384 192.168.3.15:6385 192.168.3.15:6386 --cluster-replicas 1
--cluster-replicas 1 表示为每个 master 创建一个slave 节点
一切 OK 的话,3 主 3 从搞定。对应关系为【1-4,2-5,3-6 】
链接进入 6381 作为切入点,查看节点状态
redis-cli -p 6381
cluster info
cluster nodes
对6381新增一个key
【报错原因】:此时不能通过单机版进入操作数据,要通过集群方式。
防止路由失效加参数-c,并新增一个 key
加入参数-c,优化路由
redis-cli -p 6381 -c
查看集群信息
redis-cli --cluster check 192.168.3.15:6381
主 6381 和从机切换,先停止主机 6381, 再从6382 (redis-node-2) 进入, 查看查看节点状态
docker stop redis-node-1
docker exec -it redis-node-2 /bin/bash
redis-cli -p 6382 -c
cluster nodes
先还原之前的 3 主 3 从
先启动:docker start redis-node-1
重启redis-node-1发现,6381变成了slave,6384依旧是master。
再停止:docker stop redis-node-4
再启动:docker start redis-node-4
6381变成了*master*,6384变成了*slave,和最初的一样。*
1、新建 6387、6388 两个节点+新建后启动+查看是否 8 节点
docker run -d --name redis-node-7 --net host --privileged=true -v /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 /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
docker ps
2、进入 6387 容器实例内部
docker exec -it redis-node-7 /bin/bash
3、将新增的 6387 节点(空槽号)作为 master 节点加入原集群
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli --cluster add-node 192.168.3.15:6387 192.168.3.15:6381
4、检查集群情况第 1 次(加入了,但是没有分配槽位)
redis-cli --cluster check 192.168.3.15:6381
5、重新分派槽号(reshard )
redis-cli --cluster reshard 192.168.3.15:6381
6、检查集群情况第 2 次
redis-cli --cluster check 192.168.3.15:6381
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387。
7、为主节点 6387 分配从节点 6388
命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点IDredis-cli --cluster add-node 192.168.3.15:6388 192.168.3.15:6387 --cluster-slave --cluster-master-id 890a8bf03ebf284b3f969686be3005d4217753e2
8、检查集群情况第 3 次
redis-cli --cluster check 192.168.3.15:6381
目的:6387 和 6388 下线
1、检查集群情况获得 6388 的节点 ID
redis-cli --cluster check 192.168.3.15:6382
2、从集群中将 4 号从节点 6388 删除(del-node)
命令:redis-cli --cluster del-node ip: 从机端口6388 节点ID
redis-cli --cluster del-node 192.168.3.15:6388 7ee9b3ccdc344ed7b497732704f01119614872d8
3、检查集群情况第一次(还剩4主3从)
redis-cli --cluster check 192.168.3.15:6381
4、将 6387 的槽号清空,重新分配,本例将清出来的槽号都给 6381
redis-cli --cluster reshard 192.168.3.15:6381
5、检查集群情况第二次
redis-cli --cluster check 192.168.3.15:6381
4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,直接输入4096一锅端
6、将 6387 删除
命令:redis-cli --cluster del-node ip:端口 6387 节点 ID
redis-cli --cluster del-node 192.168.3.15:6387 890a8bf03ebf284b3f969686be3005d4217753e2
7、检查集群情况第三次
redis-cli --cluster check 192.168.3.15:6381
还剩下3主3从。