【问题标题】:MQTT and AWS ELB : How to make ELB _forget_ to which node a client was previously connected to?MQTT 和 AWS ELB:如何让 ELB 忘记客户端之前连接的节点?
【发布时间】:2023-03-31 18:03:01
【问题描述】:

我有一个由 2 个 RabbitMQ 节点组成的集群(每个运行 3.6.10 版 RabbitMQ 并启用了 MQTT 插件)和一个 AWS 经典负载均衡器在它们前面。服务器和客户端交换 MQTT 消息。

客户端(在移动设备上运行并使用 Eclipse Paho 客户端库的应用程序)连接到负载平衡器,该负载平衡器以循环方式分配连接。

当我关闭一个节点(例如 Node1)时,所有连接到 Node1 的客户端都会收到一个回调,指示与代理的连接丢失。 这些客户端尝试重新连接,但连接尝试失败,表明代理无法访问。 从 AWS 控制台我可以看到 AWS ELB 检测到 Node1 已关闭并将其标记为“OutOfService”。 来自新客户端的连接请求被路由到“InService”节点Node2;但是,来自先前连接到 Node1 的现有客户端的连接请求总是失败!

ELB 配置了 180 秒的空闲超时。在 ELB 中启用或禁用连接耗尽没有任何区别。

是否有任何特定配置可以让 ELB忘记现有客户端已连接到 Node1 并允许它们连接到 Node2?

【问题讨论】:

  • @Whoever_down_voted_this_question:如果您可以添加评论说明为什么这个问题被否决,那将会很有用。它可以帮助我避免将来出现类似的反对票!

标签: rabbitmq mqtt amazon-elb


【解决方案1】:

我尝试添加以下 HA 策略: rabbitmqctl set_policy ha-mqtt "^mqtt" \ '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

使用此策略,为 MQTT 客户端创建的所有队列都已镜像。现在,当 Node1 关闭时,来自现有客户端 ID 的连接尝试也会被路由到另一个活动节点!

这让我想知道来自 MQTT 客户端的客户端 ID 与它们与代理节点的连接之间的关系是什么?我认为只有在队列主节点关闭时保留和访问尚未确认的消息时才需要队列镜像。但是我看到客户端甚至无法建立连接!

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2013-09-04
    • 2018-03-14
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多