笔记 Docker 安装Redis(五)(3) Redis集群 3主3从

1. 关闭防火墙 并启动docker后台服务

2. 新建6个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 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.进入容器redis-node-1,并为6台机器构建集群关系

docker exec -it redis-node-1 /bin/bash

构建主从关系,注意,进入docker容器后才能执行以下命令,且注意自己的真实IP地址

redis-cli --cluster create 192.168.1.200:6381 192.168.1.200:6382 192.168.1.200:6383 192.168.1.200:6384 192.168.1.200:6385 192.168.1.200:6386 --cluster-replicas 1

--cluster-replicas 1 表示为每个master创建一个slave节点

root@hadoop104:/data# redis-cli --cluster create 192.168.1.200:6381 192.168.1.200:6382 192.168.1.200:6383 192.168.1.200:6384 192.168.1.200:6385 192.168.1.200:6386 --cluster-replicas 1

Performing hash slots allocation on 6 nodes...Master[0] -> Slots 0 - 5460Master[1] -> Slots 5461 - 10922Master[2] -> Slots 10923 - 16383Adding replica 192.168.1.200:6385 to 192.168.1.200:6381Adding replica 192.168.1.200:6386 to 192.168.1.200:6382Adding replica 192.168.1.200:6384 to 192.168.1.200:6383Trying to optimize slaves allocation for anti-affinity[WARNING] Some slaves are in the same host as their masterM: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots:[0-5460] (5461 slots) masterM: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[5461-10922] (5462 slots) masterM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[10923-16383] (5461 slots) masterS: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384replicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffS: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385replicates 5b76c1b04a71757abaeecdb213300aa299e8ba4bS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386replicates 8a1f7492389640911da46ca70524a5e2225b2735Can I set the above configuration? (type 'yes' to accept): yesNodes configuration updatedAssign a different config epoch to each nodeSending CLUSTER MEET messages to join the clusterWaiting for the cluster to join..Performing Cluster Check (using node 192.168.1.200:6381)M: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots:[0-5460] (5461 slots) master1 additional replica(s)M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735S: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots: (0 slots) slavereplicates 5b76c1b04a71757abaeecdb213300aa299e8ba4bS: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.root@hadoop104:/data#

4.查看集群信息:

4.1 cluster info

root@hadoop104:/data# redis-cli -p 6381127.0.0.1:6381> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:2380cluster_stats_messages_pong_sent:2319cluster_stats_messages_sent:4699cluster_stats_messages_ping_received:2314cluster_stats_messages_pong_received:2380cluster_stats_messages_meet_received:5cluster_stats_messages_received:4699127.0.0.1:6381>

4.2 cluster nodes

127.0.0.1:6381> cluster nodes058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383@16383 master - 0 1672111490000 3 connected 10923-1638366958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386@16386 slave 8a1f7492389640911da46ca70524a5e2225b2735 0 1672111489000 2 connectedd719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385@16385 slave 5b76c1b04a71757abaeecdb213300aa299e8ba4b 0 1672111491850 1 connected1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384@16384 slave 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 0 1672111491000 3 connected8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382@16382 master - 0 1672111488000 2 connected 5461-109225b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381@16381 myself,master - 0 1672111490000 1 connected 0-5460

上述主从关系系统自动分配

5. 主从容错切换迁移案例

5.1 数据读写存储

root@hadoop104:/data# redis-cli -p 6381

127.0.0.1:6381> keys *(empty array)127.0.0.1:6381> set k1 v1(error) MOVED 12706 192.168.1.200:6383

由于使用redis-cli -p 6381链接的是单机环境,set k1 v1 计算出的槽位12706 大于【5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381@16381 myself,master - 0 1672111490000 1 connected 0-5460】 5460的槽位,所有报错,需要连接集群环境进行存储。防止路由失效增加参数-c

root@hadoop104:/data# redis-cli -p 6381 -c

127.0.0.1:6381> flushallOK

127.0.0.1:6381> set k1 v1-> Redirected to slot [12706] located at 192.168.1.200:6383OK

192.168.1.200:6383> set k2 v2-> Redirected to slot [449] located at 192.168.1.200:6381OK192.168.1.200:6381> set k3 v3OK192.168.1.200:6381> set k4 v4-> Redirected to slot [8455] located at 192.168.1.200:6382OK192.168.1.200:6382>

5.1.1 查看集群信息

redis-cli --cluster check 192.168.1.200:6381

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6381 (5b76c1b0...) -> 2 keys | 5461 slots | 1 slaves.192.168.1.200:6383 (058e0a80...) -> 1 keys | 5461 slots | 1 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 5462 slots | 1 slaves.[OK] 4 keys in 3 mas

ters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)M: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots:[0-5460] (5461 slots) master1 additional replica(s)M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735S: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots: (0 slots) slavereplicates 5b76c1b04a71757abaeecdb213300aa299e8ba4bS: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

5.1.2 链接2号机获取数据

[root@hadoop104 ~]# docker exec -it redis-node-2 /bin/bashroot@hadoop104:/data# redis-cli -p 6382 -c127.0.0.1:6382> get k1-> Redirected to slot [12706] located at 192.168.1.200:6383"v1"192.168.1.200:6383> get k2-> Redirected to slot [449] located at 192.168.1.200:6381"v2"192.168.1.200:6381> get k3"v3"192.168.1.200:6381> get k4-> Redirected to slot [8455] located at 192.168.1.200:6382"v4"192.168.1.200:6382>

5.2 容错切换迁移

将redis-node-1 停机,停机前查看集群nodes信息

192.168.1.200:6382> cluster nodes1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384@16384 slave 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 0 1672143589842 3 connected8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382@16382 myself,master - 0 1672143589000 2 connected 5461-10922d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385@16385 slave 5b76c1b04a71757abaeecdb213300aa299e8ba4b 0 1672143590862 1 connected5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381@16381 master - 0 1672143588000 1 connected 0-5460058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383@16383 master - 0 1672143588000 3 connected 10923-1638366958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386@16386 slave 8a1f7492389640911da46ca70524a5e2225b2735 0 1672143588819 2 connected

[root@hadoop104 ~]# docker stop redis-node-1redis-node-1[root@hadoop104 ~]# docker exec -it redis-node-2

root@hadoop104:/data# redis-cli -p 6382 -c

127.0.0.1:6382> cluster nodes1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384@16384 slave 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 0 1672143843904 3 connected8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382@16382 myself,master - 0 1672143842000 2 connected 5461-10922d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385@16385 master - 0 1672143842886 7 connected 0-54605b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381@16381 master,fail - 1672143625402 1672143621342 1 disconnected058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383@16383 master - 0 1672143841856 3 connected 10923-1638366958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386@16386 slave 8a1f7492389640911da46ca70524a5e2225b2735 0 1672143841000 2 connected

redis-node-1 6381停机后, 原来192.168.1.200:6385@16385 slave 变为了192.168.1.200:6385@16385 master

127.0.0.1:6382> get k1-> Redirected to slot [12706] located at 192.168.1.200:6383"v1"192.168.1.200:6383> get k2-> Redirected to slot [449] located at 192.168.1.200:6385"v2"192.168.1.200:6385> get k3"v3"192.168.1.200:6383> get k4-> Redirected to slot [8455] located at 192.168.1.200:6382"v4"192.168.1.200:6382>

取值正常

再将redis-node-1启动,查看主从状态

192.168.1.200:6382> cluster nodes1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384@16384 slave 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 0 1672144450000 3 connected8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382@16382 myself,master - 0 1672144448000 2 connected 5461-10922d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385@16385 master - 0 1672144451354 7 connected 0-54605b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381@16381 slave d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 0 1672144450338 7 connected058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383@16383 master - 0 1672144449000 3 connected 10923-1638366958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386@16386 slave 8a1f7492389640911da46ca70524a5e2225b2735 0 1672144449326 2 connected

可以看到redis-node-1 启动后,192.168.1.200:6381@16381 slave 变为了从机

M S

2 6

3 4

5 1

5.3主从扩容

5.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

[root@hadoop104 redis]# 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 638751a257202d395f1fb7992e9b13dfabffdc0ca199acc4455b5eebb2971a76aa8a[root@hadoop104 redis]# [root@hadoop104 redis]# 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 6388c6b8b761ae9261bb57ccd054a987b9f913bfdd82d78a3d156b0a1d34ca6e271b[root@hadoop104 redis]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc6b8b761ae92 redis:6.0.8 "docker-entrypoint.s…" 5 seconds ago Up 4 seconds redis-node-851a257202d39 redis:6.0.8 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds redis-node-70f23182b0074 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 4 days redis-node-6ece7908e6c44 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 5 days redis-node-5af0d99c74f99 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 4 days redis-node-48ffd9d629d02 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 5 days redis-node-3d6aa482666e5 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 4 days redis-node-289ab3584f0b9 redis:6.0.8 "docker-entrypoint.s…" 5 days ago Up 4 days redis-node-1

5.3.2 进入6387容器内部,将新增的6387节点(空槽号)作为master节点加入原集群

[root@hadoop104 ~]# docker exec -it redis-node-7 /bin/bash

将新的6387作为master节点加入集群:redis-cli --cluster add-node 新节点实际IP:6387 原集群节点IP:6381

6387 作为master新增节点

6381 原集群节点,相当与6387通过6381找到集群入口

root@hadoop104:/data# redis-cli --cluster add-node 192.168.1.200:6387 192.168.1.200:6381

Adding node 192.168.1.200:6387 to cluster 192.168.1.200:6381Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[0-5460] (5461 slots) master1 additional replica(s)S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.Send CLUSTER MEET to node 192.168.1.200:6387 to make it join the cluster.[OK] New node added correctly.
5.3.3 检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6383 (058e0a80...) -> 1 keys | 5461 slots | 1 slaves.192.168.1.200:6385 (d719ba89...) -> 2 keys | 5461 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 0 keys | 0 slots | 0 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 5462 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[0-5460] (5461 slots) master1 additional replica(s)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots: (0 slots) masterS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.
5.3.4 重新分配槽号

命令:redis-cli --cluster reshard 集群IP:端口号,相当于都集群重新分配哈希槽号

redis-cli --cluster reshard 192.168.1.200:6381

How many slots do you want to move(from 1 to 16384) ? 4096

算法为:总槽位数/master节点数量,即16384/4 = 4096

What is the reciving node ID? 正在接收哈希槽位的Node ID是什么,找到新增节点6387对应的node id

此处提示你是否想要处理提议的重新分片计划? 输入yes

5.3.5 重新检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6385 (d719ba89...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 1 keys | 4096 slots | 0 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) masterS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

新增的6387节点的槽位是由原集群中各主节点已分配的槽位段中,从起始号段开始分别提取一部分号段组成4096号段槽位给新增6387号段,即如上状态中(M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master),槽位号段是由[0-1364],[5461-6826],[10923-12287] (4096 slots)三个新区间组成的。

如果全部重新分配号段成本太高,所以由原来集群中三个主节点各提取一部分给新增节点

5.3.6 为新增主节点6387分配从节点

命令: redis-cli --cluster add-node 新slave节点ip:新slave节点端口 新master节点ip:新master节点端口 --cluster-slave --cluster-master-id 新master节点ID

root@hadoop104:/data# redis-cli --cluster add-node 192.168.1.200:6388 192.168.1.200:6387 --cluster-slave --cluster-master-id 2170cb7ba5e338975f13b53168786e87773c4b95

Adding node 192.168.1.200:6388 to cluster 192.168.1.200:6387Performing Cluster Check (using node 192.168.1.200:6387)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) masterS: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dff[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.Send CLUSTER MEET to node 192.168.1.200:6388 to make it join the cluster.Waiting for the cluster to join
Configure node as replica of 192.168.1.200:6387.[OK] New node added correctly.

重新检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6385 (d719ba89...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master1 additional replica(s)S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735S: abb3a3646ef21cff6db924cfbdf458a93c179742 192.168.1.200:6388slots: (0 slots) slavereplicates 2170cb7ba5e338975f13b53168786e87773c4b95M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

5.4 主从缩容

清除节点顺序,1.先清除从节点6388,2.清空6387的槽号,并重新分配 3.再删除6387 4.恢复成3主3从

5.4.1 第一步 检查集群状态,查找出6388节点ID

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6385 (d719ba89...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master1 additional replica(s)S: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735S: abb3a3646ef21cff6db924cfbdf458a93c179742 192.168.1.200:6388slots: (0 slots) slavereplicates 2170cb7ba5e338975f13b53168786e87773c4b95M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

6388从节点ID:abb3a3646ef21cff6db924cfbdf458a93c179742

5.4.2 第二步 将6388从集群中删除

命令:redis-cli --cluster del-node 要删除的从节点IP:从节点端口 从节点6388节点ID

root@hadoop104:/data# redis-cli --cluster del-node 192.168.1.200:6388 abb3a3646ef21cff6db924cfbdf458a93c179742

Removing node abb3a3646ef21cff6db924cfbdf458a93c179742 from cluster 192.168.1.200:6388Sending CLUSTER FORGET messages to the cluster...Sending CLUSTER RESET SOFT to the deleted node.

重新检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6381192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6385 (d719ba89...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 1 keys | 4096 slots | 0 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6381)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffM: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) masterS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.
5.4.3 将6387的槽号清空,重新清空,本例将清出来的槽号都给6381

执行命令:redis-cli --cluster reshard 192.168.1.200:6381

以上使用6381目的是以6381节点为切入点操作集群

root@hadoop104:/data# redis-cli --cluster reshard 192.168.1.200:6385

Performing Cluster Check (using node 192.168.1.200:6385)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[1365-5460] (4096 slots) master1 additional replica(s)M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) masterS: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.How many slots do you want to move (from 1 to 16384)? 4096What is the receiving node ID? d719ba89ecd348f6f0d6baaf1f6685737a9a4d06Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.Source node #1: 2170cb7ba5e338975f13b53168786e87773c4b95Source node #2: done
Moving slot 12277 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12278 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12279 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12280 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12281 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12282 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12283 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12284 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12285 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12286 from 2170cb7ba5e338975f13b53168786e87773c4b95Moving slot 12287 from 2170cb7ba5e338975f13b53168786e87773c4b95Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 12277 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12278 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12279 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12280 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12281 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12282 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12283 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12284 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12285 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12286 from 192.168.1.200:6387 to 192.168.1.200:6385: Moving slot 12287 from 192.168.1.200:6387 to 192.168.1.200:6385:

How many slots do you want to move (from 1 to 16384)?

提示需要移动多少个槽位?计算方法 16384/主节点数量,即16384/4=4096

What is the receiving node ID? d719ba89ecd348f6f0d6baaf1f6685737a9a4d06

由6385主节点接收空闲出来的槽位

Source node #1: 2170cb7ba5e338975f13b53168786e87773c4b95

告知要删除的节点ID,此处删除6387的节点,从节点信息中找到6387对应的节点ID为2170cb7ba5e338975f13b53168786e87773c4b95

上述执行完后,再次检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6385192.168.1.200:6385 (d719ba89...) -> 2 keys | 8192 slots | 1 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6387 (2170cb7b...) -> 0 keys | 0 slots | 0 slaves.192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 4 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6385)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06M: 2170cb7ba5e338975f13b53168786e87773c4b95 192.168.1.200:6387slots: (0 slots) masterS: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

4096个槽位都指给了6385,6385总计8192个槽位,,并且6387变为【192.168.1.200:6387 (2170cb7b...) -> 0 keys | 0 slots | 0 slaves.】

5.4.4 将6387节点从集群中删除

命令:redis-cli --cluster del-node 节点机器IP:节点机器端口 节点ID

redis-cli --cluster del-node 192.168.1.200:6387 2170cb7ba5e338975f13b53168786e87773c4b95

root@hadoop104:/data# redis-cli --cluster del-node 192.168.1.200:6387 2170cb7ba5e338975f13b53168786e87773c4b95

Removing node 2170cb7ba5e338975f13b53168786e87773c4b95 from cluster 192.168.1.200:6387Sending CLUSTER FORGET messages to the cluster...Sending CLUSTER RESET SOFT to the deleted node.root@hadoop104:/data#

重新检查集群状态

root@hadoop104:/data# redis-cli --cluster check 192.168.1.200:6385192.168.1.200:6385 (d719ba89...) -> 2 keys | 8192 slots | 1 slaves.192.168.1.200:6382 (8a1f7492...) -> 1 keys | 4096 slots | 1 slaves.192.168.1.200:6383 (058e0a80...) -> 1 keys | 4096 slots | 1 slaves.[OK] 4 keys in 3 masters.0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.1.200:6385)M: d719ba89ecd348f6f0d6baaf1f6685737a9a4d06 192.168.1.200:6385slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)M: 8a1f7492389640911da46ca70524a5e2225b2735 192.168.1.200:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)S: 5b76c1b04a71757abaeecdb213300aa299e8ba4b 192.168.1.200:6381slots: (0 slots) slavereplicates d719ba89ecd348f6f0d6baaf1f6685737a9a4d06S: 1b5272a30a3d71fc5d82306db1297dda8336bc30 192.168.1.200:6384slots: (0 slots) slavereplicates 058e0a8020ebb5b2999d6cb7a27eda83adc22dffS: 66958ffa364d61f014d9733a1e99d8252a3aed3c 192.168.1.200:6386slots: (0 slots) slavereplicates 8a1f7492389640911da46ca70524a5e2225b2735M: 058e0a8020ebb5b2999d6cb7a27eda83adc22dff 192.168.1.200:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...[OK] All 16384 slots covered.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值