如何部署Oracle Linux 9.x RabbitMQ?

Linux基础

1 基础知识

1.1 RabbitMQ的简介

– RabbitMQ拥有成千上万的用户,是最受欢迎的开源消息代理之一
– RabbitMQ在全球范围内小型初创企业和大型企业都有使用

1.2 RabbitMQ的特点

– RabbitMQ轻巧、易于在内部和云中部署
– RabbitMQ支持多种消息传递协议
– RabbitMQ可以部署在分布式和联合配置中,以满足大规模、高性能的需求

1.3 RabbitMQ支持的协议

AMQP 0-9-1和扩展(最初支持的协议),二进制协议,可定义强大的消息传递语义,客户端容易实现
STOMP,基于文本消息传递协议通过插件才能支持,强调协议简单性,几乎无消息传递语义定义
MQTT,二进制协议,强调轻量级发布、订阅消息传递,目标是受限设备客户端,支持MQTT 3.1
– AMQP 1.0,与旧版分属不同协议,线路级别不共享内容、新版对语义要求少故易容于代理,客户端实用少
– HTTP和Web Sockets,HTTP不属于真正的消息传递协议,RabbitMQ通过三种方式进行HTTP消息传输,
STOMP插件支持STOMP传递WebSockets消息到浏览器
MQTT插件支持WebSockets支持MQTT传递消息到浏览器
管理插件支持简单HTTP API方式发送和接收消息(用于诊断目的)

1.3 RabbitMQ的开发语言

– Java
– .NET
– PHP
– Python
– JavaScript
– Ruby
– Go
其他语言

1.4 RabbitMQ的端口

– 4369,epmd守护进程或RabbitMQ节点和CLI工具使用的对等发现服务的端口
– 567[1-2],非TLS或TLS的AMQP 0-9-1和1.0客户端的服务端口
– 25672,用于节点间和CLI工具通讯(Erlang分发服务器端口)并从动态范围分配(不建议公开)
– 356[72-82],由CLI工具(Erlang分发客户端端口)用于与节点进行通讯
– 15672,HTTP API客户端端口,管理UIRabbitmqadmin
– 6161[3-4],非TLS或TLS的STOMP客户端端口
– [1,8]883,非TLS或TLS的MQTT客户端端口
– 15674,STOMP-over-WebSockets客户端端口
– 15675,MQTT-over-WebSockets客户端端口
– 15692,Prometheus端口

2 最佳实践

2.1 安装前的准备

2.1.1 系统信息

OS = Oracle Linux 9.x x86_64
IP Address = 10.168.0.27
Host Name = rabbitmq.cmdschool.org

2.1.2 配置安装源

vim /etc/yum.repos.d/rabbitmq.repo

加入如下配置,

# In /etc/yum.repos.d/rabbitmq.repo

##
## Zero dependency Erlang RPM
##

[modern-erlang]
name=modern-erlang-el9
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
        https://yum2.rabbitmq.com/erlang/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/noarch
        https://yum2.rabbitmq.com/erlang/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md


##
## RabbitMQ Server
##

[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/$basearch
        https://yum1.rabbitmq.com/rabbitmq/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
        https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

2.2 安装 RabbitMQ

2.1.1 安装软件包

yum install -y rabbitmq-server

如果遇到如下错误,

Error: Error downloading packages:
  Interrupted by a SIGINT signal

你可能需要执行如下命令,

rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key

2.1.2 启动服务并设置服务默认启动

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

然后,我们使用如下命令确认服务的状态,

systemctl status rabbitmq-server

另外,也可以使用如下命令查看服务倾听的端口,

ss -antp | egrep "epmd|beam" | grep LISTEN

可见如下信息,

LISTEN    0      4096         0.0.0.0:4369       0.0.0.0:*     users:(("epmd",pid=13074,fd=3))                                                   
LISTEN    0      128          0.0.0.0:25672      0.0.0.0:*     users:(("beam.smp",pid=13034,fd=19))                                              
LISTEN    0      4096            [::]:4369          [::]:*     users:(("epmd",pid=13074,fd=4))                                                   
LISTEN    0      128                *:5672             *:*     users:(("beam.smp",pid=13034,fd=34))    

2.1.3 开启所需的服务端口

firewall-cmd --permanent --add-port 4369/tcp
firewall-cmd --permanent --add-port 5672/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.2 启用管理插件服务

2.2.1 启用管理插件

rabbitmq-plugins enable rabbitmq_management

可见如下输出,

Enabling plugins on node rabbit@onlyoffice01:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@onlyoffice01...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

然后,可以使用如下命令确认启动的插件,

rabbitmq-plugins list

可见如下输出,

Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@onlyoffice01
 |/
[  ] rabbitmq_amqp1_0                        4.3.5
[  ] rabbitmq_auth_backend_cache             4.3.5
[  ] rabbitmq_auth_backend_http              4.3.5
[  ] rabbitmq_auth_backend_internal_loopback 4.3.5
[  ] rabbitmq_auth_backend_ldap              4.3.5
[  ] rabbitmq_auth_backend_oauth2            4.3.5
[  ] rabbitmq_auth_mechanism_ssl             4.3.5
[  ] rabbitmq_consistent_hash_exchange       4.3.5
[  ] rabbitmq_event_exchange                 4.3.5
[  ] rabbitmq_exchange_federation            4.3.5
[  ] rabbitmq_federation                     4.3.5
[  ] rabbitmq_federation_common              4.3.5
[  ] rabbitmq_federation_management          4.3.5
[  ] rabbitmq_federation_prometheus          4.3.5
[  ] rabbitmq_jms_topic_exchange             4.3.5
[E*] rabbitmq_management                     4.3.5
[e*] rabbitmq_management_agent               4.3.5
[  ] rabbitmq_mqtt                           4.3.5
[  ] rabbitmq_peer_discovery_aws             4.3.5
[  ] rabbitmq_peer_discovery_common          4.3.5
[  ] rabbitmq_peer_discovery_consul          4.3.5
[  ] rabbitmq_peer_discovery_etcd            4.3.5
[  ] rabbitmq_peer_discovery_k8s             4.3.5
[  ] rabbitmq_prometheus                     4.3.5
[  ] rabbitmq_queue_federation               4.3.5
[  ] rabbitmq_random_exchange                4.3.5
[  ] rabbitmq_recent_history_exchange        4.3.5
[  ] rabbitmq_sharding                       4.3.5
[  ] rabbitmq_shovel                         4.3.5
[  ] rabbitmq_shovel_management              4.3.5
[  ] rabbitmq_shovel_prometheus              4.3.5
[  ] rabbitmq_stomp                          4.3.5
[  ] rabbitmq_stream                         4.3.5
[  ] rabbitmq_stream_management              4.3.5
[  ] rabbitmq_top                            4.3.5
[  ] rabbitmq_tracing                        4.3.5
[  ] rabbitmq_trust_store                    4.3.5
[e*] rabbitmq_web_dispatch                   4.3.5
[  ] rabbitmq_web_mqtt                       4.3.5
[  ] rabbitmq_web_mqtt_examples              4.3.5
[  ] rabbitmq_web_stomp                      4.3.5
[  ] rabbitmq_web_stomp_examples             4.3.5

以上设置完成后,你可能需要使用如下命令重启服务使配置生效,

systemctl restart rabbitmq-server

然后,你需要使用如下命令确认服务端口已经倾听,

ss -antp | egrep "epmd|beam" | grep LISTEN

可见如下信息,

LISTEN    0      4096         0.0.0.0:4369       0.0.0.0:*     users:(("epmd",pid=18772,fd=3))                                                      
LISTEN    0      128          0.0.0.0:25672      0.0.0.0:*     users:(("beam.smp",pid=18732,fd=19))                                                 
LISTEN    0      1024         0.0.0.0:15672      0.0.0.0:*     users:(("beam.smp",pid=18732,fd=34))                                                 
LISTEN    0      4096            [::]:4369          [::]:*     users:(("epmd",pid=18772,fd=4))                                                      
LISTEN    0      128                *:5672             *:*     users:(("beam.smp",pid=18732,fd=35))   

2.2.2 设置管理员账号和密码

rabbitmqctl add_user admin adminpwd
rabbitmqctl set_user_tags admin administrator

2.2.3 开启所需的服务端口

firewall-cmd --permanent --add-port 15672/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.1.6 浏览器测试

In Windows Client,

notepad \Windows\System32\drivers\etc\hosts

加入如下配置,

10.168.0.27 rabbitmq.cmdschool.org

以上名称解析仅适用于测试环境,生产环境请使用DNS配置,然后使用浏览器访问如下地址,
http://rabbitmq.cmdschool.org:15672/
可见如下显示,

User: admin
Password: adminpwd

2.3 性能优化

2.3.1 查询服务状态

rabbitmqctl status

可见如下显示,

Status of node rabbit@onlyoffice01 ...
Runtime

OS PID: 18732
OS: Linux
Uptime (seconds): 224
Is under maintenance?: false
RabbitMQ version: 4.3.5
RabbitMQ release series support status: see https://www.rabbitmq.com/release-information
Node name: rabbit@onlyoffice01
Erlang configuration: Erlang/OTP 27 [erts-15.2.7.12] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Crypto library: OpenSSL 3.5.5 27 Jan 2026
Erlang processes: 434 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
#...
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

“[…]”表示省略,并注意到PID是“18732”,于是可以使用如下命令查看开启文件数限制,

cat /proc/18732/limits

可见如下显示,

Limit                     Soft Limit           Hard Limit           Units
[...]
Max open files            32768                32768                files
[...]

2.3.2 修改最大文件数限制

mkdir /etc/systemd/system/rabbitmq-server.service.d/
vim /etc/systemd/system/rabbitmq-server.service.d/limits.conf

加入如下配置,

[Service]
LimitNOFILE=64000

配置修改完毕后,需要使用如下命令重载服务使服务配置生效,

systemctl daemon-reload

然后,需要使用如下命令重启服务使配置生效,

systemctl restart rabbitmq-server

参阅文档
============
官方首页
————
https://www.rabbitmq.com/

官方github首页
————
https://github.com/rabbitmq/rabbitmq-server

文档首页
—————
https://www.rabbitmq.com/docs

下载和安装教程
———–
https://www.rabbitmq.com/docs/install-rpm
https://www.rabbitmq.com/docs/download

github下载
———–
https://github.com/rabbitmq/rabbitmq-server/releases

没有评论

发表回复

Linux基础
如何部署onlyOffice documentServer 9.3.1?

1 基础知识 1.1 onlyOffice的简介 – onlyOffice Docume …

Linux基础
如何部署onlyOffice documentServer 9.4.0?

1 基础知识 1.1 onlyOffice的简介 – onlyOffice Docume …

Linux基础
如何设置存储的多路径?

1 前言 一个问题,一篇文章,一出故事。 笔者今天需要给服务器附加一台iSCSI存储,但是存储是一个 …