`

LVS

 
阅读更多
http://yp.oss.org.cn/software/show_software.php?sw_id=436

我才知道的淘宝内核对LVS的性能优化
http://www.lvtao.net/server/taobao-linux-kernel.html
简单公布一下测试结果:在一台普通的4核服务器上,使用LVS的DR模式,后端7台RealServer。在CentOS原生内核上,每秒最高转发约6万个HTTP请求,而使用淘宝内核后可高达约14万次请求每秒(瓶颈在测试机,无法模拟更大压力)。而在这台服务器上直接测试Nginx状态页,最高每秒处理约4万次请求。
    当下,我们非常迫切需要解决的就是LVS的性能问题。在得到验证的同时,更希望把问题弄清楚。淘宝内核到底对LVS做了什么,让它的性能得到如此提升?
    在淘宝内核目录下,在各种Patch“patches.driver”、“patches.taobao”、等,数量多到让人望而生畏……
    好吧,我还是想把问题弄清楚!
    所有Patch中,与LVS相关的只有 patches.taobao/ip_vs_conn_locking_granularity.patch 文件。内容也很简单,仅将 CT_LOCKARRAY_BITS 由4改为8。而且是文嵩大神亲自打上的:

    这个大小从上下文来看,似乎是一个并发锁的数量。 并发锁多了, 可以同时进行的转发连接就多了, CPU不用等待任务完成。批注中注明了是针对16核做的调整,虽然我的测试里才有4核 ^_^||
    幸亏淘宝内核可以自由的选择开启或关闭指定的Patch(执行打包之前修改series.conf注释掉不想要的Patch),于是我关闭了LVS的Patch。再测试,又一次喜剧发生了:即使不打ip_vs_conn_locking_granularity.patch,淘宝内核的LVS转发功能依然很强劲!
    然后,我关闭了淘宝所有Patch。喜剧仍然存在:凡是自行定制的内核,LVS性能很平庸;凡是使用淘宝内核,无论怎样调整Patch,性能都会很强劲。那一刻,我的心你懂的……
   咨询了一下佳明和炳天, 我感觉我找到原因了:淘宝对内核的配置也进行了大量的优化。针对LVS的优化就是将CONFIG_IP_VS_TAB_BITS由12调整到 20“sed -i 's/CONFIG_IP_VS_TAB_BITS=12/CONFIG_IP_VS_TAB_BITS=20 /g' SOURCES/config-generic”:
yum -y install kernel-devel rpm-build redhat-rpm-config asciidoc hmaccalc binutils-devel elfutils-libelf-devel newt-devel zlib-devel xmlto python-devel perl-ExtUtils-Embed fedora-packager @development-tools
rpmdev-setuptree
rpm -ivh kernel-2.6.32-279.19.1.el6.src.rpm   
cd ~/rpmbuild/
cp patches.taobao/ip_vs_conn_locking_granularity.patch SOURCES/  
sed -i 's/CONFIG_IP_VS_TAB_BITS=12/CONFIG_IP_VS_TAB_BITS=20/g' SOURCES/config-generic
rpmbuild -bb --with baseonly --with firmware --without debuginfo SPECS/kernel.spec  
# waiting for lock on `./random_seed'...  
rngd -r /dev/urandom
    OK,果然很强大,应用到生产环境后效果也很满意。真心感谢淘宝、感谢开源!于是我也对此打了一个Patch,并上传了编译结果:kernel-firmware,kernel。
    怎样验证我们的优化是否生效呢,查看`ipvsadm -Ln`的size即可:

    当然,淘宝对LVS的优化不仅文章介绍的2处了。还有针对网卡和系统参数的调整比如:
# 关闭网卡LRO和GRO  
ethtool -K em1 gro off  
ethtool -K em1 lro off  
# 禁用ARP,增大backlog并发数  
net.ipv4.conf.all.arp_ignore = 1  
net.ipv4.conf.all.arp_announce = 2   
net.core.netdev_max_backlog = 500000  
# 调整内核的时钟机制  
kernel nohz=off  
# 手动调整网卡中断分布,等……





关于Linux网卡调优之:RPS (Receive Packet Steering)
http://www.lvtao.net/server/492.html

昨天在查LVS调度均衡性问题时,最终确定是 persistence_timeout 参数会使用IP哈希。目的是为了保证长连接,即一定时间内访问到的是同一台机器。而我们内部系统,由于出口IP相对单一,所以总会被哈希到相同的RealServer。
    过去使用LVS,遇到过单核CPU被软中断耗尽的问题,然后知道了网卡驱动与多队列。而后知道了淘宝对LVS的优化,然后对生产环境进行了优化,效果显著。
    如今单台LVS带宽吃到近500Mb/s,每秒进出包都过40万。此时发现网卡(4队列)对应CPU的软中断消耗已过40%了,倍感压力。按理,空闲CPU如果少于40%,则要新增节点了。关于中断不均衡的问题,听取了淘宝普空的意见,效果也非常明显,全均衡了:

   原来CentOS 6.1就开始支持RPS了,原生支持需要使用Linux内核2.6.38或以上版本。
   简单来讲,RPS就是让网卡使用多核CPU的。传统方法就是网卡多队列(RSS,需要硬件和驱动支持),RPS则是在系统层实现了分发和均衡。献上修改设置的脚本一例:
#!/bin/bash 
# Enable RPS (Receive Packet Steering) 
     
rfc=4096 
cc=$(grep -c processor /proc/cpuinfo) 
rsfe=$(echo $cc*$rfc | bc) 
sysctl -w net.core.rps_sock_flow_entries=$rsfe 
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus) 
do
    echo fff > $fileRps 
done
     
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt) 
do
    echo $rfc > $fileRfc 
done
     
tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

估计是大神吕滔博客:http://www.lvtao.net/server/492.html
分享到:
评论

相关推荐

    lvs实现负载均衡

    ### LVS 实现负载均衡详解 #### 一、LVS简介与重要性 LVS (Linux Virtual Server) 是一种在 Linux 平台上实现负载均衡的技术。它可以有效地将大量的网络请求分发到多个后端服务器上处理,从而提高系统的整体响应...

    cadence 615中跑lvs流程

    ### cadence 615中跑LVS流程详解 #### LVS概述 LVS(Layout Versus Schematic)是集成电路设计中的一个重要环节,主要用于验证电路布局(Layout)与原理图(Schematic)的一致性。在反向整理电路时,LVS能够帮助...

    linux lvs 的DR 模式

    ### Linux LVS的DR模式详解 #### 一、概述 Linux Virtual Server (LVS) 是一个基于 Linux 内核的高性能负载均衡解决方案,它能够通过调度算法将客户端请求分发到多个后端服务器(Real Server),从而实现负载均衡...

    LVS的安装与配置 LVS入门与详解

    LVS安装与配置入门与详解 LVS(Linux Virtual Server)是一种开源的负载均衡器,可以将多个服务器组成一个虚拟服务器,提供高可用性和高性能的服务。LVS的安装与配置是一个复杂的过程,本文将详细介绍LVS的安装与...

    LVS笔记.docx

    ### LVS集群环境搭建详解 #### 一、LVS简介及应用场景 **LVS**(Linux Virtual Server)是一种基于Linux内核的虚拟服务器集群系统,它能够实现高效的负载均衡和服务高可用性。对于需要处理大量并发连接和高流量的...

    LINUX+LVS,LVS原理

    ### LVS原理与Linux+LVS+Keepalived负载均衡详解 #### LVS概念与原理 LVS(Linux Virtual Server)是一种开源的负载均衡技术,主要用于处理大规模的网络请求,通过构建一个虚拟服务器集群,将任务分发到多个后端的...

    lvs+KeepAlived搭建实战.pdf

    Lvs抗负载能力强,因为 lvs 工作方式的逻辑是非常之简单,而且工作在网络 4 层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。 有完整的双机热备方案,当节点出现故障时,lvs 会自动判别,所以系统...

    Keepalived+LVS+Nginx

    ### Keepalived+LVS+Nginx 架构深度解析 #### 一、体系架构概述 在现代互联网架构中,为了提升系统的可用性和扩展性,采用Keepalived、LVS和Nginx组合构建的高可用性负载均衡体系是常见且高效的做法。此架构主要由...

    LVS的应用实例LVS的应用实例LVS的应用实例

    ### LVS+Heartbeat实施案例解析 #### 一、背景介绍与需求分析 在现代互联网环境中,随着业务规模的不断增长和技术的快速发展,单一服务器往往难以应对大量的用户访问请求,容易造成服务中断或响应时间过长等问题。...

    Calibre经典教程和看LVS的错误报告的方法

    Calibre经典教程和看LVS的错误报告的方法 Calibre经典教程和看LVS的错误报告的方法是指在使用Calibre进行集成电路设计和验证时,如何正确地解析和处理LVS(Layout Versus Schematic)错误报告。LVS错误报告是...

    lvs负载均衡源码

    LVS(Linux Virtual Server)是基于Linux操作系统的高性能负载均衡解决方案,由章文嵩博士在1998年创建。它的设计目标是提供一个高可用、高性能的服务器集群系统,使得用户可以透明地访问服务器群集,而无需关心背后...

    LVS和keepalived详细

    LVS和keepalived详细 LVS(Linux Virtual Server)是一种开源的IP负载均衡解决方案,能够将来自Internet的访问请求分配到多个后端服务器上,以提高整个系统的可用性和性能。_keepalived_是LVS的配套软件,用于监控...

    lvs相关资料包

    **LVS(Linux Virtual Server)相关资料包** LVS,全称为Linux Virtual Server,是基于Linux操作系统的高性能、高可用的网络服务器群集技术。它通过将多台物理服务器虚拟化为一个整体,实现了网络层的负载均衡,...

    lvs+keepalived+vsftp配置FTP服务器负载均衡

    在构建大型、高可用性的FTP(File Transfer Protocol)服务时,使用LVS(Linux Virtual Server)、Keepalived和VSFTPd的组合是一个常见的解决方案。LVS提供负载均衡,Keepalived确保服务高可用,而VSFTPd是常用的FTP...

    LVS安装配置说明.pdf

    LVS

    8.1: 集群及LVS简介 、 LVS-NAT集群 、 LVS-DR集群 、 总结与答疑.docx

    集群及LVS简介、LVS-NAT集群、LVS-DR集群 本文档主要讲解了Linux虚拟服务器(LVS)的基本概念和实现方法,涵盖了LVS的集群模式、LVS-NAT集群、LVS-DR集群等内容。同时,文档还提供了一些实际的案例,包括使用...

Global site tag (gtag.js) - Google Analytics