22

rabbitmq集群搭建以及万级并发下的性能调优

 3 years ago
source link: https://blog.csdn.net/lifetragedy/article/details/116642936
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
rabbitmq集群搭建以及万级并发下的性能调优_lifetragedy的专栏-CSDN博客

一、 服务器列表

ROLEOPERATING SYSTEMNAMESIZEAVAILABILITY SETPRIVATE IP ADDRESSDATA DISKSMOUNT  POINTEnvironment versionListen PortRabbitMQ01OpenLogic/CentOS/7.4aceta022vu11Standard_DS2_v2(2 vcpus, 7 GB memory)ACETA022AS0510.224.28.12132GB/datasample3.7.175672,15672,25672RabbitMQ02OpenLogic/CentOS/7.4aceta022vu12Standard_DS2_v2(2 vcpus, 7 GB memory)ACETA022AS0510.224.28.12232GB/datasample3.7.175672,15672,25672RabbitMQ03OpenLogic/CentOS/7.4aceta022vu13Standard_DS2_v2(2 vcpus, 7 GB memory)ACETA022AS0510.224.28.12332GB/datasample3.7.175672,15672,25672

二、 环境配置

配置三台rabbitmq的hosts:

sudo vim /etc/hosts

配置Erlang yum repository

sudo vim /etc/yum.repos.d/rabbitmq-erlang.repo

安装erlang依赖

sudo yum install -y erlang

三、RabbitMQ安装

以下操作在10.224.28.121上执行:

官网下载地址:https://www.rabbitmq.com/install-generic-unix.html

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.17/rabbitmq-server-generic-unix-3.7.17.tar.xz

解压到/data目录下

添加环境变量(这个步骤三台主机都需要)

sudo vim /etc/profile

注:执行 source /etc/profile 使变量生效

启用Rabbitmq插件

拷贝rabbitmq-server到另两台主机

拷贝.erlang.cookie到另两台主机:

.erlang.cookie 文件位置位于$home/.erlang.cookie,必须保证集群内所有的cookie文件是一致的,然后在启动服务。

四、 启动Rabbitmq服务,并配置权限

使用-detached参数运行各节点

rabbitmq-server -detached

添加admin用户,并授权

五、 组建集群

rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用./rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。

将aceta022vu12、aceta022vu13与aceta022vu11组成集群

# 在aceta022vu12、aceta022vu13分别执行:

则此时 aceta022vu12与 aceta022vu13也会自动建立连接,集群配置完毕

PS:如果要使用内存节点,则可以使用aceta022vu12# rabbitmqctl join_cluster --ram rabbit@aceta022vu11加入集群,集群配置好后,可以在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。

六、 集群状态查看

可以任意节点上执行:

rabbitmqctl cluster_status

七、 网页访问管理页面查看

http://10.224.28.121:15672/#/

八、 配置优化建议(每台保持同样的配置,配置完成后重启RabbitMQ,如启动失败则用前台方式启动查看输出日志)

1. linux操作系统参数优化(视服务器实际情况参数优化),配置文件:/etc/sysctl.conf

2. RabbitMQ配置优化,新增文件rabbitmq.conf,文件存放目录:/data/rabbitmq_server-3.7.17/etc/rabbitmq/,注意修改日志目录:log.dir,主要修改接受TCP连接的Erlang进程数、握手超时、最大内存使用、磁盘空间大小、数据存放目录、设置每个连接允许的最大通道数、心跳超时、日志文件大小等等。放上官方最全配置:https://github.com/rabbitmq/rabbitmq-server/blob/v3.7.x/docs/rabbitmq.conf.example

RabbitMQ 环境配置文件,文件名:rabbitmq-env.conf,文件存放目录:/data/rabbitmq_server-3.7.17/etc/rabbitmq/  注意参数:LOG_BASE,还有 MNESIA_BASE(此目录是Rabbit数据库目录,必须保证有足够的空间)

3. 配置修改完成后,重启每个节点,登录控制台查看配置是否生效,如下图:

请不要看上面安装文档中的参数,那些只是“普通通用安装”,真正的调优是以此篇中的参数为准,以下标红部分为特别重要,特别需要仔细。

listeners.tcp.default

用于监听 AMQP连接的端口列表(无SSL). 可以包含整数 (即"监听所有接口")或者元组如 {"127.0.0.1", 5672} 用于监听一个或多个接口.

Default: [5672]

5672num_acceptors.tcp

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

Default: 10

这个值直接影响到了另一个值即:connection_max,这个值是在客户端设的,公式如下:最大连接数=connection_max +num_acceptors -1

20handshake_timeout

AMQP 0-8/0-9/0-9-1 handshake (在 socket连接和SSL 握手之后)的最大时间, 毫秒为单位.

Default: 10000,这边10秒是足够了,不能再长了,再长这个不是网络了,是电话拨号网。

10000vm_memory_high_watermark.relative

流程控制触发的内存阀值,这个值必须设,设置法则如下:

<=16gb内存的机器,设成04即MQ最多会使用到16gb*0.4=6.4GB时,阻塞所有的请求

>=32gb内存的机器,设成0.6

0.4/0.6vm_memory_high_watermark_paging_ratio

高水位限制的分数,当达到阀值时,队列中消息消息会转移到磁盘上以释放内存。

设置机制同vm_memory_high_watermark,只不过它的阀值从0.5起板~0.6.

0.5~0.6disk_free_limit.absoluteabbitMQ存储数据分区的可用磁盘空间限制.当可用空间值低于阀值时,流程控制将被触发.此值可根据RAM的总大小来相对设置 (如.{mem_relative, 1.0}).此值也可以设为整数(单位为bytes)或者使用数字单位(如."50MB").默认情况下.因此,很多外面都设1GB,这个显然是不够的,因为经如果当RABBITMQ的消息dump可用磁盘还剩1GB时,此时留给你的处理时间已经很短了,一般至少设成10GB。10GBframe_max与客户端协商的允许最大frame大小. 设置为0表示无限制,但在某些QPid客户端会引发bug. 设置较大的值可以提高吞吐量;设置一个较小的值可能会提高延迟.咬合客户端的值initial_frame_max咬合客户端的值咬合客户端的值channel_max

与客户端协商的允许最大chanel大小. 设置为0表示无限制.该数值越大,则broker使用的内存就越高.

Default: 0

咬合客户端的值heartbeat

表示心跳延迟(单位为秒) ,服务器将在connection.tune frame中发送.如果设置为 0, 心跳将被禁用. 客户端可以不用遵循服务器的建议, 查看 AMQP reference 来了解详情. 禁用心跳可以在有大量连接的场景中提高性能,但可能会造成关闭了非活动连接的网络设备上的连接落下.

Default: 60 (3.5.5之前的版本是580)

60default_vhost

当RabbitMQ从头开始创建数据库时创建的虚拟主机. amq.rabbitmq.log交换器会存在于这个虚拟主机中.

Default: <<"/">>

/hipe_compile

将此选项设置为true,将会使用HiPE预编译部分RabbitMQ,Erlang的即时编译器.
这可以增加服务器吞吐量,但会增加服务器的启动时间.
你可以看到花费几分钟延迟启动的成本,就可以带来20-50% 更好性能.这些数字与高度依赖于工作负载和硬件.

HiPE 支持可能没有编译进你的Erlang安装中.如果没有的话,启用这个选项,并启动RabbitMQ时,会看到警告消息. 例如, Debian / Ubuntu 用户需要安装erlang-base-hipe 包.

HiPE并非在所有平台上都可用,尤其是Windows.

在 Erlang/OTP 17.5版本之前,HiPE有明显的问题 . 对于HiPE,使用最新的OTP版本是高度推荐的.

Default: false

true

样例-rabbitmq.conf


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK