gpt4 book ai didi

linux - 用不同的用户重启 Rabbitmq 集群

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:19 26 4
gpt4 key购买 nike

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

当前场景

我有一个 rabbitmq 集群,其中有 2 个节点是用 root 创建的,我还安装了运行良好的 Web 管理插件。

前几天有一个节点挂掉了,因为一些队列的消费者失败了,累积了数百万条消息,所以rabbit崩溃了,把所有的东西都写到了磁盘(/var/lib/rabbitmq/mnesia/name_of_the_node/queues/) ,文件系统被填满,整个节点宕机。

问题/问题

  1. 删除磁盘中的所有消息后(我不再需要它们并且不得不释放磁盘空间),并重新启动节点rabbitmq-server -detached,集群继续工作,但是管理插件不再响应,那么,有没有办法让它在不重新启动的情况下再次工作?
  2. 我打算停止整个集群,然后使用rabbitmq 用户而不是 root(只是出于安全原因),我想知道我应该记住哪些事情才能避免问题。我主要担心的是集群是否会保留/记住所有当前配置(用户、策略、exchanges, queues and bindings) 在使用 rabbitmq 启动之后用户。
  3. 我不太确定如何重新启动以最大程度地减少问题,我也想保证web管理插件在重启后能正常工作。

    选项 1:
    停止所有root节点 --> 启动所有rabbitmq节点

    选项 2:
    用 root 停止 node1 --> 用 rabbitmq 启动 node1
    用root停止node2 --> 用rabbitmq启动node2

我也乐于听取您对我的任何其他意见或建议。

最佳答案

  1. 如果没有更多信息,很难回答您的问题。您至少应该查看日志文件和/或将它们张贴在某处。

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

    因为它之前以根用户身份运行,所以 Erlang 将其 cookie(用于允许节点间通信的共享 secret “ key ”)存储在 /root/.erlang.cookie 中。您需要将其复制到 /var/lib/rabbitmq/.erlang.cookie 并修复所有权和权限:它必须只能由所有者读取,因此权限为 04000600;如果组或任何人都可以阅读,Erlang 会提示。

  3. 您可以而且应该一次在一个节点上执行此操作(除非您同时更新了 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,则说明有问题。

关于linux - 用不同的用户重启 Rabbitmq 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com