• 欢迎访问V小白网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入V小白 暂无QQ群
  • 欢迎访问V小白网站,这是第二个滚动条

LVS、Nginx压测与性能调优

其他分类 admin 2019年6月28日 10:36 550 0 个评论

    CPU、内存、网卡。

2. 系统方面

Linux系统默认有许多限制,对于在业务流量较大的情况下发挥负载均衡器的性能有很大影响。常见的如: 服务端可接受的最大连接数、可接受的最大半连接数、本地可用端口范围、time-wait连接数、可打开的最大文件句柄数、网卡等待队列大小等。

4. 网络方面

负载均衡器和真实服务器都是通过网络进行通信,如果条件允许,最好将它们置于同机房、同网段下,减小网络时延带来的影响。

二、性能调优介绍

多队列网卡在系统中有多个中断号,通过CPU核绑定,将各个中断号对应的网卡队列绑定到指定的CPU核处理,这样可以发挥多核CPU的优势,将中断请求分摊到多个cpu核上,提升cpu处理性能。

配置方法:

a. 检查系统是否已开启irqbanlance服务,如果有,则关闭该服务,手动进行cpu核绑定。

# ps -ef | grep irqbalance

b. 检查网卡是否支持多队列

#lspci -vvv | grep -A 30 "Ethernet controller"

检查是否存在 MSI-X: Enable+ Count >0,如果存在,说明网卡支持多队列。     # cat /proc/interrupts | grep em3     # echo 1 > /proc/irq/187/smp_affinity

# echo 4 > /proc/irq/189/smp_affinity

# echo 10 > /proc/irq/191/smp_affinity

# echo 40 > /proc/irq/193/smp_affinity

PS: 这里传入的值为16进制。转换为2进制后对应绑定的cpu核。

16进制80转换为2进制为1000 0000,表示将中断号194绑定到cpu7核上面。

1.2 关注系统链接跟踪表大小

系统链接跟踪表记录了经过系统转发的连接信息,通过加载nf_conntrack模块启用, 对于iptables、SNAT/DNAT等功能是必须启用链接跟踪表的。

但是如果链接跟踪表的值设置的太小,容易造成链接跟踪表满导致丢包的问题。所以需要关注系统的链接跟踪表最大值和当前值的大小,当二者相等时,说明表满,系统会drop新的连接请求。

# sysctl -a | grep nf_conntrack_max    (查询系统链接跟踪表最大值)

# sysctl -a | grep nf_conntrack_count  (查询系统链接跟踪表当前值)

如下图中的链接跟踪表最大值为65536就太小了,很容易造成丢包。     现在大多数网卡都具有LRO/GRO功能,即 网卡收包时将同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的数据包)交给 内核协议栈;LVS内核模块在处理>MTU的数据包时,会丢弃;

解决方法,关闭LRO/GRO功能,命令:(注意查看命令是小k,修改命令是大K)

ethtool -K eth0 lro off 关闭GRO

1.4 增大网卡的ring buffer值。

# ethtool -G em4 rx 4096     # sysctl -w net.core.netdev_max_backlog=262144

1.6 增大服务端全连接队列大小

# sysctl -w net.core.somaxconn=262144

# sysctl -w net.ipv4.tcp_max_syn_backlog=262144

1.8 增大系统可用的本地端口范围

tcp_max_tw_buckets表示系统允许存在的time_wait状态连接数。Time wait状态是tcp断连中一个正常的状态,它存在的作用主要包括:确保tcp连接可靠的断开和旧连接的报文在网络中彻底消失。如果这个值过小,则客户端不会进入time_wait状态,而是直接从FIN_WAIT状态结束。这时候服务端最后一次挥手的FIN消息会以收到RST结束,可能会导致服务端断连异常。

1.10 启用time_wait状态连接复用

增大tcp_max_tw_buckets值有一个负面影响,就是系统time_wait状态连接过多,将可用端口耗尽,导致没有足够的可用端口新建连接。这时候可以启用time_wait状态连接复用。注意需要同时启用时间戳tcp_timestamps。(注意开启tcp_timestamps后要确认关闭tcp_tw_recycle)

# sysctl -w net.ipv4.tcp_tw_reuse=1

# sysctl -a | grep fs.file-max

1.12 增大系统进程最大文件句柄数

# ulimit -n

注意这只是在当前shell下生效的,系统重启后会丢失,需要同时修改/etc/security/limits.conf中的nofile值。其中,* 这行的配置表示对非root用户生效。

*  hard nofile 1024000

root hard nofile 1024000

可以用ipvsadm -l命令查询当前hash table的大小。

在/etc/modprobe.d/目录下添加文件ip_vs.conf,内容为:

重新加载ipvs模块。     worker_processes auto;

这里比较方便的是配置为auto,但是根据实际的系统情况指定worker进程数和手动绑定cpu核可能性能会更高一些,比如避开中断irq处理的cpu核,将worker进程绑定到其它空闲的cpu核上。

3.2 使用epoll模型

tcp_nodelay on;

3.4 增大单个worker进程的文件句柄数限制

worker_rlimit_nofile 1024000;

这里的最大并发连接包括前后端的连接,且该参数值不能大于worker_rlimit_nofile。

4. 硬件与网络配置调优

4.1 对物理网卡做多网卡绑定

负载均衡器和真实服务器靠网络传输数据,如果条件允许,将它们放在一个局域网内,避免数据传输走路由器传输。

1. 分析cpu性能

sar -u 1:每隔1秒打印出当前cpu的整体使用情况。

ps:sar和mastat需要安装sysstat工具包。

3. 查看网卡配置

# ethtool xxx

# cat /proc/net/bonding/xxx     #git clone https://github.com/wg/wrk

# ln -s xxx/wrk /usr/sbin/wrk

2. 使用方法

Options:                                           

-d, --duration      压测时间         

-s, --script        指定Lua脚本路径     

--latency          在压测结束后,打印延迟统计信息 

-v, --version          打印正在使用的wrk的详细版本信息

代表时间参数,支持时间单位 (2s, 2m, 2h)

使用10个线程、1000个长连接对指定URL压测60s,并打印时延信息。

Requests/sec: 149863.60  # 每秒的请求数,即QPS

指定头域实现http短连接测试。

4. 注意压测客户端也会遇到性能问题,也需要对其进行性能调优。


V小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:LVS、Nginx压测与性能调优
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到
0个小伙伴在吐槽