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形成影響。服務器

相關文章
相關標籤/搜索