Debian13部署RabbitMQ

官网:https://www.rabbitmq.comopen in new window

1、下载软件包

官网Debian部署方式open in new window

GitHub下载 https://github.com/rabbitmq/rabbitmq-server/releasesopen in new window

我这边下是支持debian的deb格式

https://github.com/rabbitmq/rabbitmq-server/releases/download/v4.2.3/rabbitmq-server_4.2.3-1_all.debopen in new window

因为RabbitMQ是采用 Erlang语言开发的

这要使用最新 Erlang 27.x 软件包网站:

https://packagecloud.io/rabbitmq/erlangopen in new window

github地址 https://github.com/rabbitmq/erlang-debian-packageopen in new window

2、环境安装部署

Debian13安装脚本rabbitMq.sh

创建脚本

#!/bin/sh

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's signing key
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

## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Latest RabbitMQ releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
EOF

## Update package indices
sudo apt-get update -y

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

启动rabbitmq

systemctl start rabbitmq-server

查看rabbitmq 状态

systemctl status rabbitmq-server

关闭重启服务

# 关闭rabbitmq服务
systemctl stop rabbitmq-server
# 重启rabbitmq服务
systemctl restart rabbitmq-server

开启RabbitMQWeb管理界面插件

rabbitmq-plugins enable rabbitmq_management

防火墙配置

#web管理界面端口
ufw allow 15672/tcp
# EPMD (Erlang 端口映射守护进程)
ufw allow 4369/tcp
#Erlang 节点间通信端口(基础端口 + 动态分配,通常配置基础端口为 25672)
ufw allow 25672/tcp
#AMQP 通信端口
ufw allow 5672/tcp

然后我们打开浏览器,访问服务器公网ip:15672

DNS 解析

RabbitMQ 集群依赖 DNS 解析,为了防止 DNS 解析失败,建议在所有节点的 /etc/hosts 中添加记录

vim /etc/hosts
#添加以下内容
10.1.26.60 RabbitMQ-01
10.1.26.61 RabbitMQ-02
10.1.26.62 RabbitMQ-03

3、账号配置

添加远程账号

rabbitmqctl add_user admin admin123

设置用户角色,分配操作权限

#角色共有四种:
#administrator:可以登录控制台、查看所有信息、并对rabbitmq进行管理
#monToring:监控者;登录控制台,查看所有信息
#policymaker:策略制定者;登录控制台指定策略
#managment:普通管理员;登录控制
rabbitmqctl set_user_tags admin administrator

为用户添加资源权限(授予访问虚拟机根节点的所有权限)

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

其他指令

修改密码

rabbitmqctl change_ password 用户名 新密码

删除用户

rabbitmqctl delete_user 用户名

查看用户清单

rabbitmqctl list_users

4、集群搭建

修改各节点机器名称

hostnamectl set-hostname RabbitMQ-01

配置各个节点的hosts

vim /etc/hosts
10.1.26.60 RabbitMQ-01
10.1.26.61 RabbitMQ-02

把主服务器/var/lib/rabbitmq下的.erlang.cookie文件复制到另外节点上设备上

保持所有服务器使用同一个.erlang.cookie文件

SCP远程拷贝输入远程服务器密码,也可以手动下载上传同一位置

scp /var/lib/rabbitmq/.erlang.cookie root@10.201.216.161:/var/lib/rabbitmq/.erlang.cookie

在各节点启动服务

rabbitmq-server -detached

连接集群节点

在被加入节点机器上执行

#1.关掉服务
rabbitmqctl stop_app
#2.重置
rabbitmqctl reset
#3.将二号节点加入到一号节点
rabbitmqctl join_cluster rabbit@RabbitMQ-01
#4.开启服务
rabbitmqctl start_app
#5.查看集群状态
rabbitmqctl cluster_status

集群账号设置

#只要在一台机器上执行
#1.创建账号
rabbitmqctl add_user admin admin123
#2.设置角色 
rabbitmqctl set_user_tags admin administrator
#3.设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#4.登录
#注意如果登录不了注意清除页面缓存

解除集群节点

#在要解除的节点上执行
rabbitmqctl stop_app
rabbitmqctl reset
#强制重置
#rabbitmqctl force_reset
rabbitmqctl start_app
rabbitmqctl cluster_status
#此条在主节点(RabbitMQ-01)主节点上执行踢出RabbitMQ-02 
rabbitmqctl forget_cluster_node rabbit@RabbitMQ-02 

查看安装环境

rabbitmqctl environment
systemctl status rabbitmq-server

安装插件,支持web访问

#1.进入安装目录
cd  /usr/lib/rabbitmq
#2.执行语句
rabbitmq-plugins enable rabbitmq_web_stomp

5、备份

备份配置方案

导出 RabbitMQ 元数据(如交换机、队列、绑定、用户、权限、策略等)的标准命令。

注意:它不导出队列中的消息内容

rabbitmqctl export_definitions <文件路径>
#更长的路径(如果未加入环境变量)
/usr/lib/rabbitmq/bin/rabbitmqctl export_definitions /tmp/backup.json

导入恢复

#停止 RabbitMQ,导入之前备份的 JSON 文件
rabbitmqctl import_definitions /tmp/backup.json

6、其他

日志目录

cd /var/log/rabbitmq

遇到起不来问题

查看日志

journalctl -u rabbitmq-server -f

端口占用查看

ps aux | grep beam
ss -tulnp | grep 25672

仍有进程占用,记下 PID 并 kill

kill -9 <PID>

清理可能的残留状态(会丢失所有队列、用户、权限等配置!)

rm -rf /var/lib/rabbitmq/mnesia/

重新启动 RabbitMQ并查看状态

systemctl start rabbitmq-server
systemctl status rabbitmq-server

非 UTF-8 编码问题解决

查看当前设置

locale

如果看到 LANG=CLANGUAGE= 为空,且没有 .UTF-8 的后缀,就需要修改

Debian

编辑.profile

vim .profile
#编辑内容
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN.UTF-8
#重启就生效了
shutdown -r now

编辑**/etc/locale.gen**

vim /etc/locale.gen

取消注释你需要的 UTF-8 行(推荐至少保留一个英文 UTF-8)

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8

生成locale

locale-gen

验证是否成功

locale -a | grep -E "(en_US|zh_CN).*UTF-8"

其他

locale-gen en_US.UTF-8
localedef -i en_US -f UTF-8 en_US.UTF-8
export LANG=en_US.UTF-8
#-------以下2行就OK了-----------------------
locale-gen zh_CN.UTF-8
update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8
#-------以下临时生效------------------------
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
#查看当前设置
locale

CentOS

# 安装语言包
yum install glibc-langpack-en

# 或者使用 localectl 设置
localectl set-locale LANG=en_US.UTF-8

修改完成后,必须退出终端重新登录,或者重启服务器,然后再运行你的程序

登录后警报问题

⚠ All stable feature flags must be enabled after completing an upgrade. [Learn more]

通过命令执行

#查看当前未启用的 stable feature flags
rabbitmqctl list_feature_flags

启用所有 stable 且 disabled 的 flags

rabbitmqctl enable_feature_flag all