基於LVS 實現負載均衡

       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模式:

clipboard.png

 

  • ①當用戶請求到達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,達到負載均衡的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章