RabbitMQ 教程

搭建伪集群

前面章节介绍了怎样搭建一个存在多台服务器的 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 界面查看集群状态,如下图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号