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.0
 Copyright (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@node1
 home dir       : /root
 config 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.log
 database 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_”去掉。

配置优先级

  1. shell环境
  2. rabbitmq-env.conf配置文件
  3. 默认的配置

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

配置项 描述 默认值
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术语格式的配置文件

配置项 描述 默认值
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

posted @ 2019-05-28 18:05  漂泊的蒲公英  阅读(1008)  评论(0)    收藏  举报