首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Openshift上正确设置RabbitMQ

如何在Openshift上正确设置RabbitMQ
EN

Stack Overflow用户
提问于 2017-08-08 21:38:15
回答 3查看 10.8K关注 0票数 4

我已经使用这个图片在OpenShift上创建了新的应用程序:https://hub.docker.com/r/luiscoms/openshift-rabbitmq/

它运行成功,我可以使用它了。我已经向其中添加了一个持久卷。但是,每次POD重新启动时,我都会丢失所有数据。这是因为RabbitMq使用主机名来创建数据库目录。

例如:

代码语言:javascript
复制
node           : rabbit@openshift-rabbitmq-11-9b6p7
home dir       : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash    : BsUC9W6z5M26164xPxUTkA==
log            : tty
sasl log       : tty
database dir   : /var/lib/rabbitmq/mnesia/rabbit@openshift-rabbitmq-11-9b6p7

如何将RabbitMq设置为始终使用同一数据库目录?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-13 05:48:39

您应该能够设置环境变量RABBITMQ_MNESIA_DIR来覆盖默认配置。这可以通过将条目添加到部署配置中的环境或通过oc工具通过OpenShift控制台完成,例如:

oc set env dc/my-rabbit RABBITMQ_MNESIA_DIR=/myDir

然后,您需要将持久卷挂载到Pod内的所需路径。既然你说它已经创建了,那么你只需要更新它,例如:

oc volume dc/my-rabbit --add --overwrite --name=my-pv-name --mount-path=/myDir

您需要确保对提供的挂载路径具有正确的读/写访问权限

编辑:基于注释中的问题的一些附加解决方法

由动态主机名引起的问题可以通过多种方式解决:

1.(首选IMO)将部署移动到StatefulSet。StatefulSet将在命名方面提供稳定性,因此Pod的网络标识符必须由无头服务提供。此功能已从Kubernetes1.9的测试版和3.5版起的OpenShift技术预览版中推出

如果状态集不是一个选项,则

  1. 设置Pod的主机名。这可以通过添加环境变量oc set env dc/example HOSTNAME=example以使主机名成为静态,并将RABBITMQ_NODENAME设置为静态来完成。
票数 6
EN

Stack Overflow用户

发布于 2018-01-06 12:52:17

我可以通过设置HOSTNAME环境变量使其工作。OSE通常将该值设置为pod名称,因此每次pod重新启动时它都会更改。通过设置它,pod的主机名在pod重新启动时不会更改。

与持久卷相结合,队列、消息用户和我假设在pod重启过程中会持久保存任何其他配置。

这是在OSE 3.2服务器上完成的。我刚刚在部署配置中添加了一个环境变量。您可以通过UI或使用OC CLI执行此操作:

代码语言:javascript
复制
oc set env dc/my-rabbit HOSTNAME=some-static-name

如果您为服务运行多个pod,这可能会是一个问题,但在这种情况下,您将需要设置正确的RabbitMq集群,这是完全不同的。

票数 1
EN

Stack Overflow用户

发布于 2021-02-05 18:56:55

要在K8s (包括OpenShift )上运行RabbitMQ,最简单、最安全的生产方式是RabbitMQ Cluster Operator

有关如何在OpenShift上部署RabbitMQ,请参阅this video

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45569931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档