我们的应用程序只使用rabbitmq带有一个节点。它在一个kubernetes吊舱中运行。
我们使用耐用/持久的队列,但是每当我们的云实例被倒下并备份时,并且重新启动了RabbitMQ Pod,我们现有的耐用/持久队列就消失了。
起初,我虽然这是一个问题的问题,即排队在不持久的情况下存储,但事实并非如此。
看来队列数据存储在/var/lib/rabbitmq/mnesia/<user@hostname>
中。由于POD的主机名每次都会更改,因此它为新的主机名创建了一组新的数据,并将失去对先前持久队列的访问。我在Mnesia文件夹中构建了许多集合的文件,这都是从以前的重新启动中。
如何防止这种行为?
我能找到的最接近的答案是在这个问题中,但是如果我正确阅读它,这只有同时在群集中有多个节点并共享队列数据时才能起作用。我不确定它是否可以使用一个节点。还是会?
在我们的情况下有帮助的是设置hostname: <static-host-value>
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 1
...
template:
metadata:
labels:
app: rabbitmq
spec:
...
containers:
- name: rabbitmq
image: rabbitmq:3-management
...
hostname: rmq-host
如何防止这种行为?
通过使用StatefulSet
,按照与其"身份"相关的持续数据的情况。即使您最终不使用它,舵图是一个开始阅读的好地方。
我本人遇到了这个问题,我发现的最快方法是指定一个环境可变rabbitmq_nodename =" yourapplicationsqueuename",并确保我只有1个复制品。
>