RabbitMq入门到精通-Config配置详解


RabbitMQ带有默认的内置设置。在某些环境(例如开发和质量检查)中,这些可能就足够了。对于所有其他情况以及生产部署调整,有一种方法可以在代理和插件中配置很多东西。

本指南涵盖了许多与配置相关的主题:

  • 配置服务器和插件的各种设置的不同方式
  • 配置文件:primary Rabbitmq.conf和可选的advanced.config
  • 各种平台上的默认配置文件位置
  • 配置故障排除:如何验证配置文件位置和有效配置
  • 环境变量
  • 操作系统(内核)限制
  • 可用的核心服务器设置
  • 可用环境变量
  • 如何加密敏感的配置值

和更多。

由于配置会影响系统的许多区域,包括插件,因此各个文档指南会 更深入地介绍可配置的内容。运行时调优是本指南的附带内容,它侧重于运行时中的可配置参数。生产清单是相关的指南,概述了在大多数生产环境中可能需要调整哪些设置。

配置方式

可以使用负责不同区域的多种机制来配置RabbitMQ节点:

配置方式RabbitMQ
机制 描述
配置文件 包含以下服务器和插件设置
  • TCP侦听器和其他与网络相关的设置
  • TLS
  • 资源限制(警报)
  • 身份验证和授权后端
  • 邮件存储设置
等等。
环境变量 定义节点名称,文件和目录位置,从外壳获取的运行时标志,或在环境配置文件rabbitmq-env.conf(Linux,MacOS,BSD)和rabbitmq-env-conf.bat(Windows)中设置
兔子 使用内部身份验证/授权后端时, rabbitmqctl是管理虚拟主机,用户和权限的工具。它还用于管理运行时参数和策略。
RabbitMQ队列 rabbitmq-queues是管理特定于仲裁队列的设置的工具。
Rabbitmq插件 rabbitmq-plugins是管理插件的工具。
RabbitMQ诊断 rabbitmq-diagnostics允许检查节点状态,包括有效配置以及许多其他指标和运行状况检查。
参数与政策 定义了可以在运行时更改的群集范围的设置,以及可以方便地为队列组(交换等)配置的设置,例如包括可选的队列参数。
运行时(Erlang VM)标志 控制系统的低级方面:内存分配设置,节点间通信缓冲区大小,运行时调度程序设置等。
操作系统内核限制 内核强制执行的控制进程限制:最大打开文件句柄限制,最大进程和内核线程数,最大驻留集大小等。

大多数设置是使用前两种方法配置的。因此,本指南重点介绍它们。

配置文件

介绍

虽然RabbitMQ中的某些设置可以使用环境变量进行调整,但大多数设置是使用主配置文件(通常名为Rabbitmq.conf)进行配置的。这包括核心服务器和插件的配置。可以使用其他配置文件来配置无法以主文件的配置格式表示的设置。这将在下面更详细地介绍。

下面的部分介绍了这两个文件的语法和位置,在何处可以找到示例等。

配置文件位置

默认配置文件位置 因操作系统和程序包类型而异。

本指南的其余部分将更详细地介绍该主题。

如果对操作系统和安装方法的RabbitMQ配置文件位置有疑问,请按照以下部分中的说明查阅日志文件和/或管理UI。

验证配置:如何查找配置文件位置

可以通过检查RabbitMQ日志文件来验证活动的配置文件。它将 与其他代理启动日志条目一起显示在顶部的日志文件中。例如:

节点:rabbit @ example
主目录:/ var / lib / rabbitmq
配置文件:/etc/rabbitmq/advanced.config
               :/etc/rabbitmq/rabbitmq.conf

如果RabbitMQ无法找到或读取配置文件,则日志条目将显示为:

节点:rabbit @ example
主目录:/ var / lib / rabbitmq
配置文件:/var/lib/rabbitmq/hare.conf(未找到)

另外,可以在管理UI中找到配置文件的位置以及有关节点的其他详细信息。

对配置设置进行故障排除时,在检查有效的节点配置之前,验证配置文件路径正确,存在并且可以加载(例如文件可读)非常有用。

验证配置:如何检查有效配置

可以使用rabbitmqctl环境命令打印有效的配置(用户提供的值合并为默认值)。它将为节点上运行的每个应用程序(RabbitMQ,插件,库)打印应用的配置。

有效配置应与配置文件位置一起验证(请参见上文)。这是解决各种问题的有用步骤。

新旧配置文件格式

所有受支持的RabbitMQ版本 的主配置文件都使用类似ini的sysctl配置文件格式。该文件通常命名为Rabbitmq.conf

新的配置格式更简单,更易于人类阅读和机器生成。与RabbitMQ 3.7.0之前使用的经典配置格式相比,它也相对有限。例如,在配置LDAP支持时,可能有必要使用深度嵌套的数据结构来表达所需的配置。

为了满足这种需求,现代RabbitMQ版本允许两种格式同时在单独的文件中使用:rabbitmq.conf使用新的样式格式,建议用于大多数设置,而advanced.config涵盖了ini-样式配置无法表达。以下各节将对此进行详细介绍。

配置文件 使用格式 目的
rabbitmq.conf 新样式格式(sysctl或类似ini的格式) 主配置文件。应该用于大多数设置。对于人类来说,阅读和机器(部署工具)的生成更容易。并非所有设置都可以这种格式表示。
advanced.config 经典(Erlang术语) 不能以新样式配置格式表示的有限数量的设置,例如LDAP查询。仅在必要时使用。
rabbitmq-env.conf(在Windows上为rabbitmq-env.conf.bat 环境变量对 用于在一处设置与RabbitMQ相关的环境变量。

比较此示例rabbitmq.conf文件

#一个新的样式格式代码段。rabbitmq.conf文件使用此格式。
ssl_options.cacertfile            = /path/to/ca_certificate.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 = 真

%%经典格式的代码段,现在由advanced.config文件使用。
[
  {兔子,[{ssl_options,[{cacertfile,“ / path / to / ca_certificate.pem             }},
                           {certfile,“ / path / to / server_certificate.pem               },
                           {keyfile,               “ /path/to/server_key.pem” },
                           {verify,verify_peer},
                           {fail_if_no_peer_cert,true}]}]}
]。

主配置文件rabbitmq.conf

配置文件Rabbitmq.conf 允许配置RabbitMQ服务器和插件。从RabbitMQ 3.7.0开始,格式为sysctl格式。

语法可以在3行中简要说明:

  • 一种设置用一行
  • 行结构化键=值
  • 字符开头的任何行都是注释

一个简单的示例配置文件如下:

#这是一条注释
listeners.tcp.default = 5673

经典配置格式中的相同示例:

[
  {兔子, [
      {tcp_listeners,[ 5673 ]}
    ]
  }
]。

本示例将将RabbitMQ侦听 AMQP 0-9-1和AMQP 1.0客户端连接的端口从5672更改为5673。

RabbitMQ服务器源存储库包含一个 名为Rabbitmq.conf.example 的示例Rabbitmq.conf文件。它包含您可能要设置的大多数配置项目的示例(省略了一些非常晦涩的项目),以及有关这些设置的文档。

诸如Networking,TLS或 Access Control之类的文档指南包含许多相关格式的示例。

请注意,请勿将此配置文件与环境变量配置文件rabbitmq-env.conf 和rabbitmq-env-conf.bat混淆。

要覆盖RabbitMQ配置文件的主要位置,请使用RABBITMQ_CONFIG_FILE  环境变量。使用.conf作为新样式配置格式的文件扩展名,例如/etc/rabbitmq/rabbitmq.conf或 /data/configuration/rabbitmq/rabbitmq.conf

advanced.config文件

某些配置设置不可能或难以使用sysctl格式进行配置。因此,可以使用Erlang术语格式的另一个配置文件(与rabbitmq.config相同)。该文件通常命名为advanced.config。它将与Rabbitmq.conf中提供的配置合并。

RabbitMQ服务器源存储库包含一个 名为advanced.config.example 的示例advanced.config文件。它着重于通常使用高级配置设置的选项。

要覆盖高级配置文件的位置,请使用RABBITMQ_ADVANCED_CONFIG_FILE 环境变量。

Rabbitmq.conf,advanced.config和rabbitmq-env.conf的位置

默认配置文件位置是特定于发行版的。RabbitMQ软件包或节点将不会创建任何配置文件。用户和部署工具在创建文件时应使用以下位置:

平台 默认配置文件目录 示例配置文件路径
通用二进制包 $ RABBITMQ_HOME / etc / rabbitmq / $ RABBITMQ_HOME / etc / rabbitmq / rabbitmq.conf, $ RABBITMQ_HOME / etc / rabbitmq / advanced.config
Debian和Ubuntu / etc / rabbitmq / /etc/rabbitmq/rabbitmq.conf, /etc/rabbitmq/advanced.config
基于RPM的Linux / etc / rabbitmq / /etc/rabbitmq/rabbitmq.conf, /etc/rabbitmq/advanced.config
视窗 %APPDATA%\ RabbitMQ \ %APPDATA%\ RabbitMQ \ rabbitmq.conf, %APPDATA%\ RabbitMQ \ advanced.config
MacOS Homebrew公式 $ {install_prefix} / etc / rabbitmq /,而Homebrew地窖前缀通常为/ usr / local $ {} install_prefix /etc/rabbitmq/rabbitmq.conf, $ {} install_prefix /etc/rabbitmq/advanced.config

环境变量可用于覆盖配置文件的位置:

#覆盖主要配置文件的位置
RABBITMQ_CONFIG_FILE = / path / to / a / custom / location / rabbitmq.conf

#覆盖高级配置文件位置
RABBITMQ_ADVANCED_CONFIG_FILE = / path / to / a / custom / location / advanced.config

#覆盖环境变量文件的位置
RABBITMQ_CONF_ENV_FILE = / path / to / a / custom / location / rabbitmq-env.conf

什么时候应用配置文件更改

重启节点后,rabbitmq.confadvanced.config更改才会生效

如果不存在rabbitmq-env.conf,则可以在由RABBITMQ_CONF_ENV_FILE变量指定的位置中手动创建它。在Windows系统上,它名为rabbitmq-env-conf.bat

如果配置文件位置或`rabbitmq-env-conf.bat中的任何值已更改,Windows服务用户将需要重新安装服务。否则,将不会更新服务使用的环境变量。

在部署自动化的上下文中,这意味着理想情况下,应在安装RabbitMQ之前设置环境变量(例如RABBITMQ_BASERABBITMQ_CONFIG_FILE)。这将有助于避免不必要的混乱和重新安装Windows服务。

rabbitmq.config(经典格式)文件

在此之前的RabbitMQ 3.7.0,RabbitMQ的配置文件被命名为 rabbitmq.config并使用相同的Erlang项格式通过使用advanced.config今天。为了向后兼容,仍支持该格式。

经典格式已弃用。请根据需要使用Rabbitmq.conf中的新样式配置格式 ,并附上advanced.config文件。

要使用经典格式的配置文件,请导出RABBITMQ_CONFIG_FILE指向扩展名为.config的文件。该扩展名将向RabbitMQ指示应以经典配置格式将文件视为一个文件。

一个名为 rabbitmq.config.example 的示例配置文件。它包含经典config格式的大多数配置项目的示例。

要覆盖RabbitMQ配置文件的主要位置,请使用RABBITMQ_CONFIG_FILE  环境变量。使用.config作为经典配置格式的文件扩展名。

经典配置格式的使用应仅限于advanced.config文件和不能使用ini-style配置文件配置的设置。

示例配置文件

RabbitMQ服务器源存储库包含配置文件的示例:

  • rabbitmq.conf.example
  • advanced.config.example

这些文件包含大多数配置键的示例以及这些设置的简要说明。在示例中,所有配置项均已注释掉,因此您可以取消注释所需的内容。请注意,示例文件仅用作示例,不应视为一般建议。

在大多数发行版中,示例文件与实际文件放置在相同的位置(请参见上文)。关于Debian和RPM发行政策,禁止这样做;而是分别在/ usr / share / doc / rabbitmq-server / 或/usr/share/doc/rabbitmq-server-3.8.5/下找到文件。

可在rabbitmq.conf中配置的核心服务器变量

这些变量是最常见的。该列表不完整,因为某些设置非常模糊。

文献资料
听众 在其上侦听“普通” AMQP 0-9-1和AMQP 1.0连接(不使用TLS)的端口或主机名/对。有关更多详细信息和示例,请参见网络指南。

默认:

listeners.tcp.default = 5672

 

num_acceptors.tcp 接受TCP侦听器连接的Erlang进程数。

默认:

num_acceptors.tcp = 10

 

handshake_timeout AMQP 0-9-1握手(套接字连接和TLS握手后)的最长时间(以毫秒为单位)。

默认:

handshake_timeout = 10000

 

listeners.ssl 侦听启用了TLS的AMQP 0-9-1和AMQP 1.0连接的端口或主机名/对。有关更多详细信息和示例,请参见TLS指南。

默认值:(未设置)

num_acceptors.ssl 接受来自客户端的TLS连接的Erlang进程数。

默认:

num_acceptors.ssl = 10

 

ssl_options TLS配置。请参阅TLS指南。

默认:

ssl_options =无

 

ssl_handshake_timeout TLS握手超时,以毫秒为单位。

默认:

ssl_handshake_timeout = 5000

 

vm_memory_high_watermark 触发流量控制的内存阈值。可以是绝对值,也可以相对于操作系统可用的RAM量:
vm_memory_high_watermark.relative = 0.6
vm_memory_high_watermark.absolute = 2 GB
请参阅基于内存的流控制和警报 文档。

默认:

vm_memory_high_watermark.relative = 0.4

 

vm_memory_calculation_strategy 内存使用情况报告的策略。可以是以下之一:
  • 已分配:使用Erlang内存分配器统计信息
  • rss:使用操作系统RSS内存报告。这使用特定于操作系统的方法,并且可能会启动短暂的子进程。
  • legacy:使用传统内存报告(运行时认为要使用多少内存)。该策略是相当不准确的。
  • erlang:与legacy相同,保留为向后兼容

默认:

vm_memory_calculation_strategy =已分配

 

vm_memory_high_watermark_paging_ratio 队列开始将消息分页到磁盘以释放内存的高水位标记限制的分数。请参阅基于内存的流控制文档。

默认:

vm_memory_high_watermark_paging_ratio = 0.5

 

total_memory_available_override_value 与使用特定于操作系统的方式从环境推断内存相比,可以覆盖可用的内存总量。仅当节点可用的实际最大RAM量与节点将推断的值不匹配时(例如,由于容器化或节点无法识别的类似约束),才应使用此方法。该值可以设置为整数个字节,也可以设置为信息单位(例如“ 8GB”)。例如,当该值设置为4 GB时,该节点将认为它正在具有4 GB RAM的计算机上运行。

默认值:未定义(未设置或使用)。

disk_free_limit RabbitMQ在其上存储数据的分区的磁盘可用空间限制。当可用磁盘空间低于此限制时,将触发流控制。可以相对于RAM总量设置该值,也可以设置为绝对值(以字节为单位),也可以设置为信息单位(例如,“ 50MB”或“ 5GB”):
disk_free_limit.relative = 3.0
disk_free_limit.absolute = 2 GB
默认情况下,可用磁盘空间必须超过50MB。请参阅磁盘警报文档。

默认:

disk_free_limit.absolute = 50 MB

 

log.file.level 控制日志记录的粒度。该值是日志事件类别和日志级别对的列表。

级别可以是错误(仅记录错误),警告(仅记录错误和警告),信息(错误,警告和参考消息被记录)或调试(错误,警告,参考消息和调试消息)之一。已记录)。

默认:

log.file.level =信息

 

channel_max 与客户端协商的最大允许通道数,不包括协议中使用的特殊通道号0。设置为0表示“无限制”,这是一个危险值,因为应用程序有时会出现通道泄漏。使用更多通道会增加代理的内存占用量。

默认:

channel_max = 2047

 

channel_operation_timeout 通道操作超时(以毫秒为单位)(内部使用,由于消息协议的差异和限制,因此不直接暴露给客户端)。

默认:

channel_operation_timeout = 15000

 

max_message_size 允许的最大消息有效负载大小(以字节为单位)。较大的消息将被拒绝,并带有适当的通道例外。

默认值:134217728

最大值:536870912

心跳 表示服务器在连接参数协商期间建议的心跳超时的值。如果两端都设置为0,则禁用心跳(不建议这样做)。有关详细信息,请参见心跳指南。

默认:

心跳 = 60

 

default_vhost RabbitMQ从头开始创建新数据库时要创建的虚拟主机。交换“ amq.rabbitmq.log”将存在于该虚拟主机中。

默认:

default_vhost = /

 

default_user RabbitMQ从头开始创建新数据库时要创建的用户名。

默认:

default_user =访客

 

default_pass 默认用户的密码。

默认:

default_pass =客人

 

default_user_tags 默认用户的标签。

默认:

default_user_tags.administrator = true

 

default_permissions 创建默认用户时分配给它的权限。

默认:

default_permissions.configure =。*
 default_permissions.read =。*
 default_permissions.write =。*

 

loopback_users 仅允许通过环回接口(即“ localhost”)连接到代理的用户列表。

要允许默认的“ guest”用户远程连接(一种不适合生产使用的安全做法),请将其设置为“ none”:

#糟糕的安全做法,
#考虑
使用安全生成的凭据
创建一个新的用户!loopback_users =无

 

要将另一个用户限制为仅限本地主机的连接,请这样做(“ monitoring”是用户名):

loopback_users.monitoring = true

 

默认:

#guest使用众所周知的
#凭据,并且只能
#从本地主机登录
#默认情况下
loopback_users.guest = true

 

cluster_formation.classic_config.nodes 经典对等发现后端的要联系节点列表。例如,要在第一次引导时使用节点“ rabbit @ hostname1”和“ rabbit @ hostname2”进行集群:
cluster_formation.classic_config.nodes.1 =兔子@主机名1
 cluster_formation.classic_config.nodes.2 =兔子@主机名2

默认值:“ none”(未设置)

collect_statistics 统计信息收集方式。主要与管理插件相关。选项有:
  • `none`(不发出统计事件)
  • `coarse`(发出每个队列/每个通道/每个连接的统计信息)
  • “精细”(还发出按消息统计信息)

默认:

collect_statistics =无

 

collect_statistics_interval 统计信息的收集间隔(以毫秒为单位)。主要与管理插件相关。

默认:

collect_statistics_interval = 5000

 

management_db_cache_multiplier 影响管理插件 将缓存昂贵的管理查询(例如队列列表)的时间。缓存将上次查询的经过时间乘以该值,并将结果缓存此时间量。

默认:

management_db_cache_multiplier = 5

 

auth_mechanisms 提供给客户端的SASL身份验证机制。

默认:

auth_mechanisms.1 =普通
 auth_mechanisms.2 = AMQPLAIN

 

auth_backends

要使用 的身份验证和授权后端列表。有关详细信息和示例,请参见访问控制指南。

通过插件可以使用除`rabbit_auth_backend_internal`外的其他数据库。

默认:

auth_backends.1 =内部

 

reverse_dns_lookups 设置为true可使RabbitMQ对客户端连接执行反向DNS查找,并通过rabbitmqctl和管理插件显示该信息。

默认:

reverse_dns_lookups = 假

 

proxy_count 用于集群内部通信的委托进程数。在具有大量核心并且也是群集一部分的计算机上,您可能希望增加该值。

默认:

proxy_count = 16

 

tcp_listen_options 默认套接字选项。您可能不想更改此设置。

默认:

tcp_listen_options.backlog = 128 
tcp_listen_options.nodelay = 真
tcp_listen_options.linger.on = 真
tcp_listen_options.linger.timeout = 0 
tcp_listen_options.exit_on_close = 假

 

hipe_compile

不使用。不再支持此选项。从Erlang 22开始删除了受支持的HiPE。

默认:

hipe_compile = 假

 

cluster_partition_handling 如何处理网络分区。可用的模式有:
  • 忽视
  • 自愈
  • pause_minority
  • pause_if_all_down
pause_if_all_down模式需要其他参数:
  • 节点
  • 恢复
有关更多信息,请参见 分区文档。

默认:

cluster_partition_handling =忽略

 

cluster_keepalive_interval 节点应向其他节点发送保持活动消息的频率(以毫秒为单位)。请注意,这与net_ticktime不同;错过的keepalive消息不会导致节点被认为宕机。

默认:

cluster_keepalive_interval = 10000

 

queue_index_embed_msgs_below 消息的大小(字节),低于该大小的消息将直接嵌入队列索引中。建议您在更改之前阅读持久性调整文档。

默认:

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 队列主服务器定位策略。可用的策略有:
  • 最小大师
  • 客户本地
  • 随机
有关更多信息,请参阅有关队列主服务器位置的 文档。

默认:

queue_master_locator =本地客户端

 

proxy_protocol 如果设置为true,则在打开AMQP连接时,RabbitMQ将期望首先发送代理协议标头。这意味着在RabbitMQ的前面设置一个符合代理协议的反向代理(例如HAproxy 或AWS ELB)。启用代理协议后,客户端无法直接连接到RabbitMQ,因此所有连接都必须通过反向代理。

有关更多信息,请参见网络指南。

默认:

proxy_protocol = 假

 

只能在“ 兔子”部分下的高级配置文件中设置以下配置设置。

文献资料
msg_store_index_module 队列索引的实现模块。建议您 在更改此内容之前阅读消息存储调整文档。

默认值:rabbit_msg_store_ets_index

{兔子, [
{msg_store_index_module,rabbit_msg_store_ets_index}
]}

 

backing_queue_module 队列内容的实现模块。

默认:

{兔子, [
{backing_queue_module,rabbit_variable_queue}
]}

 

msg_store_file_size_limit 消息存储段文件的大小。对于具有现有(已初始化)数据库的节点更改此设置很危险,可能导致数据丢失!

默认值:16777216

{兔子,[
 %% 
使用现有(已初始化)数据库
对节点%%进行更改很危险,可能会导致%%导致数据丢失!
{msg_store_file_size_limit,16777216 }
]}

 

trace_vhosts 由跟踪器内部使用。你不应该改变这个。

默认:

{兔子, [
{trace_vhosts,[]}
]}

 

msg_store_credit_disc_bound 消息存储给予队列处理的功劳。

默认情况下,为队列进程分配4000个消息存储信用,然后为它处理的每800条消息分配800个信用。

由于内存压力而需要分页的邮件也将使用此信用。

消息存储是信用流链中的最后一个组件。了解信贷流量。

仅当消息持久保存到消息存储中时,此值才生效。如果消息嵌入在队列索引中,则修改此设置无效,因为在写入队列索引时不使用credit_flow。

默认:

{兔子, [
{msg_store_credit_disc_bound,{ 4000800 }}
]}

 

queue_index_max_journal_entries 在多少个队列索引日志条目之后,它将刷新到磁盘。

默认:

{兔子, [
{queue_index_max_journal_entries,32768 }
]}

 

lazy_queue_explicit_gc_run_operation_threshold 仅在内存不足时才可用于懒惰队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。

默认:

{兔子,[
{lazy_queue_explicit_gc_run_operation_threshold,1000}
] }

 

queue_explicit_gc_run_operation_threshold 仅在内存不足时可用于普通队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。

默认:

{兔子,[
{queue_explicit_gc_run_operation_threshold,1000}
] }

 

RabbitMQ随附的几个插件都有专门的文档指南,涵盖了插件配置:

  • rabbitmq_management
  • rabbitmq_management_agent
  • rabbitmq_stomp
  • rabbitmq_mqtt
  • rabbitmq_shovel
  • rabbitmq_federation
  • rabbitmq_auth_backend_ldap

配置值加密

敏感的配置条目(例如密码,包含凭据的URL)可以在RabbitMQ配置文件中进行加密。代理在启动时解密加密的条目。

请注意,加密的配置条目不会使系统真正更安全。但是,它们允许RabbitMQ的部署符合各个国家/地区的法规,要求配置文件中的纯文本中不得显示任何敏感数据。

加密值必须位于Erlang 加密 元组内:{encrypted,...}。这是默认用户的带有加密密码的配置文件示例:

[
  {兔子, [
      {default_user,<< “ guest” >>},
      {default_pass,
        {已加密,
         << “ cPAymwqmMnbPXXRVqVzpxJdrS8mHEKuo2V + 3vt1u / fymexD9oztQ2G / oJ4PAaSb2c5N / hRJ2aqP / X0VAfx8xOQ ==” >>
        }
      },
      {config_entry_decoder,[
             {passphrase,<< “ mypassphrase” >>}
         ]}
    ]}
]。

请注意config_entry_decoder密钥和RabbitMQ将用来解密加密值的密码。

密码不必在配置文件中进行硬编码,它可以在单独的文件中:

[
  {兔子, [
      %% ...
      {config_entry_decoder,[
             {passphrase,{file,“ / path / to / passphrase / file” }}
         ]}
    ]}
]。

RabbitMQ还可以通过使用{passphrase,提示符}来要求操作员在输入密码时输入密码。

使用rabbitmqctl和encode 命令加密值:

rabbitmqctl编码'<<“ guest” >>' mypassphrase
{encrypted,<< “ ...长加密值...” >>}
rabbitmqctl编码' “AMQP://弗雷德:[email protected]/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}

或者,在Windows上:

rabbitmqctl编码“ <<” “来宾” “ >>” mypassphrase
{encrypted,<< “ ...长加密值...” >>}
rabbitmqctl编码' “AMQP://弗雷德:[email protected]/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}

如果要解密值,请添加解码命令:

rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
<< “客人” >>
rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
 “ amqp:// fred:[email protected]/my_vhost”

或者,在Windows上:

rabbitmqctl解码“ {encrypted,<<” “ ...” “ >>}” mypassphrase
<< “客人” >>
rabbitmqctl解码“ {encrypted,<<“ ” ...“ ” >>}“ mypassphrase
 ” amqp:// fred:[email protected]/my_vhost“

可以对不同类型的值进行编码。上面的示例对二进制文件(<<“ guest” >>)和字符串(“ amqp:// fred:[email protected]/my_vhost”)进行编码

加密机制使用PBKDF2从密码生成一个派生密钥。默认哈希函数为SHA512,默认迭代次数为1000。默认密码为AES 256 CBC。

这些默认值可以在配置文件中更改:

[
  {兔子, [
      ...
      {config_entry_decoder,[
             {passphrase,“ mypassphrase” },
             {cipher,blowfish_cfb64},
             {hash,sha256},
             {次,10000 }
         ]}
    ]}
]。

或使用CLI工具:

rabbitmqctl编码--cipher blowfish_cfb64- 哈希 sha256-迭代10000 \
                      '<<“ guest” >>' mypassphrase

或者,在Windows上:

rabbitmqctl编码--cipher blowfish_cfb64-- hash sha256-- iterations  10000 \
                      “ <<” “ guest” “ >>” mypassphrase

使用环境变量进行配置

可以使用环境变量来配置某些服务器参数: 节点名称,RabbitMQ 配置文件位置, 节点间通信端口,Erlang VM标志等等。

路径和目录名称限制

一些环境变量配置路径和位置(节点的基本或数据目录,插件源目录和扩展目录,等等)。这些路径必须排除许多字符:

  • *(在Linux,macOS,BSD和其他类似UNIX的系统上)
  • ^(在Windows上)
  • []
  • {}

以上字符将使节点无法启动或正常运行(例如,扩展插件并加载其元数据)。

Linux,MacOS,BSD

在基于UNIX的系统(Linux,MacOS和BSD的版本)上,可以使用名为rabbitmq-env.conf的文件 来定义代理将使用的环境变量。可以使用RABBITMQ_CONF_ENV_FILE环境变量来配置其位置。

rabbitmq-env.conf使用标准环境变量名称,但没有RABBITMQ_前缀。例如, RABBITMQ_CONFIG_FILE变量在下面显示为CONFIG_FILE,RABBITMQ_NODENAME变为NODENAME

#示例Rabbitmq-env.conf文件条目。请注意,变量
#没有RABBITMQ_前缀。

#覆盖节点名称
NODENAME =兔子@myhost

#指定新样式的配置文件位置
CONFIG_FILE = / etc / rabbitmq / rabbitmq.conf

#指定高级配置文件位置
ADVANCED_CONFIG_FILE = / etc / rabbitmq / advanced.config

有关详细信息,请参见rabbitmq-env.conf手册页。

视窗

定制名称,端口或位置的最简单选项是在Windows对话框中配置环境变量:“开始”>“设置”>“控制面板”>“系统”>“高级”>“环境变量”。然后创建或编辑系统变量名称和值。

或者,可以使用名为rabbitmq-env-conf.bat的文件 来定义代理将使用的环境变量。可以使用RABBITMQ_CONF_ENV_FILE环境变量来配置其位置。

如果配置文件位置或`rabbitmq-env-conf.bat中的任何值更改,Windows服务用户将需要重新安装该服务。否则,将不会更新服务使用的环境变量。

可以使用安装程序或在具有管理员权限的命令行上完成此操作:

  • 启动管理命令提示符
  • cd进入RabbitMQ服务器安装目录下的sbin文件夹(例如C:\ Program Files(x86)\ RabbitMQ Server \ rabbitmq_server- {version} \ sbin
  • 运行rabbitmq-service.bat stop停止服务
  • 运行rabbitmq-service.bat remove以删除Windows服务(这不会删除RabbitMQ或其数据目录)
  • 通过命令行设置环境变量,即运行如下命令:
    设置 RABBITMQ_BASE = C:\ Data \ RabbitMQ
  • 运行rabbitmq-service.bat安装
  • 运行rabbitmq-service.bat开始

这将以使环境变量和rabbitmq-env-conf.bat更改可观察到的方式重启节点 。

RabbitMQ使用的环境变量

RabbitMQ使用的所有环境变量都使用前缀RABBITMQ_(在rabbitmq-env.conf或 rabbitmq-env-conf.bat中定义时除外)。

在shell环境中设置的环境变量优先于Rabbitmq-env.conf或 Rabbitmq-env-conf.bat中设置的变量,后者依次覆盖RabbitMQ内置的默认设置。

下表描述了可用于配置RabbitMQ的关键环境变量。“ 文件和目录位置”指南中介绍了更多变量。

名称 描述
RABBITMQ_NODE_IP_ADDRESS 如果只想绑定到一个网络接口,请更改此设置。可以在配置文件中设置绑定到两个或多个接口。

默认值:一个空字符串,表示“绑定到所有网络接口”。

RABBITMQ_NODE_PORT 有关RabbitMQ各个部分使用的端口的更多信息,请参见网络指南。

默认值:5672。

RABBITMQ_DIST_PORT 用于节点间和CLI工具通信的端口。忽略节点配置文件是否设置了kernel.inet_dist_listen_minkernel.inet_dist_listen_max密钥。有关详细信息,请参见网络。

默认值RABBITMQ_NODE_PORT + 20000

ERL_EPMD_ADDRESS epmd 使用的接口,它是节点间和CLI工具通信中的组件。

默认值:所有可用接口,IPv6和IPv4。

ERL_EPMD_PORT epmd 使用的端口,它是节点间和CLI工具通信中的组件。

默认值4369

RABBITMQ_DISTRIBUTION_BUFFER_SIZE 用于节点间通信连接的传出数据缓冲区大小限制(以千字节为单位)。不建议使用低于64 MB的值。

默认值:128000

RABBITMQ_IO_THREAD_POOL_SIZE 运行时用于I / O的线程数。不建议使用低于32的值。

默认值:128(Linux),64(Windows)

RABBITMQ_NODENAME 每个Erlang-node-and-machine组合的节点名称应该唯一。要运行多个节点,请参阅集群指南。

默认值

  • Unix *: rabbit @ $ HOSTNAME
  • Windows: rabbit @%COMPUTERNAME%

 

RABBITMQ_CONFIG_FILE RabbitMQ主配置文件路径,例如 /etc/rabbitmq/rabbitmq.conf/data/configuration/rabbitmq.conf(用于新样式配置格式文件)。如果使用经典配置格式,则扩展名必须为.config 或可以完全省略。

默认值

  • 通用UNIX$ RABBITMQ_HOME / etc / rabbitmq / rabbitmq
  • Debian的/ etc / rabbitmq / rabbitmq
  • RPM/ etc / rabbitmq / rabbitmq
  • MacOS(Homebrew)$ {install_prefix} / etc / rabbitmq / rabbitmq,Homebrew前缀通常为/ usr / local
  • Windows%APPDATA%\ RabbitMQ \ rabbitmq

 

RABBITMQ_ADVANCED_CONFIG_FILE “高级”(基于Erlang术语)RabbitMQ配置文件路径,扩展名为.config。例如,/ data/rabbitmq/advanced.config

默认值

  • 通用UNIX$ RABBITMQ_HOME / etc / rabbitmq / advanced
  • Debian/ etc / rabbitmq / advanced
  • RPM/ etc / rabbitmq / advanced
  • MacOS(Homebrew)$ {install_prefix} / etc / rabbitmq / advanced,Homebrew前缀通常为/ usr / local
  • Windows%APPDATA%\ RabbitMQ \高级

 

RABBITMQ_CONF_ENV_FILE 包含环境变量定义的文件的位置(不带RABBITMQ_ 前缀)。请注意,Windows上的文件名不同于其他操作系统。

默认值

  • 通用UNIX软件包$ RABBITMQ_HOME / etc / rabbitmq / rabbitmq-env.conf
  • Ubuntu和Debian/etc/rabbitmq/rabbitmq-env.conf
  • RPM/etc/rabbitmq/rabbitmq-env.conf
  • MacOS(Homebrew)$ {install_prefix} /etc/rabbitmq/rabbitmq-env.conf,Homebrew前缀通常为/ usr / local
  • Windows%APPDATA%\ RabbitMQ \ rabbitmq-env-conf.bat

 

RABBITMQ_MNESIA_BASE 该基本目录包含RabbitMQ服务器的节点数据库,消息存储和集群状态文件的子目录,每个节点一个子目录,除非明确设置了RABBITMQ_MNESIA_DIR。有效的RabbitMQ用户必须有足够的权限随时读取,写入和创建此目录中的文件和子目录,这一点很重要。通常不会覆盖此变量。通常会改写RABBITMQ_MNESIA_DIR

默认值

  • 通用UNIX软件包$ RABBITMQ_HOME / var / lib / rabbitmq / mnesia
  • Ubuntu和Debian软件包:/ var / lib / rabbitmq / mnesia /
  • RPM/ var / lib / rabbitmq / plugins
  • MacOS(Homebrew)$ {install_prefix} / var / lib / rabbitmq / mnesia,Homebrew前缀通常为/ usr / local
  • Windows%APPDATA%\ RabbitMQ

 

RABBITMQ_MNESIA_DIR 该RabbitMQ节点的数据存储目录。这包括架构数据库,消息存储,集群成员信息和其他持久节点状态。

默认值

  • 通用UNIX软件包$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME
  • Ubuntu和Debian软件包:$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME
  • RPM$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME
  • MacOS(Homebrew)$ {install_prefix} / var / lib / rabbitmq / mnesia / $ RABBITMQ_NODENAME,Homebrew前缀通常为/ usr / local
  • Windows%APPDATA%\ RabbitMQ \ $ RABBITMQ_NODENAME

 

RABBITMQ_PLUGINS_DIR 插件档案文件 所在的目录列表。这是类似PATH的变量,其中不同的路径由OS特定的分隔符分隔(::对于Unix ,;对于Windows)。插件可以安装到此处列出的任何目录中。不得包含路径限制部分中提到的任何字符。

默认值

  • 通用UNIX软件包$ RABBITMQ_HOME / plugins
  • Ubuntu和Debian软件包:/ var / lib / rabbitmq / plugins
  • RPM/ var / lib / rabbitmq / plugins
  • MacOS(Homebrew)$ {install_prefix} / Cellar / rabbitmq / $ {version} / plugins,Homebrew前缀通常为/ usr / local
  • Windows%RABBITMQ_HOME%\ plugins

 

RABBITMQ_PLUGINS_EXPAND_DIR 节点将插件扩展(解压)插件的目录,并将其用作代码路径位置。不得包含路径限制部分中提到的任何字符。

默认值

  • 通用UNIX软件包$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME-plugins-expand
  • Ubuntu和Debian软件包:$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME-plugins-expand
  • RPM$ RABBITMQ_MNESIA_BASE / $ RABBITMQ_NODENAME-插件-扩大
  • MacOS(自制软件): $ {install_prefix} / var / lib / rabbitmq / mnesia / $ RABBITMQ_NODENAME-plugins-expand
  • Windows%APPDATA%\ RabbitMQ \ $ RABBITMQ_NODENAME-plugins-expand

 

RABBITMQ_USE_LONGNAME 设置为true时,这将导致RabbitMQ使用完全限定的名称来标识节点。在使用完全限定域名的环境中,这可能会很有用。请注意,在不重置节点的情况下,不可能在使用短名称和长名称之间进行切换。

默认值false

RABBITMQ_SERVICENAME 已安装的Windows服务的名称。这将出现在 services.msc中

默认值:RabbitMQ。

RABBITMQ_CONSOLE_LOG 将此变量设置为new重新使用, 以将控制台输出从服务器重定向到默认RABBITMQ_BASE目录中名为%RABBITMQ_SERVICENAME%的文件。
  • 如果未设置,则服务器的控制台输出将被丢弃(默认)。
  • new:每次服务启动时都会创建一个新文件。
  • 重用:每次服务启动时,文件将被覆盖。

默认值:(无)

RABBITMQ_SERVER_CODE_PATH

启动运行时时,需要指定额外的代码路径(目录)。启动节点时将传递给erl命令。

默认值:(无)

RABBITMQ_CTL_ERL_ARGS 调用Rabbitmqctl时使用 的erl命令的 参数。可以将其设置为指定用于Erlang分发的端口范围:-kernel inet_dist_listen_min 35672 -kernel inet_dist_listen_max 35680
 

默认值:(无)

RABBITMQ_SERVER_ERL_ARGS 调用RabbitMQ服务器时使用 的erl命令的标准参数。应该仅出于调试目的而将其覆盖。覆盖此变量 将替换默认值。

默认值

  • Unix *: + P 1048576 + t 5000000 + stbt db + zdbbl 128000
  • Windows:

 

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS 调用RabbitMQ服务器时使用 的erl命令的附加参数。此变量的值附加到默认参数列表(RABBITMQ_SERVER_ERL_ARGS)。

默认值

  • Unix *:
  • Windows:

 

RABBITMQ_SERVER_START_ARGS 调用RabbitMQ服务器时使用 的erl命令的附加参数。这不会覆盖 RABBITMQ_SERVER_ERL_ARGS

默认值:(无)

除了上面列出的变量之外,还有几个环境变量可以告诉RabbitMQ 在哪里找到其数据库,日志文件,插件,配置等。

最后,某些环境变量是特定于操作系统的。

名称 描述
主机名 当前机器的名称。

默认值

  • Unix,Linux:env主机名
  • MacOS:env主机名-s

 

电脑名称 当前机器的名称。

默认值

  • Windows:本地主机

 

ERLANG_SERVICE_MANAGER_PATH 此路径是erlsrv.exe(Erlang服务包装器脚本)的位置。

默认值

  • Windows服务:%ERLANG_HOME%\ erts- xxx \ bin

 

操作系统内核限制

大多数操作系统都对内核资源施加限制:虚拟内存,堆栈大小,打开的文件句柄等等。对于Linux用户,这些限制可以称为“ ulimit限制”。

RabbitMQ节点通常受最大打开文件句柄限制的影响。大多数Linux发行版的默认限制值通常为1024,这对于消息传递代理(或通常为任何数据服务)而言非常低。有关建议值,请参见生产清单。

修改限制

使用systemd(现代Linux发行版)

在使用systemd的发行版上,操作系统限制是通过/etc/systemd/system/rabbitmq-server.service.d/limits.conf中的配置文件控制的。例如,要将最大打开文件句柄限制(nofile)设置为64000

[服务]
限制NOFILE = 64000

请参阅systemd文档以了解受支持的限制和其他指令。

使用Docker

要配置Docker包含的内核限制,请使用Docker守护程序配置文件中的“ default-ulimits”键 。该文件必须安装在Docker主机上的/etc/docker/daemon.json上

{
   “ default-ulimits”:{
     “ nofile”:{
       “ Name”“ nofile”“ Hard”64000“ Soft”64000
    }
  }
}

没有systemd(旧的Linux发行版)

调整不使用systemd的发行版上RabbitMQ的每用户限制的最直接方法是编辑/ etc / default / rabbitmq-server (由RabbitMQ Debian软件包提供)或rabbitmq-env.conf, 在调用ulimit之前服务已启动。

ulimit -S -n 4096

限制不能高于限制(在许多发行版中默认为4096)。 可以通过 /etc/security/limits.conf 增加硬限制。这还需要启用pam_limits.so模块并重新登录或重新引导。

你可能感兴趣的:(Rabbitmq入门到精通)