LVS(Linux Virtual Server)即Linux虛擬服務器,是一個虛擬的服務器集羣系統。
常用的負載均衡分別有七層負載均衡、四層負載均衡:所謂四層就是基於IP+端口的負載均衡,主要代表有lvs;七層負載也稱內容交換,就是基於URL等應用層信息的負載均衡,主要代表有nginx。
而對於網絡中數據包的傳輸,是根據網絡七層層層封裝數據包進行傳輸,解析數據包的時候也是層層進行拆包。如果在第四層網絡層拆包後,根據IP、端口直接將數據包進行轉發至目標主機,不進一步拆包的話,對於系統的消耗無疑中降低了很多,提交系統交互性能,增大併發量。
LVS的優勢:
1)高併發能力強 LVS基於內核網絡層工作,有着超強的併發處理能力,可以承受更多的併發連接。
2)穩定性高 LVS是基於4層的負載均衡軟件,因此LVS在所有負載均衡軟件中性能最強,穩定性最高,消耗CPU和內存少。
3)應用範圍廣 LVS是工作在4層,所以它可以對應用層的所有協議作負載均衡,包括http、DNS、ftp等。
LVS的工作原理:
當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間
PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈
IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集羣服務進行比對,如果用戶請求的就是定義的集羣服務,那麼此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈
POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麼此時通過選路,將數據包最終發送給後端的服務器
LVS的相關術語:
- DS:Director Server。指的是前端負載均衡器節點。
- RS:Real Server。後端真實的工作服務器。
- VIP:向外部直接面向用戶請求,作爲用戶請求的目標的IP地址。
- DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
- RIP:Real Server IP,後端服務器的IP地址。
- CIP:Client IP,訪問客戶端的IP地址。
LVS主要模式:
LVS主要有三種模式,分別爲NAT模式、TUN模式、DR模式。這裏主要講述DR模式,其它兩種模式感興趣的夥伴請自行搜索下。
LVS DR模式:
- ①當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
- ②PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
- ③ IPVS比對數據包請求的服務是否爲集羣服務,若是,將請求報文中的源MAC地址修改爲DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
- ④ 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
- ⑤ RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
- ⑥ 響應報文最終送達至客戶端
DR模式具體設置命令:
選一臺主機作爲DS,這裏以10.194.67.10爲例。RS設置爲兩臺主機: 10.194.67.20、 10.194.67.30
在DS創建腳本configds.sh,具體內容如下:
#!/bin/bash
#chkconfig: 2345 10 90
#description: service lvs
#FUNC: 配置director server
#迴環lo的虛擬IP
VIP="10.194.67.10"
#掩碼
NM="255.255.255.0"
#端口
PORT="30001"
#RS
RS1="10.194.67.20"
RS2="10.194.67.30"
case $1 in
start)
/usr/sbin/ifconfig eth0:0 $VIP netmask $NM up
/usr/sbin/route add -host $VIP dev eth0:0
/usr/sbin/ipvsadm -A -t $VIP:$PORT -s rr
/usr/sbin/ipvsadm -a -t $VIP:$PORT -r $RS1:$PORT -g
/usr/sbin/ipvsadm -a -t $VIP:$PORT -r $RS2:$PORT -g
;;
stop)
/usr/sbin/route del -host $VIP
/usr/sbin/ifconfig eth0:0 down
/usr/sbin/ipvsadm -C
;;
*)
echo "Usage: sh $0 {start|stop}"
;;
esac
通過運行腳本 ,DS主機即設置完成。
sh configds.sh start
分別在兩臺RS中創建configrs.sh,執行其將RS的ipv4響應策略修改。
#!/bin/bash
#chkconfig: 2345 10 90
#description: service lvs
#FUNC: 配置real server
#迴環lo的虛擬IP
VIP="10.194.67.10"
#掩碼
NM="255.255.255.255"
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
/usr/sbin/ifconfig lo:0 $VIP netmask $NM broadcast $VIP up
/usr/sbin/route add -host $VIP dev lo:0
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce
/usr/sbin/route del -host $VIP
/usr/sbin/ifconfig lo:0 down
;;
*)
echo "Usage: sh $0 {start|stop}"
;;
esac
sh configrs.sh start
此外,如果腳本無法執行,那麼將腳本設置爲linux可執行腳本,dos2unix configds.sh。
上述腳本都執行成功後,通過訪問10.194.67.10:30001 即可實現訪問到 10.194.67.20:30001、10.194.67.30:30001,達到負載均衡的效果。