LVS負載均衡使用詳解

一、基本概覽介紹

二、LVS的類型及原理

三、LVS調度算法

四、利用DR及NAT實現web負載均衡


一、基本概覽介紹

    LVS是一個工作在傳輸層面上的一個負載均衡軟件,它是由用戶空間的ipvsadm和內核空間的ipvs兩個組件組成。其中ipvsadm是用戶空間的命令行工具,主要是用於管理集羣服務及集羣服務上的RS。ipvs是工作與內核上的netfilter的INPUT鏈上的程序,可以根據用戶事先定義的集羣實現轉發。


二、LVS的類型及原理

LVS的類型可以分爲:NAT、DR、TUN、FULLNAT四中類型


LVS-NAT模型:需要將RS的網關指向LVS的DIP地址

    原理: 通過將請求報文中的目標地址和目標端口修改爲挑選出來的某RS的RIP和PORT,從而實現轉發

    流程:

①客戶端將請求發往前端的負載均衡器,請求報文的源地址是CIP,目標地址是VIP

②負載均衡器收到報文後,正常情況報文是進入用戶空間的,但是發現請求是規則裏面存在的地址,那麼將報文的目標地址改爲後端RS服務器的RIP地址,原CIP不變,然後將報文發走。

③報文送到RS服務器後,由於報文的目標地址是自己,所有會響應客戶端的請求,並將包文返回給調度器,此時原地址爲RIP,目標地址爲CIP

④ 調度器收到報文後,將此報文的源地址改爲VIP,然後將報文返回給客戶端。



LVS-DR模型:

    原理:源和目標的ip及端口都不發送改變,通過將請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP接口的MAC,目標MAC是RS服務器的RIP接口的MAC

    流程:

 ①客戶端將請求報文發往lvs調度器,請求報文源地址是CIP,目標地址爲VIP,源MAC是CMAC,目標MAC是LVS的VIP接口的MAC

②LVS收到報文後,發現請求是定義規則中的,那麼它將客戶端的請求報文的源MAC地址重新封裝爲自己DIP,目標MAC 改爲挑選出來的RS的VIP接口的MAC地址。

③RS收到報文後,發現報文中目的MAC是自己VIP接口的MAC,就會接下報文出來後,將直接回應給客戶端



LSV-TUN模型:

    原理:不修改請求報文中的IP首部(源ip爲CIP,目標IP爲VIP),而是在原IP首部之外再封裝一個IP首部(源ip爲DIP,目標IP爲挑選出來的RS的RIP),然後將報文發往挑選出來的目標RS


LSV-FULLNAT模型:

    原理:通過同時修改請求報文中的源IP地址和目標IP地址進行轉發

               


三、LVS調度算法

根據其調度時是否考慮後端主機的當前負載情況,可以分爲靜態方法和動態方法:

靜態算法:調度器僅僅是根據算法本身來進行調度,而不考慮後的那RS的實際連接和負載情況,注重的是起點公平

        RR:輪詢調度

        WRR:加權輪詢

        SH:源地址哈希,將來自同一IP地址的請求始終發往第一次挑中的Rs中,可以實現會話綁定

        DH:目標地址哈希:將發往同一個目標地址的請求,始終轉發到第一次挑中的Rs



動態算法:

        LC:最少連接

        WLC:加權最少連接

        SED:最短期望延遲

        NQ:永不排隊的連接

        LBLC:基於本地最少連接,動態DH算法

        LBLCR:帶複製功能的LBLC


四、利用DR及NAT實現web負載均衡

基於NAT模型的web負載:

wKiom1ei9szgvfG3AACijp5GnzY629.png


配置Real Server

RS1:

###配置IP地址和網關,網關指向DIP:
[root@pxe132 ~]# route add default gw 192.168.100.100

###配置一個httpd測試網頁:
[root@pxe132 ~]# yum -y install httpd
[root@pxe132 ~]# echo "Rserver 1" >/var/www/html/index.html 
[root@pxe132 ~]# systemctl start httpd.service

RS2

###配置IP地址和網關,網關指向DIP:
[root@pxe132 ~]# route add default gw 192.168.100.100

###配置一個httpd測試網頁:
[root@pxe132 ~]# yum -y install httpd
[root@pxe132 ~]# echo "Rserver 2" >/var/www/html/index.html 
[root@pxe132 ~]# systemctl start httpd.service


配置Director

##配置IP地址省略:
##配置路由轉發功能:
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
###測試下我們環境是否正常:
[root@localhost ~]# curl http://192.168.1.10
Rserver 1
[root@localhost ~]# curl http://192.168.1.20
Rserver 2

添加規則

[root@localhost ~]# ipvsadm -A -t 172.16.100.1:80 -s rr
[root@localhost ~]# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.10:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.20:80 -m -w 1

查看規則信息:

[root@localhost ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.100.1:http rr
  -> 192.168.1.10:http             Masq    1  0  0         
  -> 192.168.1.20:http             Masq    1  0  0



基於LVS-DR模型的web負載

wKiom1ejL6DAI916AACfB5vf0t0495.png配置Director

[root@bogon ~]# ifconfig eno16777736:1 192.168.1.100/32 broadcast 192.168.1.100 up 
[root@bogon ~]# route add -host 192.168.1.100 dev eno16777736:1

[root@bogon ~]# ipvsadm -A -t 192.168.1.100:80 -s rr 
[root@bogon ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.105:80 -g -w 1 
[root@bogon ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.106:80 -g -w 2

配置RealServer1

[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@rs1 ~]# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up 
[root@rs1 ~]# route add -host 192.168.1.100 dev lo:0

配置RealServer2

[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@rs1 ~]# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up 
[root@rs1 ~]# route add -host 192.168.1.100 dev lo:0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章