docker-compose 编排方式安装redis cluster集群 【redis 集群的收缩】(三)

11 篇文章 0 订阅

收缩集群意味着缩减规模,需要从现有集群中安全下线部分节点,下线节点过程如下
1)首先需要确定下线节点是否有负责的槽,如果是,需要把槽迁移到其他节点,保证节点下线后整个集群槽节点映射的完整性。

2)当下线节点不再负责槽或者本身是从节点时,就可以通知集群内其他节点忘记下线节点,当所有的节点忘记该节点后可以正常关闭。

1、下线迁移槽【此处要下线 192.168.11.43:6397 -》redis-master4 主节点】

下线节点需要把自己负责的槽迁移到其他节点,原理与之前节点扩容的迁移槽过程一致,
但是过程收缩正好和扩容迁移方向相反,下线节点变为源节点,其他主节点变为目标节点,
源节点需要把自身负责的4096个槽均匀地迁移到其他主节点上。

目标节点:需要迁入操的节点
源节点:迁出槽的节点

使用 redis-trib.rb reshard 命令完成槽迁移。由于每次执行 reshard 命令只能有一个目标节点,
因此需要执行3次 reshard 命令【执行多少次迁移取决于你主节点的个数,另外一个方法就是,一次性将节点迁移到一个主节点,然后进行槽平衡的操作】

进入集群某一节点

[root@localhost docker-compose-redis-trib]# docker exec -it redis-master1 bash
[root@086ae4a63467 config]# 

2.执行槽的迁移(输入集群中任意节点)

1>输入迁移操作的集群
[root@086ae4a63467 config]# redis-trib.rb reshard 192.168.11.43:6391

2>需要分配多少个槽(16384/4=4096)
How many slots do you want to move (from 1 to 16384)? 4096

3>输入某个节点的节点 ID 作为目标节点,目标节点只能指定一个:[目标节点指的是需要添加槽的节点]
What is the receiving node ID? 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 (6391的节点)

4>输入需要分配出槽的节点ID(/var/lib/redis查看配置文件或用于唯一标识集群内一个节点ID)
Source node #1:e166acc99589ace1cbcdc8893cdf865bd26d07d0 (6397的节点)
Source node #2:done

5>输入yes
Do you want to proceed with the proposed reshard plan (yes/no)? yes

3.此时等待操作的迁移完成,然后执行cluster nodes 查看节点

[root@086ae4a63467 config]# redis-cli -p 6391
127.0.0.1:6391> cluster nodes
e166acc99589ace1cbcdc8893cdf865bd26d07d0 172.50.0.1:6397@16397 master - 0 1576059481889 8 connected
6e2b71c31d92e127bed497ee2afd8a426fabf3c8 172.50.0.1:6396@16396 slave cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 0 1576059482896 6 connected
cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 172.50.0.1:6393@16393 master - 0 1576059484913 3 connected 12288-16383
50408afe0aafca3c87293b5f264ffdadcf0ee982 172.50.0.1:6394@16394 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576059483904 9 connected
c7d63f558a88155d2698cff06a8a9de69c8d7100 172.50.0.1:6395@16395 slave e21cf577d264a5e2be0bef074dd2f41a86825f78 0 1576059482000 5 connected
e21cf577d264a5e2be0bef074dd2f41a86825f78 172.50.0.1:6392@16392 master - 0 1576059483000 2 connected 6827-10922
751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 172.50.0.2:6391@16391 myself,master - 0 1576059482000 9 connected 0-6826 10923-12287
6bc2bf1dcdafc966635db3ca6126544891aa41d6 172.50.0.1:6398@16398 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576059483000 9 connected

在这里插入图片描述

4.执行节点的忘记
由于集群内的节点不停地通过 Gossip 消息彼此交换节点状态,因此需要通过一种健壮的机制让集群内所有节点忘记下线的节点。
也就是说让其他节点不再与要下线节点进行 Gossip 消息交换。
Redis 提供了 cluster forget{downNodeId}命令实现该功能,会把这个节点信息放入黑名单,但是60s之后会恢复。

生产环境当中使用redis-trib.rb del-node {host:port}{downNodeId}命令进行相关操作

#从集群中删除节点
del-node host:port node_id

[root@086ae4a63467 config]#  redis-trib.rb del-node 192.168.1.9:6391 e166acc99589ace1cbcdc8893cdf865bd26d07d0 (6397的节点)
>>> Removing node e166acc99589ace1cbcdc8893cdf865bd26d07d0 from cluster 192.168.11.43:6391
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

查看集群的节点:

[root@086ae4a63467 config]# redis-cli -p 6391
127.0.0.1:6391> cluster nodes
6e2b71c31d92e127bed497ee2afd8a426fabf3c8 172.50.0.1:6396@16396 slave cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 0 1576060359010 6 connected
cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 172.50.0.1:6393@16393 master - 0 1576060356000 3 connected 12288-16383
50408afe0aafca3c87293b5f264ffdadcf0ee982 172.50.0.1:6394@16394 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576060356000 9 connected
c7d63f558a88155d2698cff06a8a9de69c8d7100 172.50.0.1:6395@16395 slave e21cf577d264a5e2be0bef074dd2f41a86825f78 0 1576060356998 5 connected
e21cf577d264a5e2be0bef074dd2f41a86825f78 172.50.0.1:6392@16392 master - 0 1576060356000 2 connected 6827-10922
751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 172.50.0.2:6391@16391 myself,master - 0 1576060357000 9 connected 0-6826 10923-12287
6bc2bf1dcdafc966635db3ca6126544891aa41d6 172.50.0.1:6398@16398 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576060358002 9 connected

【此时6397节点不在集群节点当中,此时槽数量是不平衡的】
在这里插入图片描述

5.此时执行集群节点槽的平衡
注意: redis-trib rebalance 命令选择
适用于节点的槽不平衡的状态,有槽的节点
1、默认节点加入,要先做节点槽的迁移
2、节点已经迁移了所有的槽信息,并且已经从集群删除后,才可以使用平衡

#平衡集群节点slot数量
rebalance host:port
–weight
–auto-weights
–use-empty-masters
–timeout
–simulate 不会真正迁移,测试用的
–pipeline 一次迁移多少分数据
–threshold

执行节点平衡操作

[root@086ae4a63467 config]# redis-trib.rb rebalance 192.168.11.43:6391

在这里插入图片描述
平衡完之后可以查看个节点的槽数量

[root@086ae4a63467 config]# redis-cli -p 6391
127.0.0.1:6391> cluster nodes
6e2b71c31d92e127bed497ee2afd8a426fabf3c8 172.50.0.1:6396@16396 slave cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 0 1576060572000 10 connected
cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 172.50.0.1:6393@16393 master - 0 1576060571000 10 connected 0-1365 12288-16383
50408afe0aafca3c87293b5f264ffdadcf0ee982 172.50.0.1:6394@16394 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576060573620 9 connected
c7d63f558a88155d2698cff06a8a9de69c8d7100 172.50.0.1:6395@16395 slave e21cf577d264a5e2be0bef074dd2f41a86825f78 0 1576060574629 11 connected
e21cf577d264a5e2be0bef074dd2f41a86825f78 172.50.0.1:6392@16392 master - 0 1576060571000 11 connected 1366-2730 6827-10922
751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 172.50.0.2:6391@16391 myself,master - 0 1576060571000 9 connected 2731-6826 10923-12287
6bc2bf1dcdafc966635db3ca6126544891aa41d6 172.50.0.1:6398@16398 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576060572616 9 connected

截图:
在这里插入图片描述

注意: redis-trib rebalance 命令选择

适用于节点的槽不平衡的状态,有槽的节点

1、默认节点加入,要先做节点槽的迁移
2、节点已经迁移了所有的槽信息,并且已经从集群删除后,才可以使用平衡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值