redis cluster集群添加删除节点

redis不依赖ruby搭建集群

redis不依赖ruby搭建集群!!!

1.添加节点

1.1:重新搭建集群

之前安装的集群有三个节点,每个节点有一备份节点。为了方便测试,将之前的每个redis节点下的dump.rdb 和nodes.conf删掉,重新搭建一个只有三个master的集群(7001,7002,7003)
重新启动三个master节点后重新执行脚本来搭建集群
./redis-trib.rb create --replicas 0 192.168.17.168:7001 192.168.17.168:7002 192.168.17.168:7003

 

1.2:启动7004节点,添加为主节点

1)添加为主节点
redis-trib.rb add-node 192.168.17.168:7004 192.168.17.168:7001
注释:
192.168.17.168:7004是新增的节点
192.168.17.168:7001是集群中任一旧节点

也可通过

./redis-cli -h 192.168.17.168 -p 7004 -c

>cluster meet 192.168.17.168 7001

将192.168.17.168:7004新增为主节点

2)连接集群,执行cluster nodes 查看集群状态

3)显示已经添加到集群中,但是并没有哈希槽,给他分配哈希槽

./redis-trib.rb reshard 192.168.17.168:7001 #这个节点是集群中任一节点都可以,只要能连上就可以

过程:
How many slots do you want to move (from 1 to 16384)? 1000 #输入1000表示要移动1000个哈希槽

What is the receiving node ID? #把这1000个哈希槽给谁呢?输入7004节点对应的id

Source node #1: all #输入all表示从所有的哈希槽拥有者中抽取1000个给7004节点
也可以从固定的节点中拿100个 Source node #1: 339a50df26f4722f14faba2a8fe3cad508059e88 #输入某个节点的id表示 从该节点上拿1000个 给7004这个节点 然后再执行done命令

我们选择all 摁回车会展示分配槽的信息,再输入yes 回车就分配完成了。

redis cluster集群添加删除节点

1.3:启动7005节点,添加为从节点

之前的7004已经添加为master了就不动它了
1)添加为从节点
./redis-trib.rb add-node --slave --master-id 339a50df26f4722f14faba2a8fe3cad508059e88 192.168.17.168:7005 192.168.17.168:7001
注释:
--slave,表示添加的是从节点
--master-id 339a50df26f4722f14faba2a8fe3cad508059e88,主节点的node id,这个id是7001的节点id 表示将新节点添加为7001的slave
192.168.17.168:7005,新节点
192.168.17.168:7001集群任一个旧节点
添加slave 不需要分配哈希槽

2.改变从节点的master(也可以是未分配哈希槽的主节点)

1)比如我们要将刚才的将7005添加为7001的从节点,现在将他修改为7003的从节点

2)连接7005端口
./redis-cli -h 192.168.17.168 -p 7005 -c #连接要修改的从节点

3)移动到新的主节点
cluster replicate 3dd56b46572e1d1c1edece5e73ff4edf54485b09 #3dd56b46572e1d1c1edece5e73ff4edf54485b09为新的主节点node id

3.删除节点

3.1删除从节点

1)直接删除就可以了
./redis-trib.rb del-node 192.168.17.168:7005 081057b99f96b02ecad64ce6e4ab92c9d494a170
注释:
192.168.17.168:7005 要删除的从节点IP 端口号
081057b99f96b02ecad64ce6e4ab92c9d494a170 要删除从节点的 node id

3.2删除主节点

如果主节点有从节点,将从节点转移到其他主节点
如果主节点有slot,去掉分配的slot,然后在删除主节点
1)我们移除上面添加的7004主节点
2)取消分配的slot,下面是主要过程
./redis-trib.rb reshard 192.168.17.168:7004 #要移除的主节点ip 端口号

过程:
How many slots do you want to move (from 1 to 16384)? 1000 #移除多少个哈希槽,7004有1000个 全部移走
What is the receiving node ID? 339a50df26f4722f14faba2a8fe3cad508059e88 //接收7004节点slot的master 我们用7001来接收
Source node #1:d33aba61b519cbc0b5d7f33b825863d8f78a8925 //被删除master的node-id
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot后,reshard

redis cluster集群添加删除节点
3)执行第二步之后,7004节点的哈希槽就没有了,然后删除该7004节点
./redis-trib.rb del-node 192.168.17.168:7004 d33aba61b519cbc0b5d7f33b825863d8f78a8925

如果过程中执行redis-trib.rb 报错,参考

redis集群安装问题:ruby依赖redis.gem

 

原文:

redis-cluster集群添加节点、删除节点

redis集群扩容(添加新节点)

redis redis-trib.rb工具的使用(20211230)

 

redis rebalance扩容

添加节点,然后做rebalance


##先模拟查看redis cluster 的执行计划
##模拟rebalance
./redis-trib.rb rebalance  --use-empty-masters --pipeline 100 --simulate 10.255.1.10:6379

注明:
–use-empty-masters:rebalance是否考虑没有节点的master,默认没有分配slot节点的master是不参与rebalance的,设置–use-empty-masters可以让没有分配slot的节点参与rebalance。
–simulate:设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,而不会真正执行迁移操作。
–host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。
–pipeline :与reshar的pipeline参数一样,定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。

REDIS扩容及SLOT BALANCE、RESHARD

Redis3.0.6以上版本才好做动态rebalance扩容

Redis 集群扩容和缩容(这篇也可以)

 
喜欢 0
分享