Rabbitmq 记忆可以';无法连接到另一个节点

Rabbitmq 记忆可以';无法连接到另一个节点,rabbitmq,mnesia,Rabbitmq,Mnesia,我正在设置rabbitmq群集,在该过程的一个步骤中遇到问题。它直接来自rabbitmq集群指南 root@celery:~# rabbitmqctl status Status of node celery@celery ... [{pid,20410}, {running_applications,[{rabbit,"RabbitMQ","2.5.1"}, {os_mon,"CPO CXC 138 46","2.2.4"},

我正在设置rabbitmq群集,在该过程的一个步骤中遇到问题。它直接来自rabbitmq集群指南

root@celery:~# rabbitmqctl status
Status of node celery@celery ...
[{pid,20410},
 {running_applications,[{rabbit,"RabbitMQ","2.5.1"},
                        {os_mon,"CPO  CXC 138 46","2.2.4"},
                        {sasl,"SASL  CXC 138 11","2.1.8"},
                        {mnesia,"MNESIA  CXC 138 12","4.4.12"},
                        {stdlib,"ERTS  CXC 138 10","1.16.4"},
                        {kernel,"ERTS  CXC 138 10","2.13.4"}]},
 {os,{unix,linux}},
 {erlang_version,"Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:30] [hipe] [kernel-poll:true]\n"},
 {memory,[{total,25296704},
          {processes,9680280},
          {processes_used,9662720},
          {system,15616424},
          {atom,1099393},
          {atom_used,1082732},
          {binary,89768},
          {code,11606637},
          {ets,726848}]}]
...done.
root@celery:~# rabbitmqctl cluster_status
Cluster status of node celery@celery ...
[{nodes,[{disc,[celery@celery]}]},{running_nodes,[celery@celery]}]
...done.
root@celery:~# rabbitmqctl stop_app
Stopping node celery@celery ...
...done.
root@celery:~# rabbitmqctl reset
Resetting node celery@celery ...
...done.
root@celery:~# rabbitmqctl cluster worker1@worker1
Clustering node celery@celery with [worker1@worker1] ...
Error: {failed_to_cluster_with,[worker1@worker1],
                               "Mnesia could not connect to some nodes."}
一个节点无法连接到另一个节点的可能原因是什么

以下是我遵循的指南:

我跳入了freenode上的#rabbitmq频道。下面是接下来的讨论:

14:29 shakakai: hey all, i'm having a little issue with clustering rabbitmq http://stackoverflow.com/questions/6948624/mnesia-cant-connect-to-another-node
14:30 shakakai: has anyone run into that problem before?
14:30 daysmen has left IRC (Read error: Connection reset by peer)
14:30 antares_: shakakai: make sure that epmd is running on every node
14:30 antares_: shakakai: and that port it uses (4369) is open in your firewall
14:31 |Blaze|: shakakai: is your dns correct?  Can you ping worker1 from celery and celery from worker1
14:31 shakakai: |Blaze|: hmm...i'll check
14:31 daysmen has joined (~quassel@host-84-13-157-50.opaltelecom.net)
14:32 shakakai: |Blaze|: this is where I'm a little confused, the rabbitmq nodename is worker1@worker1 but the fqdn to ping the box is "ping worker1.mydomain.com"
14:33 |Blaze|: can you "ping worker1"
14:34 shakakai: |Blaze|: no
14:34 |Blaze|: k, you'll need to fix that
14:34 hyperboreean has left IRC (Ping timeout: 250 seconds)
14:37 shakakai: |Blaze|: gotcha, so I setup a hosts file and i should be good
14:37 |Blaze|: yup
14:37 |Blaze|: in both directions
TL;DR


确保可以从集群中的每个框ping兔子节点名。如果不能,请为每个兔子节点名设置一个hosts文件。

在让集群正常工作之前,有几件事需要检查: 0)确保在每个节点上运行完全相同的rabbitmq版本 1) 设置网络,直到您能够相互ping每个服务器 2) cookies-您必须在每台服务器上的.erlang.cookie文件中获得完全相同的erlang cookie 一个有用的技巧是从一个节点尝试此命令,看看是否可以从rabbitmq访问另一个节点 rabbitmqctl评估网络管理:ping(rabbit@othernode).'

如果是nok,应该是Pang,如果是ok,应该是pong 注意不要忘记靠近求值表达式末尾的点

经过几个小时不成功的试验,我使它运行良好

3) 请记住,如果此节点不是最后一个停止的节点,则在重新启动群集节点时可能会出现问题-它不会在最后一个停止重新启动之前启动。 当以上(0到2)都正确时,3很可能是问题的根本原因

希望这有帮助,, 干杯
jb

我读到的一件事是,erlang cookie需要位于所有集群节点上,以便它们能够通信。我相信它存在于/var/lib/rabbitmq/.erlang.cookie中

我安装Docker rabbitmq的过程中也遇到了类似的问题

主要原因是
/var/lib/RabbitMQ/mnesia/rabbit/cluster_nodes.config
无法连接错误上的配置文件

Mnesia是一个用Erlang编程语言编写的分布式软实时数据库管理系统

有几种方法可以修复此问题:

  • 使用正确的集群节点名称修复配置文件,从日志中我们看到节点名称为
    rabbit@cb43449d5d72

  • 我不认为接受你自己的答案是禁忌,尤其是因为它是一个好的答案
    // log info 
    ...
    rabbitmq    |   Starting broker...2019-11-27 16:18:22.621 [info] <0.304.0>
    rabbitmq    |  node           : rabbit@cb43449d5d72
    ...
    
    // This is the wrong configuration file:
    $ cat ./mnesia/rabbit/cluster_nodes.config
    {[rabbit@cb43449d5d72,rabbit@dc3288264c34],[rabbit@dc3288264c34]}.
    
    // Update it with correctly config node name, and restart RabbitMQ server:
    $ cat ./mnesia/rabbit/cluster_nodes.config
    {[rabbit@cb43449d5d72],[rabbit@cb43449d5d72]}.
    
    $ find . -name cluster_nodes.config
    ./mnesia/rabbit/cluster_nodes.config
    ./mnesia/rabbit@my-rabbit/cluster_nodes.config
    
    $ cat ./mnesia/rabbit@my-rabbit/cluster_nodes.config
    {['rabbit@my-rabbit'],['rabbit@my-rabbit']}.