阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RabbitMQ 生产环境配置详解

489次阅读
没有评论

共计 7486 个字符,预计需要花费 19 分钟才能阅读完成。

一 rabbitmq 生产部署

RabbitMQ 常用的三种自定义服务器的通用方法:

  • 配置文件 rabbitmq.conf
  • 环境变量文件 rabbitmq-env.conf
  • 补充配置文件 advanced.config

rabbitmq.conf 和 rabbitmq-env.conf 的位置

  • 在二进制安装中路径是在:安装目录下的 /etc/rabbitmq/
  • rpm 安装:/etc/rabbitmq/

如果 rabbitmq.conf 和 rabbitmq-env.conf 的两个文件不存在,那么我们可以创建该文件,然后我们可以通过环境变量
指定该文件的位置。

补充:

  • rabbitmqctl rabbitmqctl 是管理虚拟主机和用户权限的工具
  • rabbitmq-plugins 是管理插件的工具

1.1 rabbitmq.conf

在 rabbitmq 3.7.0 之前,rabbitmq.conf 使用了 Erlang 语法配置格式,新的版本使用了 sysctl 格式.

sysctl 语法:

  • 单个信息都在一行里面
  • 配置信息以 key value 的形式保存。
  • ‘#’开头表示注释。

配置示例文件:rabbitmq.conf.example

配置属性和描述(官网链接)

属性 描述 默认值
listeners 要监听 AMQP 0-9-1 and AMQP 1.0 的端口 listeners.tcp.default = 5672
num_acceptors.tcp 接受 tcp 连接的 erlang 进程数 num_acceptors.tcp = 10
handshake_timeout AMQP 0-9-1 超时时间,也就是最大的连接时间,单位毫秒 handshake_timeout = 10000
listeners.ssl 启用 TLS 的协议 默认值为 none
num_acceptors.ssl 接受基于 TLS 协议的连接的 erlang 进程数 num_acceptors.ssl = 10
ssl_options TLS 配置 ssl_options =none
ssl_handshake_timeout TLS 连接超时时间 单位为毫秒 ssl_handshake_timeout = 5000
vm_memory_high_watermark 触发流量控制的内存阈值,可以为相对值(0.5), 或者绝对值 vm_memory_high_watermark.relative = 0.6 ,vm_memory_high_watermark.absolute = 2GB 默认 vm_memory_high_watermark.relative = 0.4
vm_memory_calculation_strategy 内存使用报告策略,assigned:使用 Erlang 内存分配器统计信息 rss:使用操作系统 RSS 内存报告。这使用特定于操作系统的方法,并可能启动短期子进程。legacy:使用遗留内存报告(运行时认为将使用多少内存)。这种策略相当不准确。erlang 与 legacy 一样 是为了向后兼容 vm_memory_calculation_strategy = allocated
vm_memory_high_watermark_paging_ratio 当内存的使用达到了 50% 后, 队列开始将消息分页到磁盘 vm_memory_high_watermark_paging_ratio = 0.5
total_memory_available_override_value 该参数用于指定系统的可用内存总量,一般不使用,适用于在容器等一些获取内存实际值不精确的环境 默认未设置
disk_free_limit Rabbitmq 存储数据的可用空间限制,当低于该值的时候,将触发流量限制,设置可参考 vm_memory_high_watermark 参数 disk_free_limit.absolute = 50MB
log.file.level 控制记录日志的等级,有 info,error,warning,debug log.file.level = info
channel_max 最大通道数,但不包含协议中使用的特殊通道号 0,设置为 0 表示无限制,不建议使用该值,容易出现 channel 泄漏 channel_max = 2047
channel_operation_timeout 通道操作超时,单位为毫秒 channel_operation_timeout = 15000
heartbeat 表示连接参数协商期间服务器建议的心跳超时的值。如果两端都设置为 0,则禁用心跳, 不建议禁用 heartbeat = 60
default_vhost rabbitmq 安装后启动创建的虚拟主机 default_vhost = /
default_user 默认创建的用户名 default_user = guest
default_pass 默认用户的密码 default_pass = guest
default_user_tags 默认用户的标签 default_user_tags.administrator = true
default_permissions 在创建默认用户是分配给默认用户的权限 default_permissions.configure = .* default_permissions.read = .* default_permissions.write = .*
loopback_users 允许通过回环地址连接到 rabbitmq 的用户列表, 如果要允许 guest 用户远程连接 (不安全) 请将该值设置为 none, 如果要将一个用户设置为仅 localhost 连接的话,配置 loopback_users.username =true(username 要替换成用户名) loopback_users.guest = true(默认为只能本地连接)
cluster_formation.classic_config.nodes 设置集群节点 cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2 默认为空,未设置
collect_statistics 统计收集模式,none 不发出统计信息事件,coarse 每个队列连接都发送统计一次,fine 每发一条消息的统计数据 collect_statistics = none
collect_statistics_interval 统计信息收集间隔,以毫秒为单位 collect_statistics_interval = 5000
delegate_count 用于集群内通信的委托进程数。在多核的服务器上我们可以增加此值 delegate_count = 16
tcp_listen_options 默认的套接字选项 tcp_listen_options.backlog = 128 …..
hipe_compile 设置为 true 以使用 HiPE 预编译 RabbitMQ 的部分,HiPE 是 Erlang 的即时编译器, 启用 HiPE 可以提高吞吐量两位数,但启动时会延迟几分钟。Erlang 运行时必须包含 HiPE 支持。如果不是,启用此选项将不起作用。HiPE 在某些平台上根本不可用,尤其是 Windows。 hipe_compile = false
cluster_keepalive_interval 节点应该多长时间向其他节点发送 keepalive 消息(以毫秒为单位),keepalive 的消息丢失不会被视为关闭 cluster_keepalive_interval = 10000
queue_index_embed_msgs_below 消息的字节大小, 低于该大小,消息将直接嵌入队列索引中 bytes queue_index_embed_msgs_below = 4096
mnesia_table_loading_retry_timeout 等待集群中 Mnesia 表可用的超时时间,单位毫秒 mnesia_table_loading_retry_timeout = 30000
mnesia_table_loading_retry_limit 集群启动时等待 Mnesia 表的重试次数,不适用于 Mnesia 升级或节点删除。 mnesia_table_loading_retry_limit = 10
mirroring_sync_batch_size 要在队列镜像之间同步的消息的批处理大小 mirroring_sync_batch_size = 4096
queue_master_locator 队列主节点的策略,有三大策略 min-masters,client-local,random queue_master_locator = client-local
proxy_protocol 如果设置为 true , 则连接需要通过反向代理连接,不能直连接 proxy_protocol = false
management.listener.port rabbitmq web 管理界面使用的端口 management.listener.port = 15672

查看 rabbitmq 的有效配置

rabbitmqctl environment

1.2 advanced.config

示例文件
某些配置设置不可用或难以使用 sysctl 格式进行配置。因此,可以使用 Erlang 术语格式的其他配置文件 advanced.config
它将与 rabbitmq.conf 文件中提供的配置合并。

配置属性和描述(官网链接)

属性 描述 默认值
msg_store_index_module 设置队列索引使用的模块 {rabbit,[ {msg_store_index_module,rabbit_msg_store_ets_index} ]}
backing_queue_module 队列内容的实现模块。 {rabbit,[ {backing_queue_module,rabbit_variable_queue} ]}
msg_store_file_size_limit 消息储存的文件大小, 现有的节点更改是危险的,可能导致数据丢失 默认值 16777216
trace_vhosts 内部的 tracer 使用,不建议更改 {rabbit,[ {trace_vhosts,[]} ]}
msg_store_credit_disc_bound 设置消息储存库给队列进程的积分, 默认一个队列进程被赋予 4000 个消息积分 {rabbit, [{msg_store_credit_disc_bound, {4000, 800}}]}
queue_index_max_journal_entries 队列的索引日志超过该阈值将刷新到磁盘 {rabbit, [{queue_index_max_journal_entries, 32768}]}
lazy_queue_explicit_gc_run_operation_threshold 在内存压力下为延迟队列设置的值,该值可以触发垃圾回收和减少内存使用,降低该值,会降低性能,提高该值,会导致更高的内存消耗 {rabbit,[{lazy_queue_explicit_gc_run_operation_threshold, 1000}]}
queue_explicit_gc_run_operation_threshold 在内存压力下,正常队列设置的值,该值可以触发垃圾回收和减少内存使用,降低该值,会降低性能,提高该值,会导致更高的内存消耗 {rabbit, [{queue_explicit_gc_run_operation_threshold, 1000}]}

1.3 rabbitmq-env.conf

官网链接
通过 rabbitmq-env.conf 来定义环境变量
RABBITMQ_NODENAME 指定节点名称

属性 描述 默认值
RABBITMQ_NODE_IP_ADDRESS 绑定的网络接口 默认为空字符串表示绑定本机所有的网络接口
RABBITMQ_NODE_PORT 端口 默认为 5672
RABBITMQ_DISTRIBUTION_BUFFER_SIZE 节点之间通信连接的数据缓冲区大小 默认为 128000, 该值建议不要使用低于 64MB
RABBITMQ_IO_THREAD_POOL_SIZE 运行时用于 io 的线程数 建议不要低于 32,linux 默认为 128,windows 默认为 64
RABBITMQ_NODENAME rabbitmq 节点名称,集群中要注意节点名称唯一 linux 默认节点名为 rabbit@$hostname
RABBITMQ_CONFIG_FILE rabbitmq 的配置文件路径,注意不要加文件的后缀(.conf) 默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二进制安装) /etc/rabbitmq/rabbitmq(rpm 安装)
RABBITMQ_ADVANCED_CONFIG_FILE advanced.config 文件路径 默认 $RABBITMQ_HOME/etc/rabbitmq/advanced(二进制安装) /etc/rabbitmq/advanced(rpm 安装)
RABBITMQ_CONF_ENV_FILE 环境变量配置文件路径 默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf(二进制安装) /etc/rabbitmq/rabbitmq-env.conf(rpm 安装)
RABBITMQ_SERVER_CODE_PATH 在使用 HiPE 模块时需要使用 默认为空
RABBITMQ_LOGS 指定日志文件位置 默认为 $RABBITMQ_HOME/etc/var/log/rabbitmq/

网络设置 http://www.rabbitmq.com/networking.html
RABBITMQ_DISTRIBUTION_BUFFER_SIZE 节点间通信缓冲区大小, 默认值 128Mb, 节点流量比较多的集群中,可以提升该值,建议该值不要低于 64MB。

tcp 缓存区大小
下示例将 AMQP 0-9- 1 连接的 TCP 缓冲区设置为 192 KiB:

tcp_listen_options.backlog = 128
tcp_listen_options.nodelay = true
tcp_listen_options.linger.on = true
tcp_listen_options.linger.timeout = 0
tcp_listen_options.sndbuf = 196608
tcp_listen_options.recbuf = 196608

1.4 在生产环境中不适用的策略。

官网链接

  • 1.4.1 vhost

在生产中,如果 rabbitmq 只为单个系统提供服务的时候,我们使用默认的 (/) 是可以的。在为多个系统提供的服务时,我们建议使用单独的 vhost.

  • 1.4.2 user

对于生产环境,请删除默认用户 (guest), 默认用户只能从 localhost 连接。
我们可以创建指定权限的单独用户为每个应用提供服务。对于开启权限用户来说,我们可以使用证书,和源 ip 地址过滤,和身份验证。来加强安全性。

  • 1.4.3 最大打开文件限制

在生产环境我们可能需要调整一些系统的默认限制,以便处理大量的并发连接和队列。
需要调整的值有打开的最大文件数。在生产环境为 rabbitmq 运行的用户设定为 65536,但是对于大多数开发环境来说,4096 就已经足够了。

查看默认的打开文件的最大数量。

ulimit -n

更改方式:

  • 1 临时修改
ulimit -n 65536
  • 2 永久修改
    • 2.1 如果是 systemed 来进行管理的话我们可以编辑 systemed 配置文件来进行控制
    [service]
    LimitNOFILE=300000
    • 2.2 如果不是 systemed 来进行管理的话,我们可以更改 rabbitmq 的启动加载的环境配置文件 rabbitmq-env.conf。在里面开头添加 ulimit -S -n 4096,但该值不能超过系统的默认值的最大值。

      ulimit -S -n 4096
    • 2.3 系统级别更改
      更改配置文件:/etc/security/limits.conf
      在文件末尾前面加入
      rabbitmq(启动的用户名) - nofile 65536
      如果更改前用户已经登录的话,需要重新登录下才能生效。

  • 1.4.4 内存
    当 rabbitmq 检测到它使用的内存超过系统的 40%,它将不会接受任何新的消息,这个值是由参数 vm_memory_high_watermark 来控制的,默认值是一个安全的值,修改该值需要注意。rabbitmq 的至少需要 128MB, 建议 vm_memory_high_watermark 值为 0.4~0..66,不要使用大于 0.7 的值。

  • 1.4.5 磁盘
    磁盘默认的储存数据阈值是 50MB, 当低于该值的时候,将触发流量限制。50MB 只适用于开发环境,生产环境需要调高该值,不然容易由磁盘空间不足导致节点故障,也可能导致数据丢失。

    在生产环境中我们设置的值

    • 建议的最小值 {disk_free_limit, {mem_relative, 1.0}}

    它是基于 mem_relative 的值,例如在具有 4GB 内存的 rabbitmq 主机上,那么该磁盘的阈值就是 4G, 如果磁盘可用空间低于 4G,所有生产者和消息都将拒绝。在允许恢复发布之前,通常需要消费者将队列消息消费完。

    • 建议的更安全值 {disk_free_limit, {mem_relative, 1.5}}

    在具有 4GB 内存的 RabbitMQ 节点上,如果可用磁盘空间低于 6GB,则所有新消息都将被阻止,但是如果我们在停止的时候 rabbitmq 需要储存 4GB 的数据到磁盘,再下一次启动的时候,就只有 2G 空间了。

    • 建议的最大值 {disk_free_limit, {mem_relative, 2.0}}
      这个是最安全的值,如果你的磁盘有足够多的空间话,建议设置该值。但该值容易触发警告,因为在具有 4GB 内存的 rabbitmq 主机上,需要最低空间大于 8G, 如果你的磁盘空间比较少的话,不建议设置该值。
  • 1.4.6 连接
    少使用短连接,使用连接池或者长连接。

  • 1.4.7 TLS
    建议尽可能使用 TLS 连接,使用 TLS 会对传输的数据加密,但是对系统的吞吐量产生很大的影响
  • -1.4.8 更改默认端口
    我们常用的 web 界面的端口 15672 和 AMQP 0-9-1 协议端口 5672,建议更改,web 界面更改,配置参数 management.listener.port,AMQP 0-9-1 协议端口配置参数 listeners.tcp.default。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7486字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982379
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...