RocketMQ系列:运维之集群节点下线操作

运维场景

我搭建了一个3m-3s的rocketmq集群(参考:3m-3s的rocketmq搭建),假设限制有一套master节点的机器发生了故障,需要摘除机器,该如何进行平滑运维?

例如我搭建了一个3m-3s的broker集群,架构如下:

 

 

如果我要摘除集群中的broker-a节点,该如何操作?

首先要明确的有三点:

第一点:首先要将broker-a变成不可接收新消息的状态(即新来的消息都落到broker-b和broker-c上),但是不能影响正在处理的消息落盘。

第二点:设置完第一步后,broker-a-s为其slave机器;第一步操作不能影响从slave消费之前已落盘的消息。

第三点:摘除broker-a后,集群的规模变小了,还是否能经得起当前生产和消费的TPS。

其中第三步是可以评估的,一般集群规模最大能承受TPS应该的水位线是2/3,比如当前集群最大TPS为10000,那生产环境实际的TPS建议不要超过7000,超过7000就得扩容broker集群了。

操作

首先我们了解下topic的perm属性,这里可以在控制台查看:

perm指的是topic的读写属性:

6:可读可写

4:只读

2:只写

了解了perm之后,我们就可以利用perm作文章了。

步骤1

为了达到第一点所说,只要将broker-a上的所有topic置为只读,那么消息就不会继续写入到broker-a中了,所以对于已创建并关联到broker-a的所有topic,需将这些topic的perm设置为4。

方式:

1. 可以点击控制台的TOPIC子页面,在topic里面中,分别点击每项的“topic config”,修改broker-a的perm为4,  如下图:

  

2.也可以在命令行通过mqadmin updateTopicPerm修改对应topic的权限,如下图:

步骤2

1. 查看broker-a写入流量

查看broker-a的master节点的InTPS,直到InTPS为0,说明该topic已经不再接受新的消息。

2. 查看broker-a-s的读出流量

观察broker-a-s上的OutTPS(消费),OutTPS也为0之后,说明消息理论上已经全部被消费完毕。

步骤3

查看broker-a上的consumer是否全部消费完毕,且没有diff(有diff说明有的落盘的消息没有被消费到,一般是客户端consumer有bug)

步骤4

确认上述后,为了保险起见,建议将broker-a(master和slave机器)分别保留3天,等三天后通过mqshutdown命令停止broker-a和broker-a-s

至此,摘除故障机器的操作就OK了

博主:测试生财

座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374


猜你喜欢

转载自blog.51cto.com/14900374/2540010