前面章节介绍了怎样搭建一个存在多台服务器的 RabbitMQ 服务集群。由于某些因素的限制,有时候不得不在单台物理机器上去创建一个多 RabbitMQ 服务节点的集群。例如:实验性地验证集群的某些特性。
如果要在一台机器上部署多个 RabbitMQ 服务节点,需要确保每个服务节点都有独立的名称、数据存储位置、端口号(包括插件的端口号)等。
我们将在主机名称为 hxstrive 的机器上创建一个由 rabbitl@hxstrive、rabbit2@hxstrive、rabbit3@hxstrive 三个节点组成的 RabbitMQ 集群。
(1)首先,需要确保机器上己经安装了 Erlang 和 RabbitMQ 的程序。
(2)其次,为每个 RabbitMQ 服务节点设置不同的端口号和节点名称来启动相应的服务。命令如下:
[root@hxstrive ~]# rabbitmqctl stop Stopping and halting node rabbit@hxstrive ... [root@hxstrive ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached [root@hxstrive ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached [root@hxstrive ~]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
注意:在成功启动 rabbitl@hxstrive 节点的服务之后,继续启动 rabbit2@hxstrive 和 rabbit@hxstrive 服务节点会遇到启动失败的情况。错误信息如下:
[root@hxstrive ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached & tail -f /var/log/rabbitmq/rabbit2@hxstrive.log ... 2022-04-11 12:52:20.937033+08:00 [notice] <0.44.0> Application rabbitmq_management exited with reason: {bad_return,{{rabbit_mgmt_app,start,[normal,[]]},{'EXIT',{{could_not_start_listener,...}} 2022-04-11 12:52:20.950602+08:00 [error] <0.459.0> 2022-04-11 12:52:20.950602+08:00 [error] <0.459.0> BOOT FAILED 2022-04-11 12:52:20.950602+08:00 [error] <0.459.0> =========== 2022-04-11 12:52:20.950602+08:00 [error] <0.459.0> Error during startup: {error, 2022-04-11 12:52:20.950602+08:00 [error] <0.459.0> {rabbitmq_management, ...
这是由于配置发生了冲突而造成后面的服务节点启动失败,这需要进一步确认是否开启了某些功能。例如:是否启动 rabbitmq_ management 插件。如果启动了 rabbitmq_management 插件,就需要为每个服务节点配置一个对应插件端口号。命令如下:
[root@hxstrive ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server -detached [root@hxstrive ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached [root@hxstrive ~]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" rabbitmq-server -detached
当所有服务启动完成后,可以使用 netstat 命令查看 RabbitMQ 服务端口是否启动成功。命令如下:
[root@hxstrive ~]# netstat -ano | grep 567 tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:25673 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:25674 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:15673 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:15674 0.0.0.0:* LISTEN off (0.00/0/0) tcp6 0 0 :::5672 :::* LISTEN off (0.00/0/0) tcp6 0 0 :::5673 :::* LISTEN off (0.00/0/0) tcp6 0 0 :::5674 :::* LISTEN off (0.00/0/0)
(3)在将 RabbitMQ 各节点服务启动后,通过 rabbitmqctl join_cluster 命令将 rabbit2@hxstrive 节点加入 rabbitl@hxstrive 集群之中,命令如下:
[root@hxstrive ~]# rabbitmqctl -n rabbit2@hxstrive stop_app Stopping rabbit application on node rabbit2@hxstrive [root@hxstrive ~J# rabbitmqctl -n rabbit2@hxstrive reset Resetting node rabbit2@hxstrive [root@hxstrive ~]# rabbitmqctl -n rabbit2@hxstrive join_cluster rabbit1@hxstrive Clustering node rabbit2@hxstrive with rabbit1@hxstrive [root@hxstrive ~]# rabbitmqctl -n rabbit2@hxstrive start_app Starting node rabbit2@hxstrive
接着将 rabbit3@hxstrive 节点也加入到集群,命令如下:
[root@hxstrive ~]# rabbitmqctl -n rabbit3@hxstrive stop_app Stopping rabbit application on node rabbit3@hxstrive [root@hxstrive ~J# rabbitmqctl -n rabbit3@hxstrive reset Resetting node rabbit3@hxstrive [root@hxstrive ~]# rabbitmqctl -n rabbit3@hxstrive join_cluster rabbit1@hxstrive Clustering node rabbit3@hxstrive with rabbit1@hxstrive [root@hxstrive ~]# rabbitmqctl -n rabbit3@hxstrive start_app Starting node rabbit2@hxstrive
最后通过 rabbitmqctl cluster_status 命令来查看各个服务节点的集群状态:
[root@hxstrive ~]# rabbitmqctl -n rabbit1@hxstrive cluster_status Cluster status of node rabbit1@hxstrive ... Basics Cluster name: rabbit1@hxstrive Disk Nodes rabbit1@hxstrive rabbit2@hxstrive rabbit3@hxstrive Running Nodes rabbit1@hxstrive rabbit2@hxstrive rabbit3@hxstrive Versions rabbit1@hxstrive: RabbitMQ 3.9.14 on Erlang 24.3.3 rabbit2@hxstrive: RabbitMQ 3.9.14 on Erlang 24.3.3 rabbit3@hxstrive: RabbitMQ 3.9.14 on Erlang 24.3.3 ...
当然,你也可以使用 rabbitmq_management 插件提供的 Web 界面查看集群状态,如下图: