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