rabbitmq集群


步骤 1:安装 Erlang 和 RabbitMQ(所有节点)

1.1 安装依赖

bash 复制代码
yum install -y socat logrotate

1.2 下载安装包(以最新稳定版为例)下载 Erlang (匹配 RabbitMQ 版本)

bash 复制代码
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v25.3.2/erlang-25.3.2-1.el7.x86_64.rpm

1.3 下载 RabbitMQ

bash 复制代码
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.12/rabbitmq-server-3.12.12-1.el8.noarch.rpm

1.4 安装步骤

bash 复制代码
yum install -y openssl-libs ncurses-compat-libs zlib libstdc++
rpm -ivh erlang-25.3.2-1.el7.x86_64.rpm --nodeps
rpm -ivh rabbitmq-server-3.12.12-1.el8.noarch.rpm --nodeps

mkdir -p /mq/{data,log}
chown -R rabbitmq:rabbitmq /mq


mkdir -p /mnt/{data,log}
chown -R rabbitmq:rabbitmq /mnt

cat <<EOF > /etc/rabbitmq/rabbitmq-env.conf
MNESIA_BASE=/mq/data
LOG_BASE=/mq/log
EOF

步骤 2:配置主机名解析(所有节点)

bash 复制代码
vi /etc/hosts
192.168.1.100 rmq1
192.168.1.110 rmq2
192.168.1.120 rmq3

步骤 3:同步 Erlang Cookie(所有节点)

bash 复制代码
从节点1复制 cookie 到其他节点
scp /var/lib/rabbitmq/.erlang.cookie root@rmq2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@rmq3:/var/lib/rabbitmq/

设置权限(所有节点)

bash 复制代码
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie

步骤 4:启动服务并组建集群

4.1 启动所有节点

bash 复制代码
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

4.2 将节点加入集群

在节点2执行(加入节点1)

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rmq1
rabbitmqctl start_app

在节点3执行(以内存节点加入)

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rmq1
rabbitmqctl join_cluster --ram rabbit@rmq1
rabbitmqctl start_app

4.3 验证集群状态

bash 复制代码
rabbitmqctl cluster_status
输出应包含:

plaintext
Disk Nodes: [rabbit@rmq1, rabbit@rmq2]
RAM Nodes: [rabbit@rmq3]

启用管理插件
rabbitmq-plugins enable rabbitmq_management

创建管理员用户

bash 复制代码
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

重启RabbitMQ服务(所有节点)

bash 复制代码
systemctl restart rabbitmq-server
bash 复制代码
增加文件句柄限制
echo "fs.file-max = 500000" >> /etc/sysctl.conf
sysctl -p
more rabbitmq.conf 
#网络优化
tcp_listen_options.backlog = 4096
tcp_listen_options.nodelay = true
tcp_listen_options.linger.on = true
tcp_listen_options.linger.timeout = 0
 内存管理
vm_memory_high_watermark.relative = 0.75
vm_memory_calculation_strategy = rss
文件IO优化
channel_max = 5000
disk_free_limit.absolute = 10GB
queue_index_embed_msgs_below = 4096  # 4KB以下消息嵌入索引

配置镜像集群策略

bash 复制代码
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

步骤四 监控配置

bash 复制代码
启用插件
#获取集群名称
rabbitmq-diagnostics -q cluster_status
#设置集群名称
rabbitmqctl -q set_cluster_name myrabbitmq
#启用插件
rabbitmq-plugins enable rabbitmq_prometheus

RabbitMQ 在专用 TCP 端口(默认为15692)上公开指标,因此rabbitmq集群需要开放15692端口才行。

配置prometheus

yaml 复制代码
- job_name: 'rabbitMq-prod'
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.1.100:15692']
        labels:
          cluster: smat-rabbitmq
      - targets: ['192.168.1.110:15692']
        labels:
          cluster: smat-rabbitmq
      - targets: ['192.168.1.120:15692']
        labels:
          cluster: smat-rabbitmq
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
      - source_labels: [__address__]
        regex: '192.168.1.100:15692'
        target_label: rabbitmq_node
        replacement: 'rabbit@rmq11'
      - source_labels: [__address__]
        regex: '192.168.1.110:15692'
        target_label: rabbitmq_node
        replacement: 'rabbit@rmq2'
      - source_labels: [__address__]
        regex: '192.168.1.120:15692'
        target_label: rabbitmq_node
        replacement: 'rabbit@rmq3'
      - source_labels: [__address__]
        regex: '([^:]+):(\d+)'
        target_label: ip_address
        replacement: '${1}'
      - source_labels: [__address__]
        regex: '([^:]+):(\d+)'
        target_label: port
        replacement: '${2}'

Granfana模板 (grafana 版本 v12.1.1)

bash 复制代码
面板ID:10991 => RabbitMQ-Overview
相关推荐
徐同保18 分钟前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫19 分钟前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
博主花神20 分钟前
【React】扩展知识点
javascript·react.js·ecmascript
欧阳天风27 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder30 分钟前
箭头函数和 this 绑定
linux·前端·javascript·typescript
xkxnq37 分钟前
第一阶段:Vue 基础入门(第 11 天)
前端·javascript·vue.js
小oo呆42 分钟前
【自然语言处理与大模型】LangGraphV1.0入门指南:核心组件Nodes
前端·javascript·easyui
行走的陀螺仪1 小时前
在UniApp H5中,实现路由栈的持久化
前端·javascript·uni-app·路由持久化·路由缓存策略
bentengjiayou1 小时前
Kafka和RabbitMQ相比有什么优势?
分布式·kafka·rabbitmq
南玖i1 小时前
SuperMap iServer + vue3 实现点聚合 超简单!
javascript·vue.js·elementui