关于集群下缩扩容时可能的问题。

《有关 EMQX 水平可扩展性的挑战与对策 - MQTT Broker 集群详解(三)》在这篇文章中有讲到集群中的各个节点各自维护一个订阅表,若集群需要缩减实例,比如缩减了一个复制节点,那该复制节上所有的订阅者是不是都将被迫断开连接而无法收到后续的topic消息。

又或者再如往集群中新增复制节点,若所有已存在的节点与其各自的客户端都建立了稳定链接和订阅关系,此时新增的复制节点好像也无法立即为集群分担压力
以上的问题好像即使在有lb负载均衡的前提下也无法避免。

所以想探讨下影响最小的缩扩容方式以及可能会引发的问题,能否有人解答一下?

问题1:缩容后 上面的 MQTT 连接都会断开的,此时需要客户端配置有重联策略,再连接到其他节点。4.5后会对平滑缩容进行增强,可以先将一个节点的连接先迁移到其他节点然后在关闭改节点。好处是一些在内存中的消息,订阅关系不会丢失,该功能后续也会合并至 5.x

问题2:扩容后,无法立马降低现有节点上的压力的 (MQTT 连接需要迁移才行,同问题1的答复)

由于 MQTT 是基于 TCP 连接的,所以节点变化了都需要重联才行。暴力关闭可能导致一些 队列中的消息丢失,和错过重连这段时间的下消息。

非常感谢,请问上诉回复当中有提到“4.5后会对平滑缩容进行增强” 请问这如何操作,我现在是试用开源的5.0版,其是否已经有将节点连接迁移至其他节点的功能了?

还没有的,还在实现中 目前规划应该是在4.5的企业版本,具体设计可以看看我们 EIP 中的 https://github.com/emqx/eip/blob/main/active/0020-node-rebalance.md

否则的话只有暴力启停节点。等待客户端在重新连接就好了