使Rabbitmq耐用/持续的队列在Kubernetes Pod重新启动时幸存下来



我们的应用程序只使用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个复制品。

>

最新更新