在制定问题之前,让我解释一下我目前的情况:
Current Scenario
我有一个带有2个用root创建的节点的rabbitmq集群,我也安装了web管理插件,效果很好 .
几天前,其中一个节点出现故障,因为某些队列的消费者失败并累积了数百万条消息,因此兔子崩溃,并将所有内容写入磁盘(/ var / lib / rabbitmq / mnesia / name_of_the_node / queues /),文件系统填满了,整个节点都崩溃了 .
Problem/Questions
-
删除磁盘中的所有消息后(我不再需要它们并且必须释放磁盘空间),并使用
rabbitmq-server -detached
重新启动节点,集群继续工作,但管理插件不再响应,所以,是否存在一种让它重新工作而不重新启动的方法? -
我打算停止整个集群,并使用rabbitmq用户而不是root再次启动它(仅出于安全原因),我想知道应该记住哪些事情以避免问题 . 我主要担心的是,在使用rabbitmq用户启动集群后,集群是否会保留/记住所有当前配置(用户,策略,交换,队列和绑定) .
-
我不确定如何重新启动以最大限度地减少问题,我还想保证重新启动后web管理插件能够正常工作 .
选项1:
使用root停止所有节点 - >使用rabbitmq启动所有节点
选项2:
使用root停止node1 - >使用rabbitmq启动node1
使用root停止node2 - >使用rabbitmq启动node2
我也愿意听取您对我的任何其他建议或建议 .
1 回答
没有更多信息,很难回答你的问题 . 您至少应该查看日志文件和/或将它们发布到某个地方 .
停止以root用户身份运行的节点后,将整个
/var/lib/rabbitmq
所有权更改为rabbitmq:rabbitmq
. 用/var/log/rabbitmq
做同样的事情 . 这是RabbitMQ使用官方软件包和默认配置写入数据的唯一地方 .因为它以前是以root身份运行的,所以Erlang在
/root/.erlang.cookie
中存储了它的cookie,用于允许节点间通信的共享密钥"key" . 您需要将其复制到/var/lib/rabbitmq/.erlang.cookie
并修复所有权和权限:它必须只能由所有者读取,因此0400
或0600
的权限;如果该组织或任何人都可以阅读,Erlang会抱怨 .要在重新启动RabbitMQ之前确保cookie正确,您可以尝试ping另一个正在运行的RabbitMQ节点:
在上面的命令行中,将
other-hostname
替换为另一个RabbitMQ节点的主机名 . 如果一切正常,此命令应打印pong
. 如果显示pang
,则表示出错 .