RabbitMQ集群配置简单记录

本文详细介绍了如何配置RabbitMQ集群,包括通过ssh设置主机互访,配置Erlang Cookie,以及节点间的加入和状态检查。同时,提供了使用Docker创建RabbitMQ集群的步骤,包括拉取镜像、创建容器和执行集群命令。最后提到了RabbitMQ集群的两种模式——普通集群和镜像队列模式,并展示了配置镜像模式的命令。

1.配置集群

RabbitMQ通过ssh通道进行集群直接的链接,这里准备了两台服务器分别如下

192.168.0.1 主机名 RabbitMQ-1 
192.168.0.1 主机名 RabbitMQ-2 

首先我们需要在这两台机器上配置好互相的host可以通过主机名进行访问

vim /etc/hosts
内网地址 RabbitMQ-1
内网地址 RabbitMQ-2
service network restart
#在 RabbitMQ-1 能通:
ping RabbitMQ-2
#在 RabbitMQ-2 能通:
ping RabbitMQ-1

1.1 配置 Erlang Cookie

当我们可以ping通之后我们需要设置一下 Erlang Cookie 让两台机器保持同样的 Cookie 才能顺利的建立集群

先启动双方的RabbitMQ
复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
重启RabbitMQ-2 RabbitMQ服务

1.2 join服务器建立关联

Cookie我们已经配置好了 接下来需要把两个集群关联起来

对 RabbitMQ-1 节点做如下操作

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

这个是用来在rabbitmq1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.

RabbitMQ-2 节点服务配置脚本

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@RabbitMQ-1
rabbitmqctl start_app

1.3 查看集群状态

可以通过 rabbitmqctl cluster_status 查看到如下状态证明集群已经配置成功

[root@Sunmi-RabbitMQ-1 ~]# rabbitmqctl cluster_status
Cluster status of node ‘rabbit@Sunmi-RabbitMQ-1’ …
[{nodes,[{disc,[‘rabbit@Sunmi-RabbitMQ-1’]},
         {ram,[‘rabbit@Sunmi-RabbitMQ-2’]}]},
 {running_nodes,[‘rabbit@Sunmi-RabbitMQ-2’,’rabbit@Sunmi-RabbitMQ-1’]},
 {cluster_name,<<“rabbit@Sunmi-RabbitMQ-1”>>},
 {partitions,[]},
 {alarms,[{‘rabbit@Sunmi-RabbitMQ-2’,[]},{‘rabbit@Sunmi-RabbitMQ-1’,[]}]}]

注意:建立好集群之后需要重新配置一下用户 配置的用户会影响整个集群

集群的各项模式

通常情况下,在集群中我们把每一个服务称之为一个节点,在 RabbitMQ 集群中,节点类型可以分为两种:

内存节点:元数据存放于内存中。为了重启后能同步数据,内存节点会将磁盘节点的地址存放于磁盘之中,除此之外,如果消息被持久化了也会存放于磁盘之中,因为内存节点读写速度快,一般客户端会连接内存节点。
磁盘节点:元数据存放于磁盘中(默认节点类型),需要保证至少一个磁盘节点,否则一旦宕机,无法恢复数据,从而也就无法达到集群的高可用目的。

PS:元数据,指的是包括队列名字属性、交换机的类型名字属性、绑定信息、vhost等基础信息,不包括队列中的消息数据。
RabbitMQ 中的集群主要有两种模式:普通集群模式和镜像队列模式。

配置镜像模式只需要在主节点运行如下命令:

  • p 之后加上你需要的Vhost
 rabbitmqctl set_policy -p / ha-all “^” ‘{“ha-mode”:”all”}’

附件:
使用docker
一、拉取镜像

docker pull rabbitmq:3.7-management

二、创建容器
1、新建目录

mkdir rabbitmq01 rabbitmq02 rabbitmq03

2、创建容器

docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v /downloads/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ rabbitmq:3.7-management
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v /downloads/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.7-management
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v /downloads/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.7-management

三、容器执行命令
容器一

docker exec -it rabbitmqCluster01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

容器二

docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

容器三

docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

回到容器一

docker exec -it rabbitmqCluster01 bash
rabbitmqctl set_policy -p / ha “^” ‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’
### Linux系统中配置和搭建RabbitMQ集群的最佳实践 #### 一、准备工作 在Linux环境中搭建RabbitMQ集群之前,需确保每台服务器已安装Erlang运行环境以及RabbitMQ服务软件。通常建议使用相同版本的操作系统、Erlang和RabbitMQ以减少兼容性问题。 #### 二、启动与初始化RabbitMQ服务 通过命令行工具完成RabbitMQ的基础操作,包括启动、停止和服务状态查询。具体命令如下: - 启动RabbitMQ服务:`systemctl start rabbitmq-server`[^2]。 - 查询当前RabbitMQ的状态:`systemctl status rabbitmq-server`。 - 设置RabbitMQ随操作系统启动:`systemctl enable rabbitmq-server`。 #### 三、启用管理插件 为了方便监控和管理RabbitMQ集群,可以启用其内置的Web管理界面插件。执行以下命令即可激活该功能: ```bash rabbitmq-plugins enable rabbitmq_management ``` 此命令会加载必要的模块并开放HTTP接口供浏览器访问,默认地址为http://<server-ip>:15672/[^1]。 #### 四、构建基础集群架构 假设我们有三个节点分别命名为rabbit@node1, rabbit@node2 和 rabbit@node3,则按照以下步骤创建一个简单RabbitMQ集群: 1. **进入容器内部终端** 使用Docker容器部署时,先进入目标容器实例: ```bash docker exec -it rabbitmqCluster03 /bin/bash ``` 2. **停止应用程序进程** 停止正在运行的应用程序以便后续重置或加入其他集群成员: ```bash rabbitmqctl stop_app ``` 3. **清除现有数据记录** 如果这是重新配置或者迁移过程中的一部分工作,则需要清理之前的集群信息: ```bash rabbitmqctl reset ``` 4. **连接到指定主节点形成新集群** 将次级节点关联至主要节点(rabbit@rabbitmq01),这里采用内存优化型参数--ram来提升性能表现: ```bash rabbitmqctl join_cluster --ram rabbit@rabbitmq01 ``` 5. **重启应用使更改生效** 最后一步就是再次开启服务让所有的调整得以实施: ```bash rabbitmqctl start_app exit ``` 以上过程重复应用于每一个额外增加的新节点直至整个网络拓扑完全成型[^3]。 #### 五、高级特性——镜像队列模式 对于追求更高层次的数据安全性和持续可用性的应用场景来说,“镜像队列”无疑是一个值得考虑的选择方案。它的工作原理是在不同的物理位置之间复制消息内容从而达到冗余备份的目的。当任意单点发生故障时仍能保障核心业务流程不受影响继续正常运转下去[^4]。 #### 六、实际案例分析 基于上述理论指导原则,在真实世界里可能遇到的具体情况如下所示: | IP Address | Role | Additional Services | |-------------------|--------------------|----------------------------| | 192.168.111.133 | Memory Node | HAProxy & Keepalived (Master) | | 192.168.111.134 | Memory Node | HAProxy & Keepalived (Backup) | | 192.168.111.135 | Disk Node | Virtual IP Address Assignment | 其中特别需要注意的是VIP(虚拟IP)分配给外部客户端作为统一入口点简化了负载均衡机制的设计复杂度同时提高了系统的健壮程度[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值