目录
- RabbitMQ 配置
- 简介
- 环境变量
- 配置文件
- 运行时参数和策略
RabbitMQ 配置
简介
默认配置,已经可以有效地运行RabbitMQ,并且在大多数情况下不需要更改配置。不过为了在生产环境中稳定、高效的运行,RabbitMQ提供了三种方式来定制化服务
- 环境变量
- 配置文件
- 运行时参数和策略
配置文件路径可以再启动日志中找到
2019-05-24 01:55:19.253 [info] <0.8.0> Log file opened with Lager
2019-05-24 01:55:19.752 [info] <0.289.0> Starting RabbitMQ 3.7.15 on Erlang 22.0Copyright (C) 2007-2019 Pivotal Software, Inc.Licensed under the MPL. See https://www.rabbitmq.com/
2019-05-24 01:55:19.753 [info] <0.289.0> node : rabbit@node1home dir : /rootconfig file(s) : (none)cookie hash : d/zE3xrt478dueqdlI+ZiA==log(s) : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node1.log: /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node1_upgrade.logdatabase dir : /opt/rabbitmq_server-3.7.15/var/lib/rabbitmq/mnesia/rabbit@node1
2019-05-24 01:55:20.262 [info] <0.289.0> Running boot step pre_boot defined by app rabbit
期待的配置文件路径
文件不存在可以手动创建
- Generic UNIX: $RABBITMQ_HOME/etc/rabbitmq/
- RPM: /etc/rabbitmq/
- Windows: %APPDATA%\RabbitMQ
如何检查生效的配置项
[root@node1 rabbitmq]# rabbitmqctl environment
环境变量
RabbitMQ的环境变量都是以"RABBITMQ_"开头的,可以再shell环境中设置,也可以在rabbitmq-env.conf配置文件中设置。
如果在非shell环境中设置需要将“RABBITMQ_”去掉。
配置优先级
- shell环境
- rabbitmq-env.conf配置文件
- 默认的配置
rabbitmq-env.conf默认在$RABBITMQ_HOME/etc/rabbitmq/目录下,也可以在启动时指定RABBITMQ_CONF_ENV_FILE变量来设置此文件的路径
# Example rabbitmq-env.conf file entries. Note that the variables
# do not have the RABBITMQ_ prefix.
#
# Overrides node name
NODENAME=root@node1# Specifies new style config file location
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf# Specifies advanced config file location
ADVANCED_CONFIG_FILE=/etc/rabbitmq/advanced.config
配置项 | 描述 | 默认 |
---|---|---|
RABBITMQ_NODE_IP_ADDRESS | 绑定的网络接口 | 默认为空字符串表示绑定本机所有的网络接口 |
RABBITMQ_NODE_PORT | 5672 | |
RABBITMQ_DIST_PORT | RabbitMQ节点内部通信的端口号。如果设置了kernel.inet_dist_listen_min or kernel.inet_dist_listen_max时,此环境变量将被忽略 | RABBITMQ_NODE_PORT + 20000 |
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_USE_LONGNAME | ||
RABBITMQ_SERVICENAME |
配置文件
在RabbitMQ3.7.0Z之前,RabbitMQ配置文件被命名为rabbitmq.config,并使用Erlang语法配置。
运行3.7.0或更高版本仍然支持之前的配置,但建议使用新的sysctl格式。
sysctl格式与erlang格式配置文件对比
sysctl 格式ssl_options.cacertfile = /path/to/testca/cacert.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
Erlang 格式
[{rabbit, [{ssl_options, [{cacertfile, "/path/to/testca/cacert.pem"},{certfile, "/path/to/server_certificate.pem"},{keyfile, "/path/to/server_key.pem"},{verify, verify_peer},{fail_if_no_peer_cert, true}]}]}
].
- sysctl 格式易于自动化部署工具生成和人类编辑
- 相对于Erlang格式 有局限。一些使用深度嵌套的数据结构仍然需要Erlang格式的支持
rabbitmq.conf
- key/value 键值对结构
- 以#开头的为注释行
- rabbitmq.conf 示例
配置项 | 描述 | 默认值 |
---|---|---|
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 | 内存高水位百分比阈值,当内存的使用达到阈值时,队列开始将消息分页到磁盘以释放内存 | vm_memory_high_watermark_paging_ratio = 0.5 |
total_memory_available_override_value | 该参数用于指定系统的可用内存总量,一般不使用,适用于在容器等一些获取内存实际值不精确的环境(获取内存值与实际内存值相差较大) | 默认未设置 |
disk_free_limit | 存储数据分区的可用磁盘空间限制当可用空间低于阈值时,流控将被触发。 | disk_free_limit.absolute = 50MB |
log.file.level | 控制记录日志的等级,有info,error,warning,debug | log.file.level = info |
channel_max | 最大通道数,但不包含协议中使用的特殊通道号0,设置为0表示无限制,不建议使用该值,容易出现channel泄漏,过多的channel会增加broker内存的占用 | 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.monitoring = true monitoring是用户名 | loopback_users.guest = true(默认guest只能本地连接) |
cluster_formation.classic_config.nodes | 配置集群节点 cluster_formation.classic_config.nodes.1 = rabbit@hostname1 cluster_formation.classic_config.nodes.2 = rabbit@hostname2 | 默认none |
collect_statistics | 统计数据的收集模式,主要与 RabbitMQ Management插件相关, none: 不发出统计信息事件 coarse: 每个队列连接都发送统计一次 fine: 每发一条消息的统计数据 | collect_statistics = none |
collect_statistics_interval | 统计数据收集时间间隔,以毫秒为单位 | collect_statistics_interval = 5000 |
management_db_cache_multiplier | 缓存代价较高的查询 缓存将把最后一个查询的运行时间乘以这个值,并在此时间内缓存结果。 | management_db_cache_multiplier = 5 |
reverse_dns_lookups | 设置为' true ',让RabbitMQ对客户端连接执行反向DNS查询,并通过' rabbitmqctl '和管理插件显示该信息。 | reverse_dns_lookups = false |
delegate_count | 用于集群内通信的委托进程数。在多核的服务器上我们可以增加此值 | delegate_count = 16 |
tcp_listen_options | 默认的套接字选项 | 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.exit_on_close = false |
hipe_compile | 设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器,启用HiPE可以提高吞吐,但启动时会延迟几分钟。Erlang运行时必须包含HiPE支持。如果不是,启用此选项将不起作用。HiPE在某些平台上根本不可用,尤其是Windows。 | hipe_compile = false |
cluster_partition_handling | 如何处理网络分区。有四种方式 ignore、autoheal、pause_minority、pause_if_all_down 。 pause_if_all_down模式需要额外的参数:nodes、recover | cluster_partition_handling = ignore |
cluster_keepalive_interval | 向其他节点发送存活消息的频率。单位为毫秒。丢失存活消息不会导致节点被认为已失效 | cluster_keepalive_interval = 10000 |
queue_index_embed_msgs_below | 消息的字节大小,小于该大小,消息将直接嵌入队列索引中 单位为B | 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 | 队列的定位的策略,即创建队列时以什么策略判断坐落的broker节点。如果配置了镜像,则这里指master镜像的定位策略。可用的策略 min-masters,client-local,random | queue_master_locator = client-local |
proxy_protocol | 如果设置为true ,则连接需要通过反向代理连接,不能直连接 | proxy_protocol = false |
advanced.config
一些不能使用sysctl格式的配置项或者使用sysctl格式不方便的配置项,可以使用Erlang术语格式的配置文件
- advanced.config 示例
配置项 | 描述 | 默认值 |
---|---|---|
msg_store_index_module | 设置队列索引使用的模块 | 消息存储调优 Default: rabbit_msg_store_ets_index {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 | 消息储存的文件大小,现有的节点更改是危险的,可能导致数据丢失 | Default: 16777216 {rabbit, [ %% Changing this for a node %% with an existing (initialised) database is dangerous can %% lead to data loss! {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 | 在使用惰性队列(lazy queue)时进行内存回收动作的阈值。值底性能降低,值高性能提高,但是会导致更高的内存消耗。 | {rabbit, [ {lazy_queue_explicit_gc_run_operation_threshold, 1000} ]} |
queue_explicit_gc_run_operation_threshold | 在使用正常队列时进行内存回收动作的阈值。值低降低性能,值高性能提高,但是会消耗更多的内存。 | {rabbit, [ {queue_explicit_gc_run_operation_threshold, 1000} ]} |
运行时参数和策略
rabbitmq中大部分配置都可以在配置文件中完成,重启后生效,但有些配置不适合写在配置文件中
比如:有些需要更改需要立即生效
Parameter可以通过rabbitmqctl或者管理插件提供的HTTP API来设置。
Parameter分为两种
- vhost级别
- 绑定到vhost。由组件名称(component name)、名称(name)和值组成
- global级别
- 不绑定vhost,全局生效。由名称和值组成
未完待续
参考
RabbitMQ官网 https://www.rabbitmq.com/
《RabbitMQ实战指南》
RabbitMQ生产部署指南 https://www.cnblogs.com/operationhome/p/10483840.html