rabbitmq 生产环境配置

目录

  • 一 rabbitmq 生产部署

    • 1.1 rabbitmq.conf
    • 1.2 advanced.config
    • 1.3 rabbitmq-env.conf
    • 1.4 在生产环境中不适用的策略。

一 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

查看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会对传输的数据加密,但是对系统的吞吐量产生很大的影响

原文地址:https://www.cnblogs.com/operationhome/p/10483840.html

时间: 2024-11-15 09:38:30

rabbitmq 生产环境配置的相关文章

虚拟机上Centos6.5/6.6系统配置动态方式上网及生产环境配置公网的方式

在VMware Workstation虚拟机上安装Centos系统,当系统无法上网的时候,我们可以通过常用配置的方式,如下: TYPE=Ethernet DEVICE=eth0  #网络虚拟接口名HWADDR=00:0C:29:60:FF:8B  #网卡mac地址ONBOOT=yes  #启动系统时就激活 NM_CONTROLLED=yes  #实时生效,修改后无需要重启网卡立即生效. BOOTPROTO=dhcp #使用自动分配IP地址 注意:虚拟机网络连接方式选择NAT 当我们使用服务器上安

SQL Server 黑盒跟踪 -- 如何在生产环境配置?

SQL Server 黑盒跟踪 -- 如何在生产环境配置? 如果遇到间歇性故障,为了充分利用黑盒跟踪,就要确保当服务器运行时它也一直出于运行状态(包括计划中的或计划外重启之后).为达到这个要求,可以将黑盒跟踪设置为在SQL Server启动时自动启动.首先,将跟踪定义封装在主数据库的一个存储过程中: USE master GO CREATE PROCEDURE StartBlackBoxTrace AS BEGIN DECLARE @TraceId int DECLARE @maxfilesiz

webpack开发与生产环境配置

前言 作者去年就开始使用webpack, 最早的接触就来自于vue-cli.那个时候工作重点主要也是 vue 的使用,对webpack的配置是知之甚少,期间有问题也是询问大牛 @吕大豹.顺便说一句,对于前端知识体系迷茫的童鞋可以关注豹哥的微信公众号,<大豹杂说>.豹哥对于刚开始小白的自己(虽然现在也白)知无不谈,而且回复超快超认真.这里真的很感谢豹哥.前段时间工作不忙,自己就啃了啃webpack的官方文档,毕竟知识还是在自己脑袋里踏实.然后根据vue-cli的配置文件丰富了一点新的东西,发布出

[django]Django的css、image和js静态文件生产环境配置

前言:在Django中HTML文件如果采用外联的方式引入css,js文件或者image图片,一般采用<link rel="stylesheet" href="../css/lstyle.css">这个格式,但是django中需要配置一下,才能如此使用. 关键词:django静态文件 django生产环境 django1.8 正文: 第一步,在django工程目录下建立static文件夹,同时在static文件夹下建立css img js三个不同名称的文件

hbase centOS生产环境配置笔记 (1 NameNode, 1 ResourceManager, 3 DataNode)

本次是第一次在生产环境部署HBase,本文若有配置上的不妥之处还请高手指正. hadoop版本:hadoop-2.4.1 HBase版本:hbase-0.98.6.1-hadoop2 JDK:1.6 操作系统:centOS6.3 64bit 1. 安装snappy #yum install snappyInstalled: snappy.x86_64 0:1.1.0-1.el6 #yum install snappy-devel 记录一下,当前GCC版本4.4.7 2. 由于hadoop官网下载

搭建vsftp服务器生产环境配置

生产环境:操作系统:CentOS release 6.9 (Final)软件:vsftpd-2.2.2-24.el6.x86_64实战任务:给定账号,让开发商上传站群代码到服务器的指定目录,可以读写:操作过程如下:一.配置防火墙,开启FTP服务器需要的端口[[email protected] /]# vi /etc/sysconfig/iptables    #添加端口号-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEP

Docker生产环境配置——设置direct-lvm模式

CentOS/RHEL 的用户需要注意的事项 来源:https://yeasy.gitbooks.io/docker_practice/image/rm.html 在 Ubuntu/Debian 上有 UnionFS 可以使用,如 aufs 或者 overlay2,而 CentOS 和 RHEL 的内核中没有相关驱动.因此对于这类系统,一般使用 devicemapper 驱动利用 LVM 的一些机制来模拟分层存储.这样的做法除了性能比较差外,稳定性一般也不好,而且配置相对复杂.Docker 安装

samba基于虚拟用户的生产环境配置

前段时间,加入了学校的一个实验室.后来学长让我们小组在5天之内搭建出一个基于虚拟用户的samba共享服务.要求是实验室三个小组的成员能够访问所有共享资料,但不能上传和删除.每个组的组长可以上传和删除本组资料.另外需要使用虚拟用户实现.一开始,大家都有点懵,然后就在网上找资料,最后基本确定了一个实现方案. 刚开始给了一台服务器装机,乍一看,这服务器有年头了,大箱子似的,是浪潮的一款比较老的机器,04年进的学校,古董级别的,哈哈.于是,我们小组的人开始装机了,但是中间遇到了许多问题.仔细一研究,这东

nodejs 生产环境配置

1.node 默认为development(开发)模式 启动node 时可以设置模式为生产模式 set NODE_ENV=production node app.js 2.设置node监听的端口 var port = normalizePort(process.env.PORT || '5000');//程序中这样设置,默认为5000端口 当命令台启动程序时如下设置,则端口配置为1234. set PORT=1234 node app.js