我已经使用这个图片在OpenShift上创建了新的应用程序:https://hub.docker.com/r/luiscoms/openshift-rabbitmq/
它运行成功,我可以使用它了。我已经向其中添加了一个持久卷。但是,每次POD重新启动时,我都会丢失所有数据。这是因为RabbitMq使用主机名来创建数据库目录。
例如:
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设置为始终使用同一数据库目录?
发布于 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技术预览版中推出
如果状态集不是一个选项,则
oc set env dc/example HOSTNAME=example以使主机名成为静态,并将RABBITMQ_NODENAME设置为静态来完成。发布于 2018-01-06 12:52:17
我可以通过设置HOSTNAME环境变量使其工作。OSE通常将该值设置为pod名称,因此每次pod重新启动时它都会更改。通过设置它,pod的主机名在pod重新启动时不会更改。
与持久卷相结合,队列、消息用户和我假设在pod重启过程中会持久保存任何其他配置。
这是在OSE 3.2服务器上完成的。我刚刚在部署配置中添加了一个环境变量。您可以通过UI或使用OC CLI执行此操作:
oc set env dc/my-rabbit HOSTNAME=some-static-name如果您为服务运行多个pod,这可能会是一个问题,但在这种情况下,您将需要设置正确的RabbitMq集群,这是完全不同的。
发布于 2021-02-05 18:56:55
要在K8s (包括OpenShift )上运行RabbitMQ,最简单、最安全的生产方式是RabbitMQ Cluster Operator。
有关如何在OpenShift上部署RabbitMQ,请参阅this video。
https://stackoverflow.com/questions/45569931
复制相似问题