关于RabbitMQ同步失败
问题背景:
项目中使用到了RabbitMQ作为消息队列,采用的方式是两台机器做镜像,配置数据同步策略到两台机器。双机都采用了磁盘节点。
问题:
在机房的两次交换机问题中,内网通讯断开链接了一段时间,RabbitMQ自动shutdown,不能再接收和获取消息,通过List queues 发现两边数据不一致,打开RabbitMQ的日志发现在heart beat一段时间后,RabbitMQ自动shutdown,网络恢复后不会重启,手动重启后生效数据恢复一致。
如果是手动stop掉镜像中的其中一台机器,RabbitMQ不会进入这样的模式,而是仍然对外提供服务,请问一下为什么会这样?怎样避免网路出问题的时候RabbitMQ不会自动shutdown或者有什么机制保证网络恢复后自动重启?
如果遇到过同样问题的同学留下联系方式一起交流。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题在于网络异常断开,状态无法同步(未知状态)。手动stop不会出现问题是因为关掉的时候,状态是已知的,因此能够恢复。
RabbitMQ的文档就有说不稳定的网络Cluster不稳定。
所以我觉得主要是引入一个监控->恢复的反馈机制(Roll your own):
EDIT: 你也可以看看这篇文档(For RabbitMQ 3.1+):
https://www.rabbitmq.com/partitions.html
有autoheal和pause_minority两种模式
与其这么麻烦,踩那么多坑,不如直接用云服务啊。阿里云的MNS消息服务:
https://yq.aliyun.com/articles/6372