日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LVS性能调优小记

發布時間:2025/3/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LVS性能调优小记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lvs調優主要是針對內核參數的調優

一、調整內核參數

CONFIG_IP_VS_TAB_BITS

1.1 CONFIG_IP_VS_TAB_BITS說明

IPVS connection hash table size,取值范圍:[12,20]。該表用于記錄每個進來的連接及路由去向的信息。連接的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 之間,詳細的調整方法見后面。每一行都是一個鏈表結構,包含N列(即N條連接記錄),這個N是無限的,N的數量決定了決定了查找的速度。在LVS的實現說明中,有這樣的一段話,可以幫助很好的理解行和列的關系:

為了評價Hash函數的效率,我們從一個運行IPVS的真實站點上取當前連接的樣本,它一共含有35652個并發連接。在有64K桶的Hash表中,連接分布如下:

桶的長度(Lj)該長度桶的個數(Nj)

5 16

4 126

3 980

2 5614

1 20900

所有連接查找一次的代價為45122,每個連接查找的平均代價為1.266(即45122/35652)。


LVS的調優建議將hash table的值設置為不低于并發連接數。例如,并發連接數為200,Persistent時間為200S,那么hash桶的個數應設置為盡可能接近200x200=40000,2的15次方為32768就可以了。當ip_vs_conn_tab_bits=20 時,哈希表的的大小(條目)為 pow(2,20),即 1048576,對于64位系統,IPVS占用大概16M內存,可以通過demsg看到:IPVS: Connection hash table configured (size=1048576, memory=16384Kbytes)。對于現在的服務器來說,這樣的內存占用不是問題。所以直接設置為20即可。

關于最大“連接數限制”:這里的hash桶的個數,并不是LVS最大連接數限制。LVS使用哈希鏈表解決“哈希沖突”,當連接數大于這個值時,必然會出現哈稀沖突,會(稍微)降低性能,但是并不對在功能上對LVS造成影響。


1.2 調整 ip_vs_conn_tab_bits的方法:

新的IPVS代碼,允許調整 ip_vs_conn_bits 的值。而老的IPVS代碼則需要通過重新編譯來調整。

在發行版里,IPVS通常是以模塊的形式編譯的。

確認能否調整使用命令 modinfo -p ip_vs(查看 ip_vs 模塊的參數),看有沒有 conn_tab_bits 參數可用。假如可以用,那么說時可以調整,調整方法是加載時通過設置 conn_tab_bits參數:

在/etc/modprobe.d/目錄下添加文件ip_vs.conf,內容為:

options ip_vs conn_tab_bits=20

查看

ipvsadm -l

如果顯示IP Virtual Server version 1.2.1 (size=4096),則前面加的參數沒有生效

modprobe -r ip_vs

modprobe ip_vs

重新查看

IP Virtual Server version 1.2.1 (size=1048576)

假如沒有 conn_tab_bits 參數可用,則需要重新調整編譯選項,重新編譯。

Centos6.2,內核版本2.6.32-220.13.1.el6.x86_64,仍然不支持這個參數,只能自定義編譯了。

另外,假如IPVS支持調整 ip_vs_conn_tab_bits,而又將IPVS集成進了內核,那么只能通過重啟,向內核傳遞參數來調整了。在引導程序的 kernel 相關的配置行上,添加:ip_vs.conn_tab_bits=20 ,然后,重啟。

或者重新編譯內核。


二、系統參數優化

2.1 關閉網卡LRO和GRO

現在大多數網卡都具有LRO/GRO功能,即 網卡收包時將同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的數據包)交給 內核協議棧;LVS內核模塊在處理>MTU的數據包時,會丟棄;

因此,如果我們用LVS來傳輸大文件,很容易出現丟包,傳輸速度慢;

解決方法,關閉LRO/GRO功能,命令:

ethtool -k eth0 查看LRO/GRO當前是否打開

ethtool -K eth0 lro off 關閉GRO

ethtool -K eth0 gro off 關閉GRO

2.2 禁用ARP,增大backlog并發數

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.core.netdev_max_backlog = 500000



三、lvs自身配置調優

3.1 盡量避免sh算法

一些業務為了支持會話保持,選擇SH調度算法,以實現 同一源ip的請求調度到同一臺RS上;但 SH算法本省沒有實現一致性hash,一旦一臺RS down,當前所有連接都會斷掉;如果配置了inhibit_on_failure,那就更悲劇了,調度到該RS上的流量會一直損失;

實際線上使用時,如需 會話保持,建議配置 persistence_timeout參數,保證一段時間同一源ip的請求到同一RS上。

3.2 增大hash桶鎖個數

對于一個16核的服務器來說,可以將桶鎖個數調整為8.

ipvs源碼目錄下,修改文件vim ip_vs_conn.c - #define CT_LOCKARRAY_BITS 8;


參考:

http://blog.csdn.net/yanziguishi/article/details/7284793

http://blog.sina.com.cn/s/blog_781b0c850101ogne.html


轉載于:https://blog.51cto.com/shanks/1319980

總結

以上是生活随笔為你收集整理的LVS性能调优小记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。