本文將介紹一些LVS配置的注意點,以及 性能相關的一些配置;
1. SH調度算法-儘量不要採用
實際線上使用時,如需 會話保持,建議配置persistence_timeout參數,保證一段時間同一源ip的請求到同一RS上;
2. WLC調度算法-注意RSdonw->up的影響
WLC算法下,RS一旦出現down後up的情況,瞬間所有的新建連接都會調度到該RS上,可能會超過該RS處理請求的上限;
3. 關閉網卡LRO/GRO功能
現在大多數網卡都具有LRO/GRO功能,即 網卡收包時將同一流的小包合併成大包(tcpdump抓包可以看到>MTU 1500bytes的數據包)交給內核協議棧;LVS內核模塊在處理>MTU的數據包時,會丟棄;
因此,如果我們用LVS來傳輸大文件,很容易出現丟包,傳輸速度慢;
解決方法,關閉LRO/GRO功能,命令:
ethtool -k eth0 查看LRO/GRO當前是否打開
ethtool -Keth0 lro off 關閉GRO
ethtool -Keth0 gro off 關閉GRO
4. 手動綁定網卡中斷
當前大多數網卡都是支持硬件多隊列的,爲了充分發揮多核的性能,需要手動將網卡中斷(流量)分配到所有CPU核上去處理;
查看網卡中斷:
cat /proc/interrupts
54: 188324418 0 IR-PCI-MSI-edge eth0-TxRx-0
55: 167573416 0 IR-PCI-MSI-edge eth0-TxRx-1
綁定網卡中斷到CPU核:
echo 01> /proc/irq/54/smp_affinity
echo 02> /proc/irq/55/smp_affinity
關閉系統自動中斷平衡:
service irqbalance stop
如果網卡硬件不支持多隊列,那就採用google提供的軟多隊列RPS;
配置方法同硬中斷綁定;
查看軟隊列:
cat /sys/class/net/eth0/queues/rx-0/rps_cpus
cat /sys/class/net/eth0/queues/rx-1/rps_cpus
綁定軟隊列到CPU核:
echo 01 >/sys/class/net/eth0/queues/rx-0/rps_cpus
echo 02 >/sys/class/net/eth0/queues/rx-1/rps_cpus
5.修改LVS內核配置,提高性能
LVS內核默認配置連接hash表大小爲4K,16把hash桶鎖;如果應用的併發連接數>4w,則上述配置會無法滿足性能需求;
調大連接hash表:
在內核源碼根目錄下,修改文件 vim .config - CONFIG_IP_VS_TAB_BITS=20;
增大hash桶鎖個數:
ipvs源碼目錄下,修改文件vim ip_vs_conn.c - #defineCT_LOCKARRAY_BITS 8;
6. BIOS中關閉超線程
關閉超線程 也是基於性能考慮;