您的位置:首页 > 其它

lvs增加并发连接,解决因为哈希表过小导致软中断过高问题

2015-08-13 15:24 966 查看
LVS,一个N久前就在使用的东西,目前来说配置什么的也没什么问题。只是个人觉得随着业务的上涨和流量的增加,它的连接数必然也会增长,所以在配置的时候就想直接把它改大。
在安装好后(Centos6.5的系统,yum安装ipvs),默认情况下是4096(2的12次方)
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
配置好后是1048576
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=1048576)

在这里我们要做的是在/etc/modprobe.d/目录下加个ip_vs.conf文件,其内容为options ip_vs conn_tab_bits=20即可,然后重启服务器就可以生效了。配置起来还是比较简单的。

配置完后占用内存情况为,约16M左右。对于现在的服务器来说,小意思。
dmesg |grep IPVS
IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
IPVS: Connection hash table configured (size=1048576, memory=16384Kbytes)
IPVS: ipvs loaded.
IPVS: [rr] scheduler registered.

关于这方面我大概找了下。
IPVS connection hash table size,该表用于记录每个进来的连接及路由去向的信息(这个和iptables跟踪表类似)。连接的Hash表要容纳几百万个并发连接,任何一个报文到达都需要查找连接Hash表。Hash表的查找复杂度为O(n/m),其中n为Hash表中对象的个数,m为Hash表的桶个数。当对象在Hash表中均匀分布和Hash表的桶个数与对象个数一样多时,Hash表的查找复杂度可以接近O(1)。
连接跟踪表中,每行称为一个hash bucket(hash桶),桶的个数是一个固定的值CONFIG_IP_VS_TAB_BITS,默认为12(2的12次方,4096)。这个值可以调整,该值的大小应该在 8 到 20 之间,详细的调整方法见上面。

LVS的调优建议将hash table的值设置为不低于并发连接数。例如,并发连接数为200,Persistent时间为200S,那么hash桶的个数应设置为尽可能接近200x200=40000,2的15次方为32768就可以了。当ip_vs_conn_tab_bits=20 时,哈希表的的大小(条目)为 pow(2,20),即 1048576。
这里的hash桶的个数,并不是LVS最大连接数限制。LVS使用哈希链表解决“哈希冲突”,当连接数大于这个值时,必然会出现哈稀冲突,会(稍微)降低性能,但是并不对在功能上对LVS造成影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: