使用不同的用户

时间:2016-03-31 17:22:49

标签: linux rabbitmq

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

当前情景

我有一个带有2个使用root创建的节点的rabbitmq集群,我还安装了Web管理插件,效果很好。

几天前,其中一个节点出现故障,因为某些队列的消费者失败并且累积了数百万条消息,因此兔子崩溃,并将所有内容写入磁盘(/ var / lib / rabbitmq / mnesia / name_of_the_node / queues /) ,文件系统填满,整个节点都崩溃了。

问题/问题

  1. 删除磁盘中的所有邮件后(我不再需要它们了 不得不释放磁盘空间),并重启节点 rabbitmq-server -detached,群集继续工作,但是 管理插件不再响应,所以,有没有办法 让它再次工作而不重新启动?
  2. 我计划停止整个群集,然后再次启动它 rabbitmq用户而不是root用户(仅出于安全原因)和我 我想知道我应该记住什么 避免问题。我主要担心的是群集是否会 保持/记住所有当前配置(用户,政策, 用rabbitmq启动后,交换,队列和绑定) 用户。
  3. 我不确定如何重新启动以最小化 问题,我还想保证重启后网络管理员插件能够正常工作。

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

    选项2:
    使用root停止node1 - >用rabbitmq发起node1 使用root停止node2 - >使用rabbitmq

  4. 启动node2

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

1 个答案:

答案 0 :(得分:1)

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

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

    因为它以前是以root身份运行的,所以Erlang在/root/.erlang.cookie中存储了它的cookie,这是用于允许节点间通信的共享密钥“key”。您需要将其复制到/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,则表示出现问题。