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

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造成影响。

你可能感兴趣的:(哈希,LVS,软中断)