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
相关推荐
To_OC37 分钟前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
小林ixn2 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
窝子面5 小时前
手搓最简前后端协作-node
javascript·数据库
kyriewen5 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程
এ慕ོ冬℘゜6 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
sugar__salt7 小时前
Vue3 表单双向绑定与响应式核心 API 技术详解
前端·javascript·vue.js
SmartBoyW7 小时前
CSS弹性布局(Flexbox)学习笔记:从零开始搞懂弹性布局
前端·javascript
用户938515635078 小时前
写了这么久 useState,你真的知道它在干什么吗?
前端·javascript
烬羽8 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
浮江雾9 小时前
Flutter第十七节-----路由管理(3)
android·开发语言·前端·javascript·flutter·入门