首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RabbitMQ-自动化部署镜像队列

RabbitMQ-自动化部署镜像队列

作者头像
运维小路
发布2025-07-03 15:26:04
发布2025-07-03 15:26:04
15600
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行
图片
图片

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ(本章节)

前面两个小节,我们通过手工启动节点,然后通过命令行操作让他变成普通集群和镜像模式。今天我们通过配置文件方式来配置集群,并支持镜像模式。最主要他可以实现自动化部署镜像模式。

RabbitMQ主配置文件

下面的配置文件主要就是RabbitMQ的配置:端口,web插件,访问日志,节点数量(固定节点),节点类型,资源限制,分区处理方式,加载初始化配置,日志目录等。

代码语言:javascript
代码运行次数:0
运行
复制
#这里设置到的路径仅供参考
vi ./etc/rabbitmq.conf

# 基础监听端口
listeners.tcp.default = 5672

# 管理插件配置
management.tcp.port = 15672
management.tcp.ip = 0.0.0.0
management.http_log_dir = /opt/rabbitmq_server-3.8.35/logs/management

# 集群节点配置
cluster_formation.peer_discovery_backend = classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq01
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq02
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq03

# 节点类型配置
cluster_formation.node_type = disc

# 资源限制
vm_memory_high_watermark.relative = 0.6
disk_free_limit.absolute = 5GB

# 网络分区处理
cluster_partition_handling = pause_minority

# 加载预定义配置
management.load_definitions = /opt/rabbitmq_server-3.8.35/etc/definitions.json

# 日志目录配置
log.dir = /opt/rabbitmq_server-3.8.35/logs

三个节点都可以是一样,如果你想配置为内存节点,则可以调整下面参数,必须要有一个硬盘硬件。

代码语言:javascript
代码运行次数:0
运行
复制
# 节点类型配置
cluster_formation.node_type = ram

RabbitMQ初始化配置文件

代码语言:javascript
代码运行次数:0
运行
复制
#这里的名字和要上面的配置文件想对应 
vi ./etc/definitions.json 
{
  "users": [
    {
      "name": "admin",
      "password": "Admin@123",
      "tags": "administrator"
    },
    {
      "name": "monitor",
      "password": "Monitor@123",
      "tags": "monitoring"
    }
  ],
  "vhosts": [
    {"name": "/"}
  ],
  "permissions": [
    {
      "user": "admin",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    },
    {
      "user": "monitor",
      "vhost": "/",
      "configure": "",
      "write": "",
      "read": ".*"
    }
  ],
  "policies": [
    {
      "vhost": "/",
      "name": "ha-all",
      "pattern": ".*",
      "definition": {
        "ha-mode": "exactly",
        "ha-params": 2
      },
      "priority": 10,
      "apply-to": "queues"
    }
  ]
}

简单解释这个初始化,实际上就是配置了2个账号:一个用于管理员,一个用于监控,并且管理员对默认的虚拟主机(vhost)"/"有所有权限,还配置了镜像队列来实现高可用。前面我们有提到过,这个镜像队列高可用针对的是虚拟主机(vhost),所以如果你创建了基于新的虚拟主机(vhost)是没有镜像队列的高可用的。

RabbitMQ启动脚本

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
BASE_DIR="/opt/rabbitmq_server-3.8.35"

# 设置环境变量
export HOME="$BASE_DIR/security"
export RABBITMQ_CONFIG_FILE="$BASE_DIR/etc/rabbitmq.conf"
export RABBITMQ_MNESIA_BASE="$BASE_DIR/data/mnesia"
export RABBITMQ_ENABLED_PLUGINS_FILE="$BASE_DIR/etc/rabbitmq/enabled_plugins"

# 确保目录存在
mkdir -p $HOME
mkdir -p $RABBITMQ_MNESIA_BASE
mkdir -p $BASE_DIR/logs/$(hostname)
mkdir -p $BASE_DIR/logs/management

# 创建 Erlang cookie
COOKIE_FILE="$HOME/.erlang.cookie"
if [ ! -f $COOKIE_FILE ]; then
  echo "NzvP0LMLjSwon5OdzjVr" > $COOKIE_FILE
  chmod 600 $COOKIE_FILE
fi

# 确保插件文件存在
PLUGINS_FILE="$RABBITMQ_ENABLED_PLUGINS_FILE"
if [ ! -f $PLUGINS_FILE ]; then
  echo '[rabbitmq_management, rabbitmq_peer_discovery_common, rabbitmq_management_agent].' > $PLUGINS_FILE
fi


# 创建最小配置文件(如果不存在)
if [ ! -f $RABBITMQ_CONFIG_FILE ]; then
  cat > $RABBITMQ_CONFIG_FILE <<EOL
listeners.tcp.default = 5672
log.dir = $BASE_DIR/logs
EOL
fi

# 启动 RabbitMQ
$BASE_DIR/sbin/rabbitmq-server \
  -c $RABBITMQ_CONFIG_FILE \
  --erlang-cookie $(cat $COOKIE_FILE) 

启动方式

注:这里为了方便查看,使用的前台启动,需要后台启动把启动脚本添加后台启动参数即可。

1.选一个节点先启动

2.手工复制第一个节点生成的.erlang.cookie

代码语言:javascript
代码运行次数:0
运行
复制
#具体路径和脚本相互匹配
cd /opt/rabbitmq_server-3.8.35
scp -r  security rabbitmq02:/opt/rabbitmq_server-3.8.35/
scp -r  security rabbitmq03:/opt/rabbitmq_server-3.8.35/

3.在启动后面2个节点

正常情况3个节点都按照上面的方式启动以后,镜像模式的RabbitMQ就算部署成功

注:这里给大家留了一个坑,就是关于RabbitMQ的home目录的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档