您的位置:首页 > 数据库 > Redis

redis linux-集群新增删除节点流程

2017-02-16 15:37 302 查看
一。添加主节点

打开/usr/local/redis-3.2.7/cluster

        mkdir 6385

    #复制redis.conf配置文件并把端口改成6385

启动新增节点:./redis-server /usr/local/redis-3.2.7/cluster/6385/redis.conf

查看节点ps -ef | grep redis

添加节点

 打开/usr/local/redis-3.2.7/src执行./redis-trib.rb add-node 127.0.0.1:6385 127.0.0.1:6384

127.0.0.1:6385为新增节点

127.0.0.1:6384为已有集群中任何节点

出现以下信息表示新增成功

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

>>> Send CLUSTER MEET to node 120.77.61.47:6385 to make it join the cluster.

[OK] New node added correctly.

查看新节点状态:./redis-trib.rb check 127.0.0.1:6385

重新分配slots

./redis-trib.rb reshard 127.0.0.1:6384

127.0.0.1:6384为集群中任意节点

出现How many slots do you want to move (from 1 to 16384)?   时我们有4个master就平均分配输入16384/4=4096

出现What is the receiving node ID? 输入6835的id:ee3efb90e5ac0725f15238a64fc60a18a71205d7

出现Source node #1:时,如果不指定特定id直接输入all从所有节点中抽取

确认分配后结果:./redis-trib.rb check 127.0.0.1:6385

看到slots分配完毕这添加结束

二。添加从节点

打开/usr/local/redis-3.2.7/cluster

        mkdir 6386

    #复制redis.conf配置文件并把端口改成6386

启动新增节点:./redis-server /usr/local/redis-3.2.7/cluster/6386/redis.conf

查看节点ps -ef | grep redis

添加节点

 打开/usr/local/redis-3.2.7/src执行./redis-trib.rb add-node --slave 127.0.0.1:6386  127.0.0.1:6385

127.0.0.1:6386 为从节点

127.0.0.1:6385为要添加到的目标主节点

出现以下信息表示成功

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

Automatically selected master 127.0.0.1:6385

>>> Send CLUSTER MEET to node 127.0.0.1:6386 to make it join the cluster.

Waiting for the cluster to join.

>>> Configure node as replica of 127.0.0.1:6385.

[OK] New node added correctly.

查看结果./redis-trib.rb check 127.0.0.1:6386

三.删除节点(删除顺序是先删从节点再删除主节点)

   删除从节点./redis-trib.rb del-node 127.0.0.1:6386 b51de0185386c80b73fbe87a68b1b580bb558b4e

>>> Removing node b51de0185386c80b73fbe87a68b1b580bb558b4e from cluster 127.0.0.1:6386

>>> Sending CLUSTER FORGET messages to the cluster...

>>> SHUTDOWN the node.

查看结果./redis-trib.rb check 127.0.0.1:6385发现已经没有6386节点

 删除主节点:(因为在主节点中存放着数据,所以我们在删除之前,要把这些数据迁移走,并且把该节点上的哈希槽分配到其他主节点上)

移动哈希槽./redis-trib.rb reshard 127.0.0.1:6385

出现How many slots do you want to move (from 1 to 16384)? 由于6385上有4096个槽所以输入4096全部移除

出现What is the receiving node ID?选择要移动到的主节点

Source node #1:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被删除master的node-id  

Source node #2:done 

查看结果./redis-trib.rb check 127.0.0.1:6385如果没有哈希槽就执行下一步

执行:./redis-trib.rb del-node 127.0.0.1:6385 61f786c40bcc170006a440abd7dc773e6dd15a19

查看结果./redis-trib.rb
check 127.0.0.1:6385发现已经没有6385节点

错误处理:

[WARNING] Node 120.77.61.47:6379
has slots in migrating state (2156).

[WARNING] Node 120.77.61.47:6380 has slots in importing state (2156).

[WARNING] The following slots are open: 2156

使用./redis-trib.rb fix ./redis-trib.rb
fix 127.0.0.1:6380修复

可以登录到相应的节点./redis-cli
-h 127.0.0.1 -p 6380,使用命令“cluster setslot
2156 stable”修改,参数2156为问题显示的slot的ID
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: