运维场景
我搭建了一个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