单机搭建RabbitMQ多实例教程
主要参考官方文档:https://www.rabbitmq.com/clustering.html
前提:已下载安装RabbitMQ (安装参考教程:【史上最细教程】CentOS7 下载安装 RabbitMQ(两种方式:手动安装 / Docker安装))
1、查看并暂停已有服务
查看当前RabbitMQ服务,看到是在运行中,先暂停该服务。
这里必须先看下,因为集群配置的前提是你的rabbitmq可以运行起来。
# ps aux|grep rabbitmq 或者systemctl status rabbitmq-server 查看服务状态,确保是能运行起来的 running中
systemctl status rabbitmq-server
# 停止服务
systemctl stop rabbitmq-server
2、两个实例搭建
场景:假设有两个rabbitmq节点,分别为rabbit-1, rabbit-2,rabbit-1作为主节点,rabbit-2作为从节点。
RabbitMQ是Erlang语言编写,该语言天生具有分布式特性,说白了,就是可以直接通过命令指定端口、节点名称等,去启动一个rabbitmq节点实例。
之前一个服务器上搭建多个mysql实例的时候,我是得手动去配置数据存放位置data、进程pid存放位置、配置文件指定端口等、日志位置log等,然后命令启动,但是这个rabbitmq目前看来是指定好端口后,支持直接命令启动一个实例。
正式情况考虑3个结点,集群环境更稳定一点,1个挂了还有另外2个,三角形具有稳定性。
步骤1:节点占用端口梳理
端口解释:
这些端口涉及到RabbitMQ消息队列的不同功能和通信协议。以下是对每个端口的解释:
- 15672: 这是RabbitMQ的HTTP API端口,用于管理和监控RabbitMQ服务器。您可以通过浏览器或使用HTTP客户端工具访问该端口来执行管理操作,如查看队列、交换机、绑定等信息。
- 25672: 这是RabbitMQ的集群通信端口,用于节点之间的内部通信和CLI工具之间的通信。集群中的不同节点使用该端口进行状态同步和节点间通信。
- 5672: 这是RabbitMQ的AMQP(高级消息队列协议)端口,用于与应用程序进行通信。AMQP是RabbitMQ使用的主要协议,它定义了消息的格式、交换机、队列、绑定等概念,以实现可靠的消息传递。
以上是RabbitMQ中常见的端口及其用途。请注意,这些端口在不同的配置和部署中可能会有所变化,具体取决于您的设置和需求。
节点占用端口梳理:
节点 | AMQP协议端口 | web管理监控插件访问端口 | 集群间通信端口 |
---|---|---|---|
rabbit-1 | 5672 | 15672 | 25672 |
rabbit-2 | 5673 | 15673 | 25673 |
步骤2:启动节点
# 启动第一个节点rabbit-1
sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-1 rabbitmq-server start &
# 启动第二个节点rabbit-2
# 注意:web管理插件端口占用,所以还要指定其web插件占用的端口号
# RABBITMQ_SERVER_START_ARGS=”-rabbitmq_management listener [{port,15673}]”
sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit-2 rabbitmq-server start &
# 验证启动
ps aux|grep rabbitmq
查看结点启动进程信息:
步骤3:绑定集群
# rabbit-1操作作为主节点
#停止应用
sudo rabbitmqctl -n rabbit-1 stop_app
#目的是清除节点上的历史数据(如果不清除,无法将节点加入到集群)
sudo rabbitmqctl -n rabbit-1 reset
#启动应用
sudo rabbitmqctl -n rabbit-1 start_app
# rabbit2操作为从节点
# 停止应用
sudo rabbitmqctl -n rabbit-2 stop_app
# 目的是清除节点上的历史数据(如果不清除,无法将节点加入到集群)
sudo rabbitmqctl -n rabbit-2 reset
# 将rabbit2节点加入到rabbit1(主节点)集群当中【Server-node服务器的主机名】
sudo rabbitmqctl -n rabbit-2 join_cluster rabbit-1@'songdanminserver'
# 启动应用
sudo rabbitmqctl -n rabbit-2 start_app
# 验证集群状态
sudo rabbitmqctl cluster_status -n rabbit-1
//集群有两个节点:rabbit-1@服务器主机名、rabbit-2@服务器主机名
步骤4:Web监控、设置账号密码
需要给15672 node-1 和15673的node-2 设置用户名和密码。
# 节点1设置用户、密码,管理权限,对虚拟机/的配置、写入读取权限
rabbitmqctl -n rabbit-1 add_user admin admin
rabbitmqctl -n rabbit-1 set_user_tags admin administrator
rabbitmqctl -n rabbit-1 set_permissions -p / admin ".*" ".*" ".*"
# 节点1设置用户、密码,管理权限,对虚拟机/的配置、写入读取权限
rabbitmqctl -n rabbit-2 add_user admin admin
rabbitmqctl -n rabbit-2 set_user_tags admin administrator
rabbitmqctl -n rabbit-2 set_permissions -p / admin ".*" ".*" ".*"
注意:
如果采用多机部署方式,需读取其中一个节点的cookie, 并复制到其他节点(节点之间通过cookie确定相互是否可通信)。cookie存放在/var/lib/rabbitmq/.erlang.cookie。
例如:主机名分别为rabbit-1、rabbit-2
1、逐个启动各节点
2、配置各节点的hosts文件( vim /etc/hosts)
ip1:rabbit-1
ip2:rabbit-2
其它步骤雷同单机部署方式
访问、账号密码登录:
节点1:http://121.41.53.91:15672/#/ admin/admin