RabbitMQ集群部署

目录

1.环境准备

1.1关闭防火墙和selinux

1.2本地解析

1.3安装rabbitmq软件

1.4启动服务

1.5创建用户

1.6开启用户远程登录

 2.开始部署集群(三台机器都操作)

2.1首先创建好数据存放目录和·日志存放目录

2.2 拷贝erlang.cookie

2.3 将Rabbitmq-1、Rabbitmq-2作为内存节点加⼊mq节点集群中

2.4 查看集群状态

​编辑3.登录rabbitmq web管理控制台

3.RabbitMQ镜像集群配置

3.1创建镜像集群

3.2添加集群成功,查看队列。


RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

一个rabbitmq集 群中可以共享 user,vhost,queue,exchange等,所有的数据和状态都是必须在所有节点上复制的。

1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)

2 磁盘节点:保存状态到内存和磁盘。

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了

如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。

1.环境准备

192.168.18.135    rabbitmq
192.168.18.137    rabbitmq-1
192.168.18.138    rabbitmq-2

1.1关闭防火墙和selinux

1.2本地解析

[root@rabbitmq ~]# vim /etc/hosts

1.3安装rabbitmq软件

安装依赖
[root@rabbitmq ~]# yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel
yum安装erlang
[root@rabbitmq ~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
[root@rabbitmq ~]# yum install erlang-21.3.8.21-1.el7.x86_64
安装rabbitmq
https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.10
[root@rabbitmq ~]# yum install rabbitmq-server-3.7.10-1.el7.noarch.rpm

1.4启动服务

[root@rabbitmq ~]# systemctl daemon-reload
[root@rabbitmq ~]# systemctl start rabbitmq-server
[root@rabbitmq ~]# systemctl enable rabbitmq-server
启动方式二:
[root@rabbitmq ~]# /sbin/service rabbitmq-server status  ---查看状态
[root@rabbitmq ~]# /sbin/service rabbitmq-server start   ---启动
每台都操作开启rabbitmq的web访问界面:
[root@rabbitmq ~]# rabbitmq-plugins enable rabbitmq_management

1.5创建用户

注意:在一台机器操作
添加用户和密码
[root@rabbitm
部署 RabbitMQ 集群可以通过多种方式实现,包括传统的物理或虚拟机部署、使用 Docker 容器化部署以及结合 Kubernetes 进行容器编排部署。以下是基于不同环境的部署方法和步骤: ### 一、传统模式下的 RabbitMQ 集群部署 在传统模式下,RabbitMQ 节点之间通过 Erlang 分布式机制进行通信,所有节点共享相同的元数据(如队列定义、交换机类型等),但消息和队列仅存在于其声明所在的节点上。 #### 部署步骤: 1. **安装 Erlang 和 RabbitMQ** 在每台目标主机上安装相同版本的 Erlang 和 RabbitMQ,确保它们能够正常启动并运行。 2. **配置主机名与网络互通** 每个节点需要能够通过主机名解析到其他节点,并且开放必要的端口(如 4369、25672、5672、15672 等)[^3]。 3. **初始化第一个节点** 启动第一个节点作为磁盘节点: ```bash rabbitmq-server -detached rabbitmqctl join_cluster --ram rabbit@node1 ``` 4. **加入其他节点** 在第二个及后续节点上执行以下命令将其加入集群: ```bash rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app ``` 5. **验证集群状态** 使用以下命令查看集群状态: ```bash rabbitmqctl cluster_status ``` --- ### 二、Docker 环境下部署 RabbitMQ 集群 Docker 提供了轻量级的容器化部署能力,可以快速搭建多节点 RabbitMQ 集群。 #### 部署步骤: 1. **准备 Docker 环境** 确保所有节点已安装 Docker 并可正常运行容器。 2. **创建自定义网络** 创建一个自定义桥接网络以保证节点间通信: ```bash docker network create rabbitmq-net ``` 3. **启动第一个节点** 使用以下命令启动第一个 RabbitMQ 节点: ```bash docker run -d \ --hostname node1 \ --name rabbitmq-node1 \ -p 15672:15672 \ -p 5672:5672 \ -e RABBITMQ_ERLANG_COOKIE='secretcookie' \ -e RABBITMQ_NODENAME=rabbit@node1 \ --network rabbitmq-net \ rabbitmq:3-management ``` 4. **启动其他节点并加入集群** 第二个节点启动后加入集群: ```bash docker run -d \ --hostname node2 \ --name rabbitmq-node2 \ -p 15673:15672 \ -p 5673:5672 \ -e RABBITMQ_ERLANG_COOKIE='secretcookie' \ -e RABBITMQ_NODENAME=rabbit@node2 \ --network rabbitmq-net \ rabbitmq:3-management ``` 进入容器内部执行集群加入命令: ```bash docker exec -it rabbitmq-node2 bash rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app ``` 5. **验证集群状态** 访问任意节点的管理界面(如 `http://localhost:15672`)查看集群成员信息。 --- ### 三、Kubernetes 环境下部署 RabbitMQ 集群 Kubernetes 提供了强大的自动化编排能力,适合大规模部署 RabbitMQ 集群。 #### 部署步骤: 1. **创建命名空间** ```bash kubectl create ns rabbitmq ``` 2. **创建 RBAC 权限** 编写 ServiceAccount、Role 和 RoleBinding 的 YAML 文件,赋予相应的权限。 3. **配置持久化存储(如 NFS)** 创建 StorageClass 或直接使用 PersistentVolume 和 PersistentVolumeClaim 以确保数据持久化。 4. **编写 StatefulSet 和 Headless Service** StatefulSet 用于管理有状态应用,Headless Service 用于节点发现: ```yaml apiVersion: v1 kind: Service metadata: name: rabbitmq namespace: rabbitmq spec: clusterIP: None ports: - port: 5672 name: amqp - port: 15672 name: management selector: app: rabbitmq --- apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq namespace: rabbitmq spec: serviceName: rabbitmq replicas: 3 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: containers: - name: rabbitmq image: rabbitmq:3-management ports: - containerPort: 5672 name: amqp - containerPort: 15672 name: management env: - name: RABBITMQ_ERLANG_COOKIE value: "secretcookie" - name: RABBITMQ_NODENAME valueFrom: fieldRef: fieldPath: metadata.name volumeMounts: - name: data mountPath: /var/lib/rabbitmq volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi ``` 5. **初始化集群** 使用 InitContainer 或 Job 执行集群初始化脚本,确保节点自动加入集群。 6. **验证部署** 查看 Pod 状态和日志,确认所有节点正常运行并组成集群: ```bash kubectl get pods -n rabbitmq kubectl logs <pod-name> -n rabbitmq ``` --- ### 四、注意事项 - **Erlang Cookie 一致性**:所有节点必须使用相同的 Erlang cookie,否则无法建立集群连接。 - **持久化存储**:为防止数据丢失,建议使用持久卷(Persistent Volume)进行数据持久化。 - **网络策略**:确保节点间的通信端口(如 4369、25672、5672)开放,特别是在 Kubernetes 中应合理配置网络策略。 - **资源限制**:根据业务负载合理设置 CPU 和内存资源请求与限制,避免资源争用导致性能下降。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值