千家信息网

centos7.3 rabbitmq集群

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,RabbitMQ集群概述通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接
千家信息网最后更新 2026年11月03日centos7.3 rabbitmq集群

RabbitMQ集群概述

通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。

这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。


安装 Erlang、RabbitMQ

http://yanconggod.blog.51cto.com/1351649/1933009

修改 /etc/hosts

加入集群 3 个节点的对应关系:

10.0.0.231 node1

10.0.0.232 node2

10.0.0.233 node3


设置 Erlang Cookie

RabbitMQ节点之间和命令行工具 (e.g. rabbitmqctl)是使用Cookie互通的,Cookie是一组随机的数字+字母的字符串。当RabbitMQ服务器启动的时候,Erlang VM会自动创建一个随机内容的Cookie文件。如果是通过yum源安装RabbitMQ的话,Erlang Cookie 文件在/var/lib/rabbitmq/.erlang.cookie。如果是通过源码安装的RabbitMQ,Erlang Cookie文件$HOME/.erlang.cookie。

本文演示的实例是用源码安装,由于这个文件权限是 400,所以需要先修改 node2、node3 中的该文件权限为 777:

node1:yancongadmin@node1:~$ chmod 777 .erlang.cookienode2:yancongadmin@node2:~$ chmod 777 .erlang.cookieyancongadmin@node2:~$ scp -r node1:/home/yancongadmin/.erlang.cookie ~/yancongadmin@node1's password:.erlang.cookie                                                                                     100%   20     0.0KB/s   00:00node3:yancongadmin@node3:~$ chmod 777 .erlang.cookieyancongadmin@node3:~$ scp -r node1:/home/yancongadmin/.erlang.cookie ~/yancongadmin@node1's password:.erlang.cookie                                                                                     100%   20     0.0KB/s   00:00

分别在node1、node2、node3将权限恢复过来:

yancongadmin@node1:~$ chmod 400 .erlang.cookie

最后分别在确认三台机器上的.erlang.cookie的值是一致的

yancongadmin@node1:~$ cat .erlang.cookieVORMVSAAOFOFEQKTNWBByancongadmin@node2:~$ cat .erlang.cookieVORMVSAAOFOFEQKTNWBByancongadmin@node3:~$ cat .erlang.cookieVORMVSAAOFOFEQKTNWBB

使用detached参数,在后台启动Rabbit Node

yancongadmin@node1:~$ rabbitmqctl stopStopping and halting node rabbit@node1 ...Gracefully halting Erlang VMyancongadmin@node1:~$ rabbitmq-server -detached

通过rabbitmqctl cluster_status命令,可以查看和个节点的状态,节点的名称是rabbit@shorthostname,

node1:yancongadmin@node1:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node1 ...[{nodes,[{disc,[rabbit@node1]}]}, {running_nodes,[rabbit@node1]}, {cluster_name,<<"rabbit@node1">>}, {partitions,[]}, {alarms,[{rabbit@node1,[]}]}]node2:yancongadmin@node2:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node2 ...[{nodes,[{disc,[rabbit@node2]}]}, {running_nodes,[rabbit@node2]}, {cluster_name,<<"rabbit@node2">>}, {partitions,[]}, {alarms,[{rabbit@node2,[]}]}]  node3:yancongadmin@node3:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node3 ...[{nodes,[{disc,[rabbit@node3]}]}, {running_nodes,[rabbit@node3]}, {cluster_name,<<"rabbit@node3">>}, {partitions,[]}, {alarms,[{rabbit@node3,[]}]}]

将node1、node2、node3组成集群

因为rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用并将节点设置为原始状态,然后就为加入集群准备好了。如果使用./rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。

node2:yancongadmin@node2:~$ rabbitmqctl stop_appStopping node rabbit@node2 ...yancongadmin@node2:~$ rabbitmqctl join_cluster rabbit@node1Clustering node rabbit@node2 with rabbit@node1 ...yancongadmin@node2:~$ rabbitmqctl start_appStarting node rabbit@node2 ...node3:yancongadmin@node3:~$ rabbitmqctl stop_appStopping node rabbit@node3 ...yancongadmin@node3:~$ rabbitmqctl join_cluster rabbit@node1Clustering node rabbit@node3 with rabbit@node1 ...yancongadmin@node3:~$ rabbitmqctl start_appStarting node rabbit@node3 ...

此时 node2 与 node3 也会自动建立连接。


如果要使用内存节点,则可以使用以下命令:

yancongadmin@node2:~$ rabbitmqctl join_cluster --ram rabbit@node1

集群配置好后,可以在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。

node1:yancongadmin@node1:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node1 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}, {running_nodes,[rabbit@node1]}, {cluster_name,<<"rabbit@node1">>}, {partitions,[]}, {alarms,[{rabbit@node1,[]}]}]node2:yancongadmin@node2:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node2 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{alarms,[{rabbit@node1,[]}]}]node3:yancongadmin@node3:~$ rabbitmqctl cluster_statusCluster status of node rabbit@node3 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}, {alarms,[{rabbit@node1,[]}]}]

RabbitMQ镜像功能

使用Rabbit镜像功能,需要基于RabbitMQ策略来实现,策略是用来控制和修改群集范围的某个vhost队列行为和Exchange行为

yancongadmin@node2:~$ rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'

这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 "^" 表示所有匹配所有队列名称。

例如下面的命令,^message 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"。

yancongadmin@node2:~$ rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'

在任意一个节点上执行:

yancongadmin@node2:#  rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。

我使用过的例子,仅供参考:

rabbitmqctl set_policy ha-xxx "^cn\.xxx" \   '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-promote-on-shutdown":"always","ha-sync-batch-size":20}'   rabbitmqctl set_policy queue-xxx "^queue" \   '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-promote-on-shutdown":"always","ha-sync-batch-size":20}'


如果需要负载均衡器,需要安装并配置 HAProxy

例如:

listen rabbitmq_cluster 0.0.0.0:5672 mode tcpbalance roundrobin server   node1 10.0.0.231:5672 check inter 2000 rise 2 fall 3 server   node2 10.0.0.232:5672 check inter 2000 rise 2 fall 3server   node3 10.0.0.233:5672 check inter 2000 rise 2 fall 3

参考:http://idoall.org/blog/post/lion/15

节点 队列 集群 策略 应用 名称 命令 文件 状态 镜像 服务 配置 权限 一致 功能 模式 消息 源码 行为 表达式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 互联网科技公司起名 互联网科技保险 北京互联网科技 杭州互联网科技公司 齐家互联网科技有限公司 互联网科技的未来发展 科技伦理 互联网公司 常德市电业局互联网科技部 湖南诚度互联网科技有限公司 互联网科技革命什么开始 中国互联网十大科技股排名 东莞新华互联网科技学校 恒生互联网科技业指数调整周期 沐思想互联网科技有限公司 小米互联网科技园入驻 广东工业互联网大赛深圳学泰科技 广州有谷有贝互联网科技有限公司 互联网时代高科技布局 杭州融税互联网科技有限公司 天津市摩尔互联网科技 互联网是不是新科技 互联网巨头反垄断金融科技 互联网科技公司电话 互联网5g黑科技有哪些 宜昌元轩互联网科技有限公司 徐州市互联网科技有限公司 黑云互联网科技有限公司 互联网相关科技技术 九思连强互联网电子科技有限公司
0