首页 文章

用不同的用户重启Rabbitmq集群

提问于
浏览
0

在制定问题之前,让我解释一下我目前的情况:

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 回答

  • 1
    • 没有更多信息,很难回答你的问题 . 您至少应该查看日志文件和/或将它们发布到某个地方 .

    • 停止以root用户身份运行的节点后,将整个 /var/lib/rabbitmq 所有权更改为 rabbitmq:rabbitmq . 用 /var/log/rabbitmq 做同样的事情 . 这是RabbitMQ使用官方软件包和默认配置写入数据的唯一地方 .

    因为它以前是以root身份运行的,所以Erlang在 /root/.erlang.cookie 中存储了它的cookie,用于允许节点间通信的共享密钥"key" . 您需要将其复制到 /var/lib/rabbitmq/.erlang.cookie 并修复所有权和权限:它必须只能由所有者读取,因此 04000600 的权限;如果该组织或任何人都可以阅读,Erlang会抱怨 .

    • 您可以并且应该一次执行一个节点(除非您在此期间更新了Erlang或RabbitMQ) . 注意我上面提到的Erlang cookie . 如果您启动的cookie与其他正在运行的节点不同,则它们将无法进行通信 .

    要在重新启动RabbitMQ之前确保cookie正确,您可以尝试ping另一个正在运行的RabbitMQ节点:

    # Open a shell as the `rabbitmq` user and run:
    erl -A0 -noinput -noshell -sname foobar \
     -eval "io:format(\"~p~n\", [net_adm:ping('rabbit@other-hostname')]), halt()."
    

    在上面的命令行中,将 other-hostname 替换为另一个RabbitMQ节点的主机名 . 如果一切正常,此命令应打印 pong . 如果显示 pang ,则表示出错 .

相关问题