redis集群配置
1、三主三从redis集群配置
1、新建6个docker容器实例
## --cluster-enabled yes 开启redis集群
## --net host 使用宿主机的ip和端口 默认
## --appendonly yes 开启持久化
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
2、进入容器redis-node-1,并为6台机器构建集群关系
docker exec -it redis-node-1 /bin/bash
## --cluster create 构建集群
## --cluster-replicas 1 为每一个master创建一个slave节点
redis-cli --cluster create 192.168.71.100:6381 192.168.71.100:6382 192.168.71.100:6383 192.168.71.100:6384 192.168.71.100:6385 192.168.71.100:6386 --cluster-replicas 1
3、链接进入6381作为切入点,查看集群状态
redis-cli -p 6381
cluster info ## 查看集群信息
cluster nodes ## 本集群节点状态
2、主从容错切换迁移案例
1、数据读写存储
1、启动6台构成的集群,并通过exec进入
2、对6381新增两个key
3、防止路由失效加参数-c并新增两个key
docker exec -it redis-node-1 /bin/bash
## 通过集群方式进入
redis-cli -p 6381 -c
4、查看集群信息
redis-cli --cluster check 192.168.71.100:6381
此时主-从为:6381-6384、6382-6385、6383-6386
2、容错切换迁移
1、主6381和从机切换,先停止主机6381
docker stop redis-node-1
docker exec -it redis-node-2 /bin/bash
redis-cli -p 6382 -c
2、再次查看集群信息
cluster nodes
此时主-从为:6384-null、6382-6385、6383-6386
3、先还原之前的三主三从
docker start redis-nodes-1
4、查看集群状态
cluster nodes
此时主-从为:6384-6381、6382-6385、6383-6386 江湖规矩,你6381走了还想重新上位?凭什么
停止6384重新启动并查看集群状态
docker stop redis-node-4
docker start redis-node-4
cluster nodes
此时主-从为:6381-6384、6382-6385、6383-6386 老大发话了,6381重新上位(为了维持架构)
3、主从扩容案例
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
2、进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
3、将新增的6387节点(空槽号)作为master节点加入原集群
redis-cli --cluster add-node 192.168.71.100:6387 192.168.71.100:6381
拜6381的码头找到组织加入集群
4、检查集群情况第一次
redis-cli --cluster check 192.168.71.100:6381
5、重新分派槽号
redis-cli --cluster reshard 192.168.71.100:6381
6、检查集群情况第二次
redis-cli --cluster check 192.168.71.100:6381
发现不是0-16383重新平均分配,而是每一家匀了一点槽位出来凑成了4096个槽位给6387
7、为主节点6387分配从节点6388
redis-cli --cluster add-node 192.168.71.100:6388 192.168.71.100:6387 --cluster-slave --cluster-master-id c95b22b4ac268b88ebc2a548f314c211dc727835 ## 这个是6387的id
8、检查集群情况第三次
redis-cli --cluster check 192.168.71.100:6382
4、主从缩容案例
1、检查集群情况第一次,获得6388的节点id
redis-cli --cluster check 192.168.71.100:6383
2、将6388删除
redis-cli --cluster del-node 192.168.71.100:6388 eca8b3f62c64a1c816a6ed950e71c45dcc1b2308
3、将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
redis-cli --cluster reshard 192.168.71.100:6381
4、检查集群情况第二次
redis-cli --cluster check 192.168.71.100:6381
5、将6387删除
redis-cli --cluster del-node 192.168.71.100:6387 c95b22b4ac268b88ebc2a548f314c211dc727835
6、检查集群情况第三次
redis-cli --cluster check 192.168.71.100:6381