0


Linux下rabbitmq运维相关:日志、自定义配置等

本文主要借鉴自
官网:https://www.rabbitmq.com/
http://t.zoukankan.com/liujunjun-p-14143256.html
以下内容已经过本人验证

1 RabbitMQ配置文件详解

RabbitMQ有三类配置文件,作用大致相似,分别为:

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

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

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

如果rabbitmq.conf和rabbitmq-env.conf 的两个文件不存在,那么我们可以在指定目录(/etc/rabbitmq/)下创建该文件。

1.1 rabbitmq.conf(最常用)

配置属性和描述(官网链接)
属性描述默认值listeners要监听 AMQP 0-9-1 and AMQP 1.0 的端口listeners.tcp.default = 5672num_acceptors.tcp接受tcp连接的erlang 进程数num_acceptors.tcp = 10handshake_timeoutAMQP 0-9-1 超时时间,也就是最大的连接时间,单位毫秒handshake_timeout = 10000listeners.ssl启用TLS的协议默认值为nonenum_acceptors.ssl接受基于TLS协议的连接的erlang 进程数num_acceptors.ssl = 10ssl_optionsTLS 配置ssl_options =nonessl_handshake_timeoutTLS 连接超时时间 单位为毫秒ssl_handshake_timeout = 5000vm_memory_high_watermark触发流量控制的内存阈值,可以为相对值(0.5),或者绝对值 vm_memory_high_watermark.relative = 0.6 ,vm_memory_high_watermark.absolute = 2GB默认vm_memory_high_watermark.relative = 0.4vm_memory_calculation_strategy内存使用报告策略,assigned:使用Erlang内存分配器统计信息 rss:使用操作系统RSS内存报告。这使用特定于操作系统的方法,并可能启动短期子进程。legacy:使用遗留内存报告(运行时认为将使用多少内存)。这种策略相当不准确。erlang 与legacy一样 是为了向后兼容vm_memory_calculation_strategy = allocatedvm_memory_high_watermark_paging_ratio当内存的使用达到了50%后,队列开始将消息分页到磁盘vm_memory_high_watermark_paging_ratio = 0.5total_memory_available_override_value该参数用于指定系统的可用内存总量,一般不使用,适用于在容器等一些获取内存实际值不精确的环境默认未设置disk_free_limitRabbitmq存储数据的可用空间限制,当低于该值的时候,将触发流量限制,设置可参考vm_memory_high_watermark参数disk_free_limit.absolute = 50MBlog.file.level控制记录日志的等级,有info,error,warning,debuglog.file.level = infochannel_max最大通道数,但不包含协议中使用的特殊通道号0,设置为0表示无限制,不建议使用该值,容易出现channel泄漏channel_max = 2047channel_operation_timeout通道操作超时,单位为毫秒channel_operation_timeout = 15000heartbeat表示连接参数协商期间服务器建议的心跳超时的值。如果两端都设置为0,则禁用心跳,不建议禁用heartbeat = 60default_vhostrabbitmq安装后启动创建的虚拟主机default_vhost = /default_user默认创建的用户名default_user = guestdefault_pass默认用户的密码default_pass = guestdefault_user_tags默认用户的标签default_user_tags.administrator = truedefault_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@hostname1cluster_formation.classic_config.nodes.2 = rabbit@hostname2默认为空,未设置collect_statistics统计收集模式,none 不发出统计信息事件,coarse每个队列连接都发送统计一次,fine每发一条消息的统计数据collect_statistics = nonecollect_statistics_interval统计信息收集间隔,以毫秒为单位collect_statistics_interval = 5000delegate_count用于集群内通信的委托进程数。在多核的服务器上我们可以增加此值delegate_count = 16tcp_listen_options默认的套接字选项tcp_listen_options.backlog = 128 …hipe_compile设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器,启用HiPE可以提高吞吐量两位数,但启动时会延迟几分钟。Erlang运行时必须包含HiPE支持。如果不是,启用此选项将不起作用。HiPE在某些平台上根本不可用,尤其是Windows。hipe_compile = falsecluster_keepalive_interval节点应该多长时间向其他节点发送keepalive消息(以毫秒为单位),keepalive的消息丢失不会被视为关闭cluster_keepalive_interval = 10000queue_index_embed_msgs_below消息的字节大小,低于该大小,消息将直接嵌入队列索引中 bytesqueue_index_embed_msgs_below = 4096mnesia_table_loading_retry_timeout等待集群中Mnesia表可用的超时时间,单位毫秒mnesia_table_loading_retry_timeout = 30000mnesia_table_loading_retry_limit集群启动时等待Mnesia表的重试次数,不适用于Mnesia升级或节点删除。mnesia_table_loading_retry_limit = 10mirroring_sync_batch_size要在队列镜像之间同步的消息的批处理大小mirroring_sync_batch_size = 4096queue_master_locator队列主节点的策略,有三大策略 min-masters,client-local,randomqueue_master_locator = client-localproxy_protocol如果设置为true ,则连接需要通过反向代理连接,不能直连接proxy_protocol = falsemanagement.listener.portrabbitmq 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消息储存的文件大小,现有的节点更改是危险的,可能导致数据丢失默认值16777216trace_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端口默认为5672RABBITMQ_DISTRIBUTION_BUFFER_SIZE节点之间通信连接的数据缓冲区大小默认为128000,该值建议不要使用低于64MBRABBITMQ_IO_THREAD_POOL_SIZE运行时用于io的线程数建议不要低于32,linux默认为128 ,windows默认为64RABBITMQ_NODENAMErabbitmq节点名称,集群中要注意节点名称唯一linux 默认节点名为 rabbit@$hostnameRABBITMQ_CONFIG_FILErabbitmq 的配置文件路径,注意不要加文件的后缀(.conf)默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二进制安装) /etc/rabbitmq/rabbitmq(rpm 安装)RABBITMQ_ADVANCED_CONFIG_FILEadvanced.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/

2 生产环境建议

官网链接

2.1 vhost

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

2.2 user

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

2.3 内存

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

2.4 磁盘

磁盘默认的储存数据阈值是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,如果你的磁盘空间比较少的话,不建议设置该值。

2.5 连接

少使用短连接,使用连接池或者长连接。

2.6 TLS

建议尽可能使用TLS连接,使用TLS会对传输的数据加密,但是对系统的吞吐量产生很大的影响

2.7 更改默认端口

我们常用的web界面的端口 15672 和AMQP 0-9-1 协议端口 5672 ,建议更改,web界面更改,配置参数 management.listener.port ,AMQP 0-9-1 协议端口配置参数 listeners.tcp.default。

3 日志排查

默认log在

/var/log/rabbitmq/

tail-f /var/log/rabbitmq/*.log
标签: rabbitmq 运维 linux

本文转载自: https://blog.csdn.net/weixin_43702146/article/details/128793550
版权归原作者 L-960 所有, 如有侵权,请联系我们删除。

“Linux下rabbitmq运维相关:日志、自定义配置等”的评论:

还没有评论