RabbitMQ在Ubuntu上的扩展方法
RabbitMQ的扩展主要通过集群部署(水平扩展节点)和镜像队列(高可用性扩展)实现,以下是针对Ubuntu系统的详细操作步骤:
安装Erlang环境
RabbitMQ基于Erlang开发,需先安装兼容版本的Erlang(如RabbitMQ 3.9需Erlang OTP 22+)。在Ubuntu上可通过以下命令安装:
sudo apt update
sudo apt install erlang
安装完成后,通过erl -version验证版本是否符合要求。
安装RabbitMQ Server
在所有需要扩展的节点上安装RabbitMQ:
sudo apt update
sudo apt install rabbitmq-server
安装完成后,启动服务并设置为开机自启:
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
配置Erlang Cookie
RabbitMQ节点间通过Erlang Cookie(位于/var/lib/rabbitmq/.erlang.cookie)认证通信。需确保所有节点的Cookie文件内容一致且权限正确(400,属主为rabbitmq:rabbitmq)。
scp /var/lib/rabbitmq/.erlang.cookie user@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie user@node3:/var/lib/rabbitmq/
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
配置节点主机名与hosts文件
rmq1、rmq2、rmq3):hostnamectl set-hostname rmq1 --static
/etc/hosts文件中添加节点IP与hostname映射(确保同一局域网内能互相解析):192.168.1.100 rmq1
192.168.1.101 rmq2
192.168.1.102 rmq3
启动主节点并验证状态
在主节点(如rmq1)上启动RabbitMQ服务,检查集群状态:
sudo systemctl start rabbitmq-server
sudo rabbitmqctl status
确认服务运行正常(Status: running)。
将其他节点加入集群
在从节点(如rmq2、rmq3)上执行以下命令:
sudo systemctl stop rabbitmq-server
rabbit@主节点hostname):sudo rabbitmqctl join_cluster rabbit@rmq1
sudo systemctl start rabbitmq-server
验证集群状态
在任意节点上运行cluster_status命令,查看所有节点是否加入集群:
sudo rabbitmqctl cluster_status
输出应包含所有节点的running状态(如rabbit@rmq1、rabbit@rmq2)。
镜像队列将队列数据复制到集群中的多个节点,避免单点故障。设置所有队列镜像的策略如下:
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
ha-all:策略名称(可自定义);"^":匹配所有队列(也可指定队列前缀,如"order_");"ha-mode":"all":表示队列数据复制到所有节点。设置后,新创建的队列会自动镜像到所有节点。若需修改现有队列,需先删除旧队列再重新创建。
节点状态验证
通过cluster_status确认所有节点处于running状态,且running节点数等于集群总节点数。
队列镜像验证
在任意节点创建队列(如test_queue),然后在其他节点查看队列是否存在(sudo rabbitmqctl list_queues name durable),并确认durable属性为true(表示镜像队列)。
故障转移验证
停止主节点服务(sudo systemctl stop rabbitmq-server),检查其他节点是否能自动接管队列(通过cluster_status查看节点状态,通过生产者/消费者测试消息收发是否正常)。
4369(Erlang端口映射)、5672(AMQP协议)、15672(管理界面)等端口。durable属性(true)和消息的persistent属性(true),确保消息不丢失。