在Linux环境中搭建高可用的消息中间件,能够大幅提升消息服务的可靠性,避免单点故障影响业务正常运行。本文以RabbitMQ作为示例消息中间件,结合Keepalived实现主备切换,详细讲解完整的搭建过程。

环境准备
本次搭建需要两台Linux服务器,系统版本推荐使用CentOS 7及以上,两台服务器的配置如下:
- 节点1:IP地址192.168.0.101,作为主节点
- 节点2:IP地址192.168.0.102,作为备节点
- 虚拟IP:192.168.0.103,用于对外提供统一访问入口
首先需要确保两台服务器之间网络互通,并且关闭防火墙或者开放对应端口,RabbitMQ默认使用5672端口提供消息服务,15672端口用于管理界面访问,Keepalived使用112协议进行主备通信。
安装RabbitMQ和Erlang
RabbitMQ依赖Erlang运行环境,需要先安装对应版本的Erlang,再安装RabbitMQ服务。以下是在两台节点上执行的通用安装步骤:
安装Erlang
首先添加Erlang的yum源,然后执行安装命令:
# 添加Erlang仓库 curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash # 安装Erlang sudo yum install -y erlang # 验证Erlang安装成功 erl -version
安装RabbitMQ
添加RabbitMQ的yum源并安装服务:
# 导入RabbitMQ签名密钥 rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc # 添加RabbitMQ仓库 cat <<EOF | sudo tee /etc/yum.repos.d/rabbitmq.repo [rabbitmq_rabbitmq-server] name=rabbitmq_rabbitmq-server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOF # 安装RabbitMQ sudo yum install -y rabbitmq-server # 启动RabbitMQ服务并设置开机自启 sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server
组建RabbitMQ集群
RabbitMQ集群需要保证各个节点的Erlang Cookie一致,Erlang Cookie默认存储在/var/lib/rabbitmq/.erlang.cookie文件中。
同步Erlang Cookie
将节点1的Cookie文件复制到节点2,确保两个节点的Cookie内容完全相同:
# 在节点1执行,查看Cookie内容 cat /var/lib/rabbitmq/.erlang.cookie # 将节点1的Cookie内容替换节点2的Cookie # 先在节点2停止RabbitMQ服务 sudo systemctl stop rabbitmq-server # 在节点1将Cookie文件复制到节点2,假设节点2的ssh用户是root scp /var/lib/rabbitmq/.erlang.cookie root@192.168.0.102:/var/lib/rabbitmq/.erlang.cookie # 在节点2修改Cookie文件权限 sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie # 启动节点2的RabbitMQ服务 sudo systemctl start rabbitmq-server
加入集群
在节点2执行以下命令,将其加入到节点1组成的集群中:
# 停止RabbitMQ应用 sudo rabbitmqctl stop_app # 重置节点2的RabbitMQ状态 sudo rabbitmqctl reset # 加入到节点1的集群,ram表示内存节点,去掉ram则为磁盘节点 sudo rabbitmqctl join_cluster rabbit@node1 # 启动RabbitMQ应用 sudo rabbitmqctl start_app
加入完成后,可以在任意节点执行sudo rabbitmqctl cluster_status查看集群状态,确认两个节点都已经加入集群。
配置镜像队列实现高可用
默认情况下RabbitMQ集群的队列只存在于单个节点,要实现队列的高可用需要配置镜像队列,让队列在多个节点之间同步数据。
执行以下命令配置镜像队列规则,让所有队列在集群的所有节点上进行镜像:
# 设置镜像队列策略,ha-all为策略名称,匹配所有队列,同步到所有节点
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
可以通过以下命令查看已配置的镜像队列策略:
sudo rabbitmqctl list_policies
安装配置Keepalived实现主备切换
Keepalived用于管理虚拟IP,当主节点故障时自动将虚拟IP漂移到备节点,实现服务访问入口的高可用。
安装Keepalived
在两台节点上都执行以下命令安装Keepalived:
sudo yum install -y keepalived
配置主节点Keepalived
编辑主节点(192.168.0.101)的Keepalived配置文件/etc/keepalived/keepalived.conf,内容如下:
global_defs {
router_id rabbitmq_master
}
vrrp_script chk_rabbitmq {
script "/usr/bin/systemctl is-active rabbitmq-server" # 检查RabbitMQ服务状态
interval 2 # 检查间隔2秒
weight -20 # 服务异常时优先级减20
}
vrrp_instance VI_1 {
state MASTER # 主节点角色
interface eth0 # 服务器网卡名称,根据实际修改
virtual_router_id 51 # 虚拟路由ID,主备节点需一致
priority 100 # 优先级,主节点高于备节点
advert_int 1 # 通告间隔1秒
authentication {
auth_type PASS
auth_pass 1111 # 认证密码,主备节点需一致
}
virtual_ipaddress {
192.168.0.103/24 # 虚拟IP地址
}
track_script {
chk_rabbitmq # 跟踪RabbitMQ服务检查脚本
}
}
配置备节点Keepalived
编辑备节点(192.168.0.102)的Keepalived配置文件/etc/keepalived/keepalived.conf,内容如下:
global_defs {
router_id rabbitmq_backup
}
vrrp_script chk_rabbitmq {
script "/usr/bin/systemctl is-active rabbitmq-server"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP # 备节点角色
interface eth0
virtual_router_id 51
priority 90 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.103/24
}
track_script {
chk_rabbitmq
}
}
启动Keepalived服务
在两台节点上都执行以下命令启动Keepalived并设置开机自启:
sudo systemctl start keepalived sudo systemctl enable keepalived
启动后可以在主节点执行ip addr show eth0查看虚拟IP是否已经绑定到网卡上。
验证高可用效果
首先开启RabbitMQ的管理插件,方便查看服务状态:
sudo rabbitmq-plugins enable rabbitmq_management
使用浏览器访问http://192.168.0.103:15672,使用默认账号guest/guest登录,查看集群状态是否正常。
接下来进行故障测试:
- 在主节点执行
sudo systemctl stop rabbitmq-server停止RabbitMQ服务 - 等待2秒后查看虚拟IP是否漂移到备节点,访问
http://192.168.0.103:15672是否还能正常打开管理界面 - 在备节点查看集群状态,确认服务仍然可用
- 重新启动主节点的RabbitMQ和Keepalived服务,确认虚拟IP是否回到主节点
如果以上测试都通过,说明Linux上的高可用消息中间件已经搭建完成,能够正常提供高可用的消息服务。
Linux消息中间件高可用KeepalivedRabbitMQ修改时间:2026-06-18 23:33:58