【发布时间】:2019-11-04 16:04:35
【问题描述】:
我们的应用程序使用 RabbitMQ,只有一个节点。它在单个 Kubernetes pod 中运行。
我们使用持久/持久队列,但只要我们的云实例关闭和备份,并且 RabbitMQ pod 重新启动,我们现有的持久/持久队列就会消失。
起初,我认为存储队列的卷不持久是一个问题,但事实并非如此。
队列数据似乎存储在/var/lib/rabbitmq/mnesia/<user@hostname> 中。由于 pod 的主机名每次都会更改,因此它会为新主机名创建一组新数据,并失去对先前持久队列的访问权限。我在 mnesia 文件夹中建立了许多文件集,全部来自以前的重新启动。
如何防止这种行为?
我能找到的最接近的答案是在this question,但如果我没看错的话,这只有在集群中有多个节点同时共享队列数据时才有效。我不确定它是否适用于单个节点。还是会?
【问题讨论】:
-
RabittMQ 特定设置:Durability 持久队列被持久化到磁盘,因此在代理重启后仍然存在。不持久的队列称为瞬态队列。队列的持久性不会使路由到该队列的消息持久。 如果代理被关闭然后重新启动,持久队列将在代理启动期间重新声明,但是,只有持久消息将被恢复。 这是通过消息属性完成的(delivery_mode 或在某些客户端中是持久的)。
-
@JoeMjr2 你能解决这个问题吗? :)
标签: kubernetes rabbitmq persistence persistent-storage