添加节点
1,启动2个新的redis-sever, 参照 ( redis 3.0 集群____安装 ),端口号为 7007 和 7008
2,使用命令 redis-trib.rb add-node 命令添加新节点
redis-trib.rb add-node 192.168.10.229:7007 192.168.10.229:7001 ( 第一个是新节点ip:port, 第二个是任意一个已存在节点ip:port ),结果如下
这时候只是挂到集群里面而已,还没分配 slot 给它, 如下图 cluster_known_nodes : 7 但是 cluster_size : 3
3 使用 redis-trib.rb reshard 新节点IP:port 命令 分配 slot 给新节点,如下
redis-trib.rb reshard 192.168.10.229:7007
redis-trib.rb reshard 192.168.10.229:7007 #根据提示选择要迁移的slot数量(ps:这里选择500) How many slots do you want to move (from 1 to 16384)? 500 #选择要接受这些slot的node-id What is the receiving node ID? 新节点的ID #选择slot来源: #all表示从所有的master重新分配, #或者数据要提取slot的master节点id,最后用done结束 Please 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:all #打印被移动的slot后,输入yes开始移动slot以及对应的数据. #Do you want to proceed with the proposed reshard plan (yes/no)? yes #结束
4 使用 cluster replicate master的nodeId 给新节点添加一个 slave
同第一步,先起一个 7008 的节点,并用 redis-trib.rb add-node 把该节点加入进来,
然后 redis-cli -c -p 7008 登录进来,最后用 cluster replicate 命令挂到 master 下面, 注意下面 7008 自己身份的变化
移除节点
使用命令 redis-trib.rb del-node 192.168.10.229:7008 d3e4d00bea60fd7873d4739a2b4008d9975ca04e
如果是删除 slave ,则可以直接删除
如果是删除 master ,必须先用 redis-trib.rb reshard 把数据迁移出去后才能删除
数据迁移
Redis Cluster支持在线增/减节点。
基于桶的数据分布方式大大降低了迁移成本,只需将数据slot从一个Redis Node迁移到另一个Redis Node即可完成迁移。
当桶从一个Node A向另一个Node B迁移时,Node A和Node B都会有这个slot,Node A上slot的状态设置为MIGRATING,Node B上slot的状态被设置为IMPORTING
当客户端请求时:
所有在Node A上的请求都将由A来处理,所有不在A上的key都由Node B来处理。同时,Node A上将不会创建新的key