我这里使用三台阿里云服务器搭建RabbitMQ集群。 1.首先使用cat /etc/hostname 查看自己这三台云服务器的名字。当然也可以按照自己的想法修改,使用vim /etc/hostname 就可已修改,如何进行编辑和保存,可以百度搜一下。保存之后,需要重启云服务器才能生效。 图中1和2都是hostname,修改过/etc/hostname之后,必须重启之后,1和/etc/hostname的值才能一样。 2. 使用vim /etc/hosts 填写下边的格式的内容:
xxx.xxx.xxx.xxx hostname
这里“xxx.xxx.xxx.xxx”是ip。 我这里有三台云服务器,那么我就需要填三条,底下不是真实ip和hostname,如有雷同,纯属虚构。比如:
10.124.78.12 Ali398V16
12.34.56.90 Ali398V17
125.34.56.121 Ali398V17
大家一定按照自己的真实情况填写。 3.从https://github.com/rabbitmq/erlang-rpm/releases下载rabbitmq需要的erlang依赖包,从https://github.com/rabbitmq/rabbitmq-server/releases下载rabbitmq安装包。从https://www.rabbitmq.com/官网中,可以看到rabbitmq每个版本所依赖的erlang版本。 4. 我这下载的是erlang-23.2.7-1.el7.x86_64.rpm和rabbitmq-server-3.9.15-1.el7.noarch.rpm到/root目录下,然后进到/root,先执行rpm -ivh erlang-23.2.7-1.el7.x86_64.rpm 进行安装,然后使用rpm -Uvh rabbitmq-server-3.9.15-1.el7.noarch.rpm 命令安装。 5.进入到阿里云ecs控制台进行安全组的添加。 把4369、5672、15672和25672四个端口都添加上。
6.先在第1台节点上,systemctl start rabbitmq-server.service 启动rabbitmq-server服务,systemctl status rabbitmq-server.service 查看rabbitmq-server服务状态,rabbitmqctl cluster_status 查看集群状态。 7.现在需要让三个节点中/var/lib/rabbitmq/目录下.erlang.cookie 这个文件要一模一样。在当前云服务器上,可以在第1台节点上使用scp给第2个节点和第3个节点进行文件传输,使用scp 各级目录名/需要传输文件名 用户名@ip或者/etc/hosts中hostname:各级目录名/传输目标文件名 ,我这里使用scp /var/lib/rabbitmq/.erlang.cookie root@Ali472V4:/var/lib/rabbitmq/.erlang.cookie 。登录上Ali472V4这个节点,然后使用ll -a /var/lib/rabbitmq/ 查看一下.erlang.cookie 这个文件信息,如果用户不是rabbitmq,用户组不是rabbitmq的话,需要chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie 命令进行修改;若文件权限不是-rw------- 的话,需要使用chmod 600 /var/lib/rabbitmq/.erlang.cookie 命令进行修改。同样的,也需要先使用scp /var/lib/rabbitmq/.erlang.cookie root@Ali472V2:/var/lib/rabbitmq/.erlang.cookie 远程传输文件,然后再看用户、用户组和文件权限情况,不符合要求的话,需要使用相应的命令进行修改。 8.在Ali472V4上执行systemctl start rabbitmq-server.service ,然后查看状态systemctl status rabbitmq-server.service 。 状态正常之后,rabbitmqctl stop_app 命令先停止,然后rabbitmqctl join_cluster rabbit@Ali398V16 加入节点,之后rabbitmqctl start_app 打开。 使用rabbitmqctl cluster_status 查看集群状态。 运行节点现在有两个。之后在Ali472V2上,像上一个节点一样,执行systemctl start rabbitmq-server.service 之后执行systemctl status rabbitmq-server.service 查看服务状态,rabbitmqctl stop_app 命令先停止,然后rabbitmqctl join_cluster rabbit@Ali398V16 加入节点,之后rabbitmqctl start_app 打开,rabbitmqctl cluster_status 查看集群状态。 9.在自己本机上的浏览器使用ip:15672 可以进入登录页面。我这里用户名和密码都输入guest进去,发现提示“User can only log in via localhost”。
我在当前Ali398V16节点使用rabbitmqctl add_user 用户名 密码 格式命令,就是rabbitmqctl add_user admin password ,来添加一个密码为“password”,用户名为“admin”的用户。 在本机浏览器上使用用户名“admin”和密码“password”进行登录,发现提示“Not management user”。 使用rabbitmqctl set_user_tags admin administrator 为“admin”用户赋予“administrator”权限。 正常登录进来了,但是发现有一个节点在页面上提示“Node statistics not available”,需要在这个节点上,执行rabbitmq-plugins enable rabbitmq_management 安装插件。 在本机浏览器中,刷新页面,看到正常显示。
我遇到的比较棘手的问题,在执行rabbitmqctl join_cluster rabbit@worker2 命令花了几个小时最终解决的问题。描述如下:
Clustering node rabbit@Ali472V2 with rabbit@worker2
Error: unable to perform an operation on node 'rabbit@worker2'. Please see diagnostics information and suggestions below.
Most common reasons for this are:
* Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
* CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
* Target node is not running
In addition to the diagnostics info below:
* See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
* Consult server logs on node rabbit@worker2
* If target node is configured to use long node names, don't forget to use --longnames with CLI tools
DIAGNOSTICS
===========
attempted to contact: [rabbit@worker2]
rabbit@worker2:
* connected to epmd (port 4369) on worker2
* epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic
* TCP connection succeeded but Erlang distribution failed
* suggestion: check if the Erlang cookie is identical for all server nodes and CLI tools
* suggestion: check if all server nodes and CLI tools use consistent hostnames when addressing each other
* suggestion: check if inter-node connections may be configured to use TLS. If so, all nodes and CLI tools must do that
* suggestion: see the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
Current node details:
* node name: 'rabbitmqcli-911-rabbit@Ali472V2'
* effective user's home directory: /var/lib/rabbitmq
* Erlang cookie hash: /m8U0Ow5FZV0yu0dRJy3BA==
这个原因是worker2不是对应节点中/etc/hostname里边的字符串,在当前节点Ali472V2中,/etc/hosts里边应该写入的hostname应该为对应节点/etc/hostname里边的字符串“Ali398V16”。 解决方案: (1)先使用systemctl stop rabbitmq-server.service 关闭服务。 (2)vim /etc/hosts 修改对应ip后边hostname。 (3)重新打开服务,systemctl start rabbitmq-server.service 。 (4)rabbitmqctl stop_app (5)rabbitmqctl join_cluster rabbit@Ali398V16 可以再使用rabbitmqctl cluster_status 看一下集群状态。 三个节点正常运行。
|