RabbitMQ3.6.5集群搭建和遇到的问题

来源:互联网 发布:阿里云ecs 用户名密码 编辑:程序博客网 时间:2024/06/16 13:35

RabbitMQ3.6.5集群搭建

搭建环境:

非单机集群,使用VMware Workstation创建三台独立的虚拟机(桥接模式)。ip地址分别为:192.168.0.113 、192.168.0.116、 192.168.0.119

若首次搭建,请阅读下官方文档Clustering Guide

搭建步骤

  • 修改hosts
    在三台机器上配置响应的hosts如下:
    • 192.168.0.113 rabbit1
    • 192.168.0.116 rabbit2
    • 192.168.0.119 rabbit3
  • 复制.erlang.cookie
    首先启动三台机器的rabbitmq,此时会在HOME目录(默认情况下)生成cookie文件,用于erlang在分布式节点之间进行通讯,此cookie文件的内容必须相同,否则无法通讯。    1.启动指令:    RABBITMQ_NODENAME=rabbit@rabbit1 ./rabbitmq-server -detached    RABBITMQ_NODENAME=rabbit@rabbit2 ./rabbitmq-server -detached    RABBITMQ_NODENAME=rabbit@rabbit3 ./rabbitmq-server -detached    2. 复制cookie        改变了节点cookie之后不能对节点通讯,此时用kill指令关掉rabbitmq进程重启即可,当然也可以优雅的先关闭,在修改cookie:      ./rabbitmqctl -n rabbit@rabbit2 stop关闭,然后修改cookie      注意:如果修改了节点名,接后续操作必须-n指明,否则erlang无法找到节点
  • 将第二个节点加入集群中

    在修改了cookie之后,启动rabbitmq:

    RABBITMQ_NODENAME=rabbit@rabbit2 ./rabbitmq-server -detached

    关闭app并reset:

    ./rabbitmqctl -n rabbit@rabbit2 stop_app./rabbitmqctl -n rabbit@rabbit2 reset

    将节点加入集群:

    ./rabbitmqctl -n rabbit@rabbit2 join_cluster rabbit@rabbit1

    提示:

    Clustering node rabbit@rabbit2 with rabbit@rabbit1 ...

    查看集群状态:

    ./rabbitmqctl -n rabbit@rabbit2  cluster_status如下:Cluster status of node rabbit@rabbit2 ...[{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {alarms,[{rabbit@rabbit1,[]}]}]
  • 添加剩余节点
    同第二步骤

遇到的问题:

开始的时候启动rabbitmq服务,没有使用RABBITMQ_NODENAME指定节点在erlang中的sname。导致第二个节点加入的时候,总是提示错误:

   connected to epmd (port 4369) on mqmaster   epmd reports node 'rabbit' running on port 25672   TCP connection succeeded but Erlang distribution failed   suggestion: hostname mismatch?   suggestion: is the cookie set correctly?   suggestion: is the Erlang distribution using TLS?

这个问题特别愁人,我谷歌了一天,中文和英文网站都看了也没找出问题。。。

下面是我排错的过程:

首先手动创建erlang节点,确保两台机器能ping通过.

    $ erl -sname test -setcookie 123

看下节点名称: node().
显示:

    $ erl -sname test1 -setcookie 123

net_adm:ping能ping通,说明节点可以通讯,而且rabbitmq节点之间的cookie是相同的,排除此问题。仔细看下错误提示:

epmd reports node 'rabbit' running on port 25672

说明第二个节点找到了第一个节点的服务器且知道第一个节点在运行.
再看建议:
suggestion: hostname mismatch?
因为看到过RABBITMQ_NODENAME这个配置(不设置的时候,节点为rabbit@ubuntu ,这里ubuntu是你的机器名),对比在第二个节点上执行的命令:

    join_cluster rabbit@rabbit1     

猜测hosts里虽然配置了rabbit1的ip地址,但仅仅这样还是不够的,这里有个hostname的概念,应该不是简单的配置host就可以的,文档上也有说明:

Unix*: rabbit@$HOSTNAMEWindows: rabbit@%COMPUTERNAME%```

所以尝试指定sname,设置hostname,集群加入成功。


0 0