昨天在查LVS調(diào)度均衡性問題時,最終確定是?persistence_timeout?參數(shù)會使用IP哈希。目的是為了保證長連接,即一定時間內(nèi)訪問到的是同一臺機(jī)器。而我們內(nèi)部系統(tǒng),由于出口IP相對單一,所以總會被哈希到相同的RealServer。
????過去使用LVS,遇到過單核CPU被軟中斷耗盡的問題,然后知道了網(wǎng)卡驅(qū)動與多隊列。而后知道了淘寶對LVS的優(yōu)化,然后對生產(chǎn)環(huán)境進(jìn)行了優(yōu)化,效果顯著。
????如今單臺LVS帶寬吃到近500Mb/s,每秒進(jìn)出包都過40萬。此時發(fā)現(xiàn)網(wǎng)卡(4隊列)對應(yīng)CPU的軟中斷消耗已過40%了,倍感壓力。按理,空閑CPU如果少于40%,則要新增節(jié)點(diǎn)了。關(guān)于中斷不均衡的問題,聽取了淘寶普空的意見,效果也非常明顯,全均衡了:
原來CentOS6.1就開始支持RPS了,原生支持需要使用Linux內(nèi)核2.6.38或以上版本。
???簡單來講,RPS就是讓網(wǎng)卡使用多核CPU的。傳統(tǒng)方法就是網(wǎng)卡多隊列(RSS,需要硬件和驅(qū)動支持),RPS則是在系統(tǒng)層實現(xiàn)了分發(fā)和均衡。獻(xiàn)上修改設(shè)置的腳本一例:
#!/bin/bash?
# Enable RPS (Receive Packet Steering)?
rfc=4096?
cc=$(grep -c processor /proc/cpuinfo)?
rsfe=$(echo $cc*$rfc | bc)?
sysctl -w net.core.rps_sock_flow_entries=$rsfe?
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)?
do
? ? echo fff > $fileRps?
done
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)?
do
? ? echo $rfc > $fileRfc?
done
tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}
版權(quán)屬于: 呂滔博客
原文地址: https://www.lvtao.net/server/492.html