关于RabbitMQ同步失败

发布于 2022-08-28 22:56:12 字数 414 浏览 19 评论 0

问题背景:
项目中使用到了RabbitMQ作为消息队列,采用的方式是两台机器做镜像,配置数据同步策略到两台机器。双机都采用了磁盘节点。

问题:
在机房的两次交换机问题中,内网通讯断开链接了一段时间,RabbitMQ自动shutdown,不能再接收和获取消息,通过List queues 发现两边数据不一致,打开RabbitMQ的日志发现在heart beat一段时间后,RabbitMQ自动shutdown,网络恢复后不会重启,手动重启后生效数据恢复一致。
如果是手动stop掉镜像中的其中一台机器,RabbitMQ不会进入这样的模式,而是仍然对外提供服务,请问一下为什么会这样?怎样避免网路出问题的时候RabbitMQ不会自动shutdown或者有什么机制保证网络恢复后自动重启?

如果遇到过同样问题的同学留下联系方式一起交流。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾城°AllureLove 2022-09-04 22:56:12

问题在于网络异常断开,状态无法同步(未知状态)。手动stop不会出现问题是因为关掉的时候,状态是已知的,因此能够恢复。

RabbitMQ的文档就有说不稳定的网络Cluster不稳定。

所以我觉得主要是引入一个监控->恢复的反馈机制(Roll your own):

  • 监控主要是通过检查cluster状态,找到已被移除的node
  • 恢复是在被移除的节点上,重置并重新加入到cluster中
  • 至于恢复是自动还是手动看具体需求,运维也需要得到相应的事件

EDIT: 你也可以看看这篇文档(For RabbitMQ 3.1+):

https://www.rabbitmq.com/partitions.html

有autoheal和pause_minority两种模式

月棠 2022-09-04 22:56:12

与其这么麻烦,踩那么多坑,不如直接用云服务啊。阿里云的MNS消息服务:
https://yq.aliyun.com/articles/6372

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文