gpt4 book ai didi

amazon-web-services - AWS 经典 LB 更改 IP/断开连接导致 RabbitMQ 上的消息丢失

转载 作者:行者123 更新时间:2023-12-03 21:25:10 26 4
gpt4 key购买 nike

我运行了一个具有 3 个节点的兔子 HA 集群,在它们前面有一个经典的 AWS 负载均衡器 (LB)。有两个app,一个发布,一个通过LB消费。
enter image description here
当发布者应用开始发送 300 万条消息时,它的连接在短时间内进入流量控制状态。发布完成后,在发布者应用程序日志中,我可以看到所有 300 万条消息都已发送。另一方面,在消费者应用程序日志中,我只能看到 500K - 1M 的消息(在运行之间有所不同),这意味着大量消息丢失了。

所以发生的事情是,在运行过程中,经典 LB 决定更改其 IP 地址或断开连接,从而丢失大量消息(有关更多详细信息,请参阅我的更新)。

如果我跳过 LB 并直接命中节点,在应用程序端进行负载平衡,则不会发生此问题。当然,在这种情况下,我失去了 ELB 的所有好处。

我的问题是:

  • 为什么LB会改变IP地址并断开连接,这与来自发布者或流量控制状态的高消息速率有关吗?
  • 如何配置LB,才不会出现这个问题?

  • 更新:

    这是我对正在发生的事情的理解:
    我使用 AMQP 0-9-1 并在没有“发布确认”的情况下发布,因此消息一经连接就被视为已发送。此外,rabbitmq 节点上的连接是在 LB 和节点之间,而不是发布者应用程序和节点之间。
  • 在通信进入 Flow Control 之前,消息立即从 LB 传递到一个节点
    enter image description here
  • 然后LB和节点之间的连接进入Flow Control,Publisher App连接没有被阻塞,因此它继续以相同的速率发布。这会导致消息堆积在 LB 上。
    enter image description here
  • 然后 LB 决定更改 IP 或出于任何原因断开连接并创建一个新的连接,从而导致所有堆积的消息丢失。从 RabbitMQ 日志中可以清楚地看到这一点:

    =警告报告==== 2018 年 1 月 6 日::10:35:50 ===
    关闭 AMQP 连接 <0.30342.375> (10.1.1.250:29564 -> 10.1.1.223:5672):
    客户端意外关闭了 TCP 连接

    =信息报告==== 2018 年 1 月 6 日::10:35:51 ===
    接受 AMQP 连接 <0.29123.375> (10.1.1.22:1886 -> 10.1.1.223:5672)

  • enter image description here

    最佳答案

    解决方案是使用 AWS 网络磅。网络 LB 将在 Publisher App 和 rabbitmq 节点之间创建连接。因此,如果连接被阻止或断开,Publisher 将意识到这一点并采取相应的行动。我对 3M 消息进行了相同的测试,并且没有丢失单个消息。

    enter image description here

    在 AWS 文档中,有一行解释了这种行为:

    Preserve source IP address Network Load Balancer preserves the client side source IP allowing the back-end to see the IP address of the client. This can then be used by applications for further processing.

    From: https://aws.amazon.com/elasticloadbalancing/details/

    关于amazon-web-services - AWS 经典 LB 更改 IP/断开连接导致 RabbitMQ 上的消息丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48133417/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com