如何在Linux上设置高可用的消息中间件

来源:编程网作者:三上悠亚头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何在Linux上设置高可用的消息中间件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上设置高可用的消息中间件》有用,将其分享出去将是对创作者最好的鼓励。

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

如何在Linux上设置高可用的消息中间件

环境准备

本次搭建需要两台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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。