RabbitMQ在Ubuntu上如何进行集群搭建
RabbitMQ在Ubuntu上的集群搭建步骤
1. 环境准备
- 节点规划:至少准备2台Ubuntu服务器(如
rabbit1
、rabbit2
),确保IP可达(如192.168.1.101
、192.168.1.102
)。 - 网络配置:修改所有节点的
/etc/hosts
文件,添加集群节点IP与主机名映射(如192.168.1.101 rabbit1
、192.168.1.102 rabbit2
),并通过ping
命令验证连通性。 - 时间同步:安装
ntp
或chrony
服务,确保所有节点时间一致(避免集群因时间差异出现问题)。
2. 安装Erlang与RabbitMQ
RabbitMQ基于Erlang开发,需先安装相同版本的Erlang(建议使用RabbitMQ官方推荐的Erlang版本,可通过rabbitmq-server
官方文档查询兼容版本)。
-
安装Erlang:在所有节点执行以下命令(以Ubuntu 22.04为例):
sudo apt update sudo apt install -y erlang
-
安装RabbitMQ:添加RabbitMQ官方APT源(替换为最新版本链接),然后安装:
# 导入RabbitMQ签名密钥 wget -O- https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo apt-key add - echo "deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list sudo apt update sudo apt install -y rabbitmq-server
-
启动服务:安装完成后,RabbitMQ会自动启动,验证状态:
sudo systemctl status rabbitmq-server # 应显示"active (running)"
-
启用管理插件(可选但推荐):为方便远程管理,启用Web管理界面:
sudo rabbitmq-plugins enable rabbitmq_management
管理界面默认端口为
15672
(如http://< 节点IP> :15672
),初始账号为guest
(仅本地访问)。
3. 配置Erlang Cookie(集群认证核心)
Erlang通过Cookie文件实现节点间认证,所有集群节点的Cookie内容必须完全一致。
-
Cookie位置:默认路径为
/var/lib/rabbitmq/.erlang.cookie
(属主为rabbitmq
,权限400
)。 -
同步步骤:
- 在主节点(如
rabbit1
)上复制Cookie文件到其他节点:scp /var/lib/rabbitmq/.erlang.cookie rabbit2:/var/lib/rabbitmq/
- 在所有从节点上修改Cookie权限(确保RabbitMQ进程可读取):
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
- 在主节点(如
-
验证Cookie一致性:通过
cat
命令检查所有节点的Cookie内容是否相同。
4. 加入集群
以rabbit1
为主节点,将rabbit2
加入集群:
-
在从节点(
rabbit2
)上执行:- 停止RabbitMQ应用(保持Erlang虚拟机运行):
sudo rabbitmqctl stop_app
- 重置节点(清除原有集群配置,首次加入无需执行):
sudo rabbitmqctl reset
- 加入主节点集群(
rabbit@< 主节点主机名>
):sudo rabbitmqctl join_cluster rabbit@rabbit1
- 启动RabbitMQ应用:
sudo rabbitmqctl start_app
- 停止RabbitMQ应用(保持Erlang虚拟机运行):
-
验证集群状态:在任意节点执行以下命令,查看所有节点是否加入:
sudo rabbitmqctl cluster_status
输出应包含所有节点的
disc
(磁盘节点)或ram
(内存节点)状态。
5. 配置镜像队列(高可用可选)
默认情况下,队列仅在单个节点存储,若需实现队列冗余(所有节点都有队列副本),需配置镜像队列策略:
-
设置镜像策略(将所有队列镜像到所有节点):
sudo rabbitmqctl set_policy ha-all "^" '{ "ha-mode":"all"} '
ha-all
:策略名称(可自定义)。"^"
:匹配所有队列(正则表达式)。ha-mode":"all"
:表示所有节点都存储队列副本。
-
验证镜像效果:创建队列后,通过管理界面或
rabbitmqctl list_queues
命令查看队列的Mirrored
状态。
6. 关键注意事项
- 节点类型:至少配置2个磁盘节点(存储元数据,避免单点故障),内存节点(
--ram
)用于提升性能(但重启后数据丢失)。 - 网络分区处理:在
/etc/rabbitmq/rabbitmq.conf
中添加以下配置,避免网络分区导致脑裂:cluster_partition_handling = pause_minority
- 数据持久化:创建队列时设置
durable=true
,消息设置delivery_mode=2
(持久化消息),确保节点重启后数据不丢失。
7. 扩展与维护
- 扩容:将新节点加入集群(重复“加入集群”步骤)。
- 缩容:从集群中移除节点(
sudo rabbitmqctl forget_cluster_node rabbit@< 节点主机名>
)。 - 监控:集成Prometheus+Grafana监控集群指标(如消息堆积、节点状态)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: RabbitMQ在Ubuntu上如何进行集群搭建
本文地址: https://pptw.com/jishu/718426.html