Ubuntu上RabbitMQ自动化运维实践
一 自动化安装与初始化
示例脚本片段(节选)
#!/usr/bin/env bash
set -e
UBUNTU_CODENAME=$(lsb_release -sc) # 如 jammy
sudo apt-get update && sudo apt-get install -y curl gnupg apt-transport-https
# 导入密钥(示例指纹与地址,按官方最新为准)
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
| sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg >/dev/null
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key \
| sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg >/dev/null
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key \
| sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg >/dev/null
# 添加仓库(示例为 PPA 镜像,可按需替换)
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $UBUNTU_CODENAME main
deb [arch=amd64 signed-by=/usr/share/ref/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu $UBUNTU_CODENAME main
EOF
sudo apt-get update -y
sudo apt-get install -y rabbitmq-server --fix-missing
sudo systemctl enable --now rabbitmq-server
# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management
上述流程与命令要点可参考 Ubuntu 上的 APT 安装实践与一键安装脚本范式。
二 配置即代码与资源编排
示例要点
./rabbitmqadmin declare vhost name=/prod
./rabbitmqadmin declare user name=admin password=secret tags=administrator
./rabbitmqadmin declare permission vhost=/prod user=admin configure=".*" write=".*" read=".*"
./rabbitmqadmin --vhost=/prod declare exchange name=ac.exchange.alarm type=direct durable=true
./rabbitmqadmin --vhost=/prod declare queue name=ac.queue.alarm durable=true
./rabbitmqadmin --vhost=/prod declare binding source=ac.exchange.alarm destination=ac.queue.alarm routing_key=ac.routing.key.alarm
# 备份
rabbitmqctl export_definitions /opt/backup/rabbitmq-defs-$(date +%F).json
# 恢复(在目标节点执行)
rabbitmqctl import_definitions /opt/backup/rabbitmq-defs-2025-08-01.json
rabbitmqctl eval 'rabbit_exchange:declare({resource, <<"/prod">>, exchange, <<"ac.exchange.alarm">>}, direct, true, false, false, []).'
rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/prod">>, queue, <<"ac.queue.alarm">>}, true, false, [], none).'
rabbitmqctl eval 'rabbit_binding:add({binding, {resource, <<"/prod">>, exchange, <<"ac.exchange.alarm">>}, <<"ac.routing.key.alarm">>, {resource, <<"/prod">>, queue, <<"ac.queue.alarm">>}, []}).'
三 健康检查与可观测性
示例要点
rabbitmq-diagnostics status
rabbitmq-diagnostics cluster_status
sudo rabbitmq-plugins enable rabbitmq_management
sudo rabbitmq-plugins enable rabbitmq_prometheus
# Prometheus 配置 scrape job: http://<host>:15692/metrics
四 自动化运维落地方案