1. 首页 > 软件安装教程 > 正文

RabbitMQ安装配置-RabbitMQ消息队列安装配置_升级迁移详细过程

1. RabbitMQ概述与环境规划

RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。它以可靠性、灵活性和易用性著称,广泛应用于分布式系统中的异步通信、解耦和流量削峰场景。更多学习教程www.fgedu.net.cn

1.1 RabbitMQ版本说明

RabbitMQ目前主要版本为3.13,本教程以RabbitMQ 3.13为例进行详细讲解。

# 查看RabbitMQ版本
$ rabbitmqctl version
3.13.0

# 查看服务器状态
$ rabbitmqctl status

# 输出示例:
Status of node rabbit@fgedudb01 …
Runtime

OS PID: 12345
OS: Linux
Uptime (seconds): 86400
RabbitMQ version: 3.13.0
Erlang version: 26.2.1

Listeners
Interface: [::], port: 5672, protocol: amqp
Interface: [::], port: 15672, protocol: http
Interface: [::], port: 25672, protocol: clustering

1.2 环境规划

本次安装环境规划如下:

主机名:fgedudb01.fgedu.net.cn
IP地址:192.168.1.51
AMQP端口:5672
管理界面端口:15672
集群端口:25672
Epmd端口:4369
安装目录:/usr/lib/rabbitmq
数据目录:/var/lib/rabbitmq
日志目录:/var/log/rabbitmq
配置目录:/etc/rabbitmq

Erlang环境:
Erlang版本:26.2
ERLANG_HOME:/usr/lib/erlang

1.3 RabbitMQ核心特性

主要特点:
1. 消息可靠性:支持消息确认、持久化和事务
2. 灵活路由:支持多种交换器类型和路由键
3. 集群支持:支持多节点集群和镜像队列
4. 多协议支持:支持AMQP、MQTT、STOMP等
5. 管理界面:提供Web管理控制台
6. 插件系统:丰富的插件生态系统
7. 高可用性:支持镜像队列和仲裁队列
8. 跨语言客户端:支持Java、Python、Go等多种语言

2. 硬件环境要求与检查

在安装RabbitMQ之前,需要对服务器硬件环境进行全面检查。学习交流加群风哥微信: itpux-com

2.1 最低硬件要求

最低配置:
CPU:2核心
内存:2GB
磁盘:10GB

推荐配置(生产环境):
CPU:4核心以上
内存:8GB以上
磁盘:50GB以上

高吞吐量配置:
CPU:8核心以上
内存:16GB以上
磁盘:100GB以上SSD

2.2 系统环境检查

# 检查操作系统版本
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)

# 检查内存信息
# free -h
total used free shared buff/cache available
Mem: 15Gi 1.0Gi 13Gi 256Mi 1.0Gi 14Gi
Swap: 7Gi 0B 7Gi

# 检查磁盘空间
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg_system-lv_root 100G 5.0G 95G 5% /
/dev/mapper/vg_data-lv_data 500G 50G 450G 10% /data

# 检查主机名解析
# hostname -f
fgedudb01.fgedu.net.cn

# 检查/etc/hosts
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
192.168.1.51 fgedudb01 fgedudb01.fgedu.net.cn

2.3 内核参数配置

# 配置内核参数
# vi /etc/sysctl.d/99-rabbitmq.conf

# 添加以下参数
# 文件描述符限制
fs.file-max = 65535

# 网络参数
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_local_port_range = 1024 65535

# 使内核参数生效
# sysctl -p /etc/sysctl.d/99-rabbitmq.conf

# 配置用户限制
# vi /etc/security/limits.conf

# 添加以下配置
rabbitmq soft nofile 65535
rabbitmq hard nofile 65535
rabbitmq soft nproc 65535
rabbitmq hard nproc 65535

3. RabbitMQ安装步骤

本节详细介绍RabbitMQ 3.13的安装过程。学习交流加群风哥QQ113257174

3.1 安装Erlang

# 添加Erlang仓库
# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | bash

# 安装Erlang
# dnf install -y erlang

# 验证Erlang安装
$ erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 14.2.1

# 查看Erlang路径
$ which erl
/usr/bin/erl

# 查看Erlang版本
$ erl -eval ‘erlang:display(erlang:system_info(otp_release)), halt().’ -noshell
26

3.2 安装RabbitMQ

# 添加RabbitMQ仓库
# curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | bash

# 安装RabbitMQ
# dnf install -y rabbitmq-server

# 验证安装
$ rabbitmqctl version
3.13.0

# 查看安装目录
$ ls -la /usr/lib/rabbitmq/
总用量 0
drwxr-xr-x. 2 root root 4096 4月 4 10:00 bin
drwxr-xr-x. 2 root root 4096 4月 4 10:00 lib
drwxr-xr-x. 2 root root 4096 4月 4 10:00 plugins

# 查看配置目录
$ ls -la /etc/rabbitmq/
总用量 0
drwxr-xr-x. 2 root root 4096 4月 4 10:00 conf.d

3.3 启动RabbitMQ

# 启动RabbitMQ服务
# systemctl start rabbitmq-server

# 查看服务状态
# systemctl status rabbitmq-server

# 输出示例:
rabbitmq-server.service – RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled)
Active: active (running) since Sat 2026-04-04 10:00:00 CST; 10s ago
Main PID: 12345 (beam.smp)
Status: “Initialized”
Tasks: 50 (limit: 4915)
Memory: 100.0M
CGroup: /system.slice/rabbitmq-server.service
└─12345 /usr/lib64/erlang/erts-14.2.1/bin/beam.smp -W w -MBio age…

# 设置开机自启动
# systemctl enable rabbitmq-server

# 检查端口
$ netstat -tlnp | grep beam
tcp6 0 0 :::5672 :::* LISTEN 12345/beam.smp
tcp6 0 0 :::25672 :::* LISTEN 12345/beam.smp
tcp6 0 0 :::4369 :::* LISTEN 12346/epmd

3.4 启用管理插件

# 启用管理插件
# rabbitmq-plugins enable rabbitmq_management

# 输出示例:
Enabling plugins on node rabbit@fgedudb01:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@fgedudb01…
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

# 重启服务
# systemctl restart rabbitmq-server

# 检查管理端口
$ netstat -tlnp | grep 15672
tcp6 0 0 :::15672 :::* LISTEN 12345/beam.smp

# 配置防火墙
# firewall-cmd –permanent –add-port=5672/tcp
success
# firewall-cmd –permanent –add-port=15672/tcp
success
# firewall-cmd –permanent –add-port=25672/tcp
success
# firewall-cmd –reload
success

# 访问管理界面
# 浏览器访问: http://192.168.1.51:15672
# 默认用户名: guest
# 默认密码: guest

3.5 创建管理员用户

# 创建管理员用户
# rabbitmqctl add_user admin fgedu123

# 输出示例:
Adding user “admin” …

# 设置用户标签
# rabbitmqctl set_user_tags admin administrator

# 输出示例:
Setting tags for user “admin” to [administrator] …

# 授予所有权限
# rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”

# 输出示例:
Setting permissions for user “admin” in vhost “/” …

# 查看用户列表
# rabbitmqctl list_users

# 输出示例:
Listing users …
user tags
admin administrator
guest administrator

# 删除默认guest用户(生产环境建议)
# rabbitmqctl delete_user guest

风哥提示:RabbitMQ默认使用guest用户,仅允许本地访问。生产环境建议创建新的管理员用户并删除guest用户。

4. RabbitMQ参数配置

RabbitMQ参数配置是性能优化的关键步骤,直接影响系统性能。更多学习教程公众号风哥教程itpux_com

4.1 配置rabbitmq.conf

# 创建配置文件
# vi /etc/rabbitmq/rabbitmq.conf

# 添加以下配置
# 监听配置
listeners.tcp.default = 5672
management.tcp.port = 15672

# 内存配置
vm_memory_high_watermark.relative = 0.6
vm_memory_high_watermark_paging_ratio = 0.75

# 磁盘配置
disk_free_limit.relative = 2.0

# 连接配置
connection_max = 10000
channel_max = 2048

# 队列配置
queue_master_locator = min-masters

# 消息配置
default_vhost = /
default_user = admin
default_pass = fgedu123

# 日志配置
log.file.level = info
log.console = true

# 重启服务
# systemctl restart rabbitmq-server

4.2 配置advanced.config

# 创建高级配置文件
# vi /etc/rabbitmq/advanced.config

# 添加以下配置
[
{rabbit, [
{tcp_listeners, [5672]},
{num_tcp_acceptors, 10},
{ssl_listeners, []},
{num_ssl_acceptors, 1},
{ssl_options, []},
{vm_memory_high_watermark, 0.6},
{vm_memory_high_watermark_paging_ratio, 0.75},
{disk_free_limit, 2000000000},
{frame_max, 131072},
{channel_max, 2048},
{heartbeat, 60},
{default_vhost, <<" /">>},
{default_user, <<"admin">>},
{default_pass, <<"fgedu123">>},
{default_user_tags, [administrator]},
{default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
{collect_statistics, coarse},
{collect_statistics_interval, 5000}
]},
{rabbitmq_management, [
{listener, [{port, 15672}]}
]}
].

# 重启服务
# systemctl restart rabbitmq-server

4.3 配置环境变量

# 创建环境变量配置
# vi /etc/rabbitmq/rabbitmq-env.conf

# 添加以下配置
# 节点名称
NODENAME=rabbit@fgedudb01

# 数据目录
RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq/mnesia

# 日志目录
RABBITMQ_LOG_BASE=/var/log/rabbitmq

# 配置文件
RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq

# Erlang Cookie
RABBITMQ_ERLANG_COOKIE=fgedu_rabbitmq_cookie

# 重启服务
# systemctl restart rabbitmq-server

生产环境建议:根据服务器内存大小合理配置内存水位线。建议设置磁盘空间告警阈值,避免磁盘满导致服务不可用。

5. 队列管理

RabbitMQ提供了丰富的队列管理功能,本节介绍常用的队列操作。from:www.itpux.com

5.1 创建虚拟主机

# 创建虚拟主机
# rabbitmqctl add_vhost fgedu_vhost

# 输出示例:
Adding vhost “fgedu_vhost” …

# 查看虚拟主机列表
# rabbitmqctl list_vhosts

# 输出示例:
Listing vhosts …
name
/
fgedu_vhost

# 授予用户权限
# rabbitmqctl set_permissions -p fgedu_vhost admin “.*” “.*” “.*”

# 输出示例:
Setting permissions for user “admin” in vhost “fgedu_vhost” …

# 查看权限
# rabbitmqctl list_permissions -p fgedu_vhost

# 输出示例:
Listing permissions for vhost “fgedu_vhost” …
user configure write read
admin .* .* .*

5.2 创建交换器和队列

# 使用rabbitmqadmin创建交换器
# rabbitmqadmin declare exchange name=fgedu_exchange type=direct durable=true

# 输出示例:
exchange declared

# 创建队列
# rabbitmqadmin declare queue name=fgedu_queue durable=true

# 输出示例:
queue declared

# 创建绑定
# rabbitmqadmin declare binding source=fgedu_exchange destination=fgedu_queue routing_key=fgedu_key

# 输出示例:
binding declared

# 查看交换器列表
# rabbitmqctl list_exchanges

# 输出示例:
Listing exchanges for vhost “/” …
name type
direct
amq.direct direct
amq.fanout fanout
amq.headers headers
amq.match headers
amq.rabbitmq.trace topic
amq.topic topic
fgedu_exchange direct

# 查看队列列表
# rabbitmqctl list_queues name messages consumers

# 输出示例:
Timeout: 60.0 seconds …
Listing queues for vhost “/” …
name messages consumers
fgedu_queue 0 0

5.3 发送和消费消息

# 发送消息
# rabbitmqadmin publish exchange=fgedu_exchange routing_key=fgedu_key payload=”Hello RabbitMQ”

# 输出示例:
Message published

# 查看队列消息
# rabbitmqadmin get queue=fgedu_queue count=1

# 输出示例:
+————-+———-+—————+———————————-+—————+——————+————-+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | redelivered |
+————-+———-+—————+———————————-+—————+——————+————-+
| fgedu_key | | 0 | Hello RabbitMQ | 15 | string | False |
+————-+———-+—————+———————————-+—————+——————+————-+

# 消费消息
# rabbitmqadmin get queue=fgedu_queue ackmode=ack_requeue_false count=1

# 输出示例:
+————-+———-+—————+———————————-+—————+——————+————-+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | redelivered |
+————-+———-+—————+———————————-+—————+——————+————-+
| fgedu_key | | 0 | Hello RabbitMQ | 15 | string | False |
+————-+———-+—————+———————————-+—————+——————+————-+

6. 集群配置

RabbitMQ支持集群部署,提供高可用性和负载均衡能力。更多学习教程www.fgedu.net.cn

6.1 配置集群节点

# 在所有节点上设置相同的Erlang Cookie
# cat /var/lib/rabbitmq/.erlang.cookie
fgedu_rabbitmq_cookie

# 确保所有节点的Cookie一致
# chmod 600 /var/lib/rabbitmq/.erlang.cookie
# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

# 在第二个节点停止服务
# systemctl stop rabbitmq-server

# 在第二个节点加入集群
# rabbitmqctl stop_app

# 输出示例:
Stopping rabbit application on node rabbit@fgedudb02 …

# 加入集群
# rabbitmqctl join_cluster rabbit@fgedudb01

# 输出示例:
Clustering node rabbit@fgedudb02 with rabbit@fgedudb01

# 启动应用
# rabbitmqctl start_app

# 输出示例:
Starting node rabbit@fgedudb02 …

# 查看集群状态
# rabbitmqctl cluster_status

# 输出示例:
Cluster status of node rabbit@fgedudb01 …
Basics

Cluster name: rabbit@fgedudb01

Disk Nodes

rabbit@fgedudb01
rabbit@fgedudb02

Running Nodes

rabbit@fgedudb01
rabbit@fgedudb02

Versions

rabbit@fgedudb01: RabbitMQ 3.13.0 on Erlang 26.2
rabbit@fgedudb02: RabbitMQ 3.13.0 on Erlang 26.2

6.2 配置镜像队列

# 创建镜像策略
# rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:”all”,”ha-sync-mode”:”automatic”}’

# 输出示例:
Setting policy “ha-all” for pattern “^” to “{“ha-mode”:”all”,”ha-sync-mode”:”automatic”}” with priority “0”
for vhost “/” …

# 查看策略
# rabbitmqctl list_policies

# 输出示例:
Listing policies for vhost “/” …
vhost name pattern apply-to definition
/ ha-all ^ all {“ha-mode”:”all”,”ha-sync-mode”:”automatic”}

# 创建特定队列的镜像策略
# rabbitmqctl set_policy ha-fgedu “^fgedu” ‘{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}’

# 输出示例:
Setting policy “ha-fgedu” for pattern “^fgedu” to
“{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}” with priority “0” for vhost “/” …

6.3 配置仲裁队列

# 启用仲裁队列插件
# rabbitmq-plugins enable rabbitmq_quorum_queue

# 输出示例:
Enabling plugins on node rabbit@fgedudb01:
rabbitmq_quorum_queue
The following plugins have been configured:
rabbitmq_quorum_queue
Applying plugin configuration to rabbit@fgedudb01…
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

# 重启服务
# systemctl restart rabbitmq-server

# 创建仲裁队列
# rabbitmqadmin declare queue name=fgedu_quorum_queue durable=true arguments='{“x-queue-type”:”quorum”}’

# 输出示例:
queue declared

# 查看队列类型
# rabbitmqctl list_queues name type

# 输出示例:
Timeout: 60.0 seconds …
Listing queues for vhost “/” …
name type
fgedu_quorum_queue quorum

风哥提示:RabbitMQ集群使用Erlang Cookie进行节点认证。生产环境建议使用仲裁队列替代镜像队列,以获得更好的性能和可靠性。

7. 安全配置

RabbitMQ提供了完善的安全框架,本节介绍常用的安全配置方法。学习交流加群风哥微信: itpux-com

7.1 配置SSL/TLS

# 生成CA证书
# openssl genrsa -out ca.key 2048
# openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj “/CN=RabbitMQ CA”

# 生成服务器证书
# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -out server.csr -subj “/CN=fgedudb01.fgedu.net.cn”
# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
-sha256

# 复制证书到RabbitMQ目录
# mkdir -p /etc/rabbitmq/ssl
# cp server.key server.crt ca.crt /etc/rabbitmq/ssl/
# chown -R rabbitmq:rabbitmq /etc/rabbitmq/ssl
# chmod 600 /etc/rabbitmq/ssl/*

# 配置SSL
# vi /etc/rabbitmq/rabbitmq.conf

# 添加SSL配置
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq/ssl/ca.crt
ssl_options.certfile = /etc/rabbitmq/ssl/server.crt
ssl_options.keyfile = /etc/rabbitmq/ssl/server.key
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = false

# 重启服务
# systemctl restart rabbitmq-server

# 检查SSL端口
$ netstat -tlnp | grep 5671
tcp6 0 0 :::5671 :::* LISTEN 12345/beam.smp

7.2 配置用户权限

# 创建应用用户
# rabbitmqctl add_user fgedu_app fgedu123

# 输出示例:
Adding user “fgedu_app” …

# 设置用户标签
# rabbitmqctl set_user_tags fgedu_app management

# 输出示例:
Setting tags for user “fgedu_app” to [management] …

# 授予特定权限
# rabbitmqctl set_permissions -p fgedu_vhost fgedu_app “^fgedu.*” “^fgedu.*” “^fgedu.*”

# 输出示例:
Setting permissions for user “fgedu_app” in vhost “fgedu_vhost” …

# 查看用户权限
# rabbitmqctl list_user_permissions fgedu_app

# 输出示例:
Listing permissions for user “fgedu_app” …
vhost configure write read
fgedu_vhost ^fgedu.* ^fgedu.* ^fgedu.*

生产环境建议:生产环境建议启用SSL/TLS加密通信。为不同应用创建独立的用户,并授予最小必要权限。

8. 监控与日志

RabbitMQ提供了完善的监控和日志功能,本节介绍常用的监控配置方法。更多学习教程公众号风哥教程itpux_com

8.1 启用Prometheus监控

# 启用Prometheus插件
# rabbitmq-plugins enable rabbitmq_prometheus

# 输出示例:
Enabling plugins on node rabbit@fgedudb01:
rabbitmq_prometheus
The following plugins have been configured:
rabbitmq_prometheus
Applying plugin configuration to rabbit@fgedudb01…
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

# 重启服务
# systemctl restart rabbitmq-server

# 检查Prometheus端口
$ netstat -tlnp | grep 15692
tcp6 0 0 :::15692 :::* LISTEN 12345/beam.smp

# 访问指标端点
$ curl http://192.168.1.51:15692/metrics

# 输出示例:
# HELP rabbitmq_connections_total Total number of connections
# TYPE rabbitmq_connections_total gauge
rabbitmq_connections_total 10
# HELP rabbitmq_channels_total Total number of channels
# TYPE rabbitmq_channels_total gauge
rabbitmq_channels_total 20
# HELP rabbitmq_queues_total Total number of queues
# TYPE rabbitmq_queues_total gauge
rabbitmq_queues_total 5

8.2 配置日志

# 查看日志配置
# vi /etc/rabbitmq/rabbitmq.conf

# 日志级别
log.file.level = info
log.console = true
log.console.level = info

# 日志轮转
log.file.rotation.date = $D0
log.file.rotation.count = 10

# 查看日志
# tail -f /var/log/rabbitmq/rabbit@fgedudb01.log

# 输出示例:
2026-04-04 10:00:00.123 [info] <0.123.0> Application rabbit started on node rabbit@fgedudb01
2026-04-04 10:00:00.456 [info] <0.456.0> RabbitMQ 3.13.0 is running
2026-04-04 10:00:01.789 [info] <0.789.0> accepting AMQP connection <0.789.0> (192.168.1.51:5672 ->
192.168.1.51:12345)

# 查看SASL日志
# tail -f /var/log/rabbitmq/rabbit@fgedudb01_sasl.log

8.3 健康检查

# 检查节点健康状态
# rabbitmqctl node_health_check

# 输出示例:
Checking health of node rabbit@fgedudb01 …
Health check passed

# 查看节点状态
# rabbitmqctl status

# 输出示例:
Status of node rabbit@fgedudb01 …
Runtime

OS PID: 12345
OS: Linux
Uptime (seconds): 86400
RabbitMQ version: 3.13.0
Erlang version: 26.2.1

Memory
Total: 100.0 MB
Atom: 1.0 MB
Binary: 10.0 MB
Code: 30.0 MB
Ets: 5.0 MB
Processes: 50.0 MB
System: 4.0 MB

File Descriptors
Total: 100
Sockets: 50

Listeners
Interface: [::], port: 5672, protocol: amqp
Interface: [::], port: 15672, protocol: http
Interface: [::], port: 25672, protocol: clustering

风哥提示:生产环境建议配置Prometheus和Grafana进行监控。定期检查队列积压和消费者状态,确保消息及时处理。

9. 升级与迁移

RabbitMQ升级和迁移是运维工作中的重要环节,需要仔细规划和执行。from:www.itpux.com

9.1 版本升级

# 检查当前版本
# rabbitmqctl version
3.13.0

# 备份配置
# cp -r /etc/rabbitmq /backup/rabbitmq/etc_$(date +%Y%m%d)
# cp -r /var/lib/rabbitmq/mnesia /backup/rabbitmq/mnesia_$(date +%Y%m%d)

# 停止服务
# systemctl stop rabbitmq-server

# 升级RabbitMQ
# dnf upgrade -y rabbitmq-server

# 启动服务
# systemctl start rabbitmq-server

# 验证版本
# rabbitmqctl version
3.13.1

# 检查集群状态
# rabbitmqctl cluster_status

9.2 数据迁移

# 导出定义
# rabbitmqctl export_definitions /backup/rabbitmq/definitions.json

# 输出示例:
Exporting definitions to “/backup/rabbitmq/definitions.json” …

# 导入定义
# rabbitmqctl import_definitions /backup/rabbitmq/definitions.json

# 输出示例:
Importing definitions from “/backup/rabbitmq/definitions.json” …

# 或者使用管理API
# curl -u admin:fgedu123 http://192.168.1.51:15672/api/definitions -o /backup/rabbitmq/definitions.json

# 导入定义
# curl -u admin:fgedu123 -X POST -H “Content-Type: application/json” -d @/backup/rabbitmq/definitions.json
http://192.168.1.51:15672/api/definitions

生产环境建议:升级前必须进行完整备份。建议先在测试环境验证兼容性,确保消息不丢失。

10. 生产环境实战案例

本节提供一个完整的生产环境配置案例,帮助读者更好地理解RabbitMQ的实际应用。更多学习教程www.fgedu.net.cn

10.1 生产环境完整配置

# 生产环境RabbitMQ完整配置
# vi /etc/rabbitmq/rabbitmq.conf

# 基础配置
listeners.tcp.default = 5672
listeners.ssl.default = 5671
management.tcp.port = 15672

# 内存配置
vm_memory_high_watermark.relative = 0.6
vm_memory_high_watermark_paging_ratio = 0.75

# 磁盘配置
disk_free_limit.relative = 2.0

# 连接配置
connection_max = 10000
channel_max = 2048
heartbeat = 60

# 队列配置
queue_master_locator = min-masters

# SSL配置
ssl_options.cacertfile = /etc/rabbitmq/ssl/ca.crt
ssl_options.certfile = /etc/rabbitmq/ssl/server.crt
ssl_options.keyfile = /etc/rabbitmq/ssl/server.key
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = false

# 日志配置
log.file.level = info
log.console = true
log.file.rotation.date = $D0
log.file.rotation.count = 10

# 创建systemd服务配置
# vi /etc/systemd/system/rabbitmq-server.service.d/override.conf

[Service]
LimitNOFILE=65535
LimitNPROC=65535

# 重载配置
# systemctl daemon-reload
# systemctl restart rabbitmq-server

10.2 高可用集群配置

# 三节点集群配置

# 节点1: fgedudb01 (192.168.1.51)
# 节点2: fgedudb02 (192.168.1.52)
# 节点3: fgedudb03 (192.168.1.53)

# 在所有节点设置相同的Cookie
# echo “fgedu_rabbitmq_cookie” > /var/lib/rabbitmq/.erlang.cookie
# chmod 600 /var/lib/rabbitmq/.erlang.cookie
# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

# 在节点2和节点3加入集群
# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@fgedudb01
# rabbitmqctl start_app

# 查看集群状态
# rabbitmqctl cluster_status

# 配置仲裁队列策略
# rabbitmqctl set_policy quorum-all “^” ‘{“queue-type”:”quorum”}’ –apply-to queues

# 配置镜像队列策略(可选)
# rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:”all”,”ha-sync-mode”:”automatic”}’

10.3 性能调优实战

# 操作系统优化
# vi /etc/sysctl.d/99-rabbitmq.conf

# 网络优化
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 文件描述符
fs.file-max = 65535

# 使配置生效
# sysctl -p /etc/sysctl.d/99-rabbitmq.conf

# RabbitMQ配置优化
# vi /etc/rabbitmq/advanced.config

[
{rabbit, [
{num_tcp_acceptors, 20},
{num_ssl_acceptors, 10},
{connection_max, 50000},
{channel_max, 4096},
{frame_max, 1048576},
{heartbeat, 30},
{collect_statistics, coarse},
{collect_statistics_interval, 10000}
]}
].

# 重启服务
# systemctl restart rabbitmq-server

# 性能测试
# rabbitmq-perf-test -x 10 -y 10 -u fgedu_test -s 1024 -r 10000

# 输出示例:
id: test-123456, time: 60.000s, sent: 1000000 msg/s, received: 1000000 msg/s

风哥提示:RabbitMQ作为消息队列中间件,在异步通信和解耦方面具有优势。建议根据实际业务场景选择合适的队列类型和镜像策略。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息