LVS詳解

LVS概述html

一、LVS(Linux Virtual Server)Linux虛擬服務器:是一個虛擬的服務器集羣系統。本項目在1998年5月有章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。經過LVS提供的負載均衡技術和Linux操做系統可實現一個高性能、高可用的服務器集羣,從而以低成本實現最優的服務性能。前端

二、集羣簡介:集羣(Cluster)是一組相互獨立的、經過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互做用時,集羣像是一個獨立的服務器。集羣配置是用於提升可用性和可縮放性。集羣系統的主要優勢:高可擴展性、高可用性、高性能、高性價比。node

三、集羣類型算法

    LB:Load Balancing 高可拓展,伸縮集羣後端

    HA :High Availability 高可用集羣bash

    HP:High Performance 高性能集羣服務器

LVS詳解
網絡

1、LVS組成:LVS其實由兩個組件組成,在用戶空間的ipvsadm和內核空間的ipvs,ipvs工做於INPUT鏈上,若是有請求報文被ipvs事先定義,就會將請求報文直接截取下根據其特定的模型修改請求報文,再轉發到POSTROUTING鏈上送出TCP/IP協議棧。session

wKioL1egQXnwMOIaAAGE09659_8970.png

2、LVS的實現模型:LVS在不一樣場景中提供了4種實現模型:分別是NAT,DR,TUN,FULLNAT併發

一、NAT工做模式

實現原理:NAT模型其實就是一個多路的DNAT,客戶端對VIP進行請求,Director經過事先指定好的調度算法計算出應該轉發到那臺RS上,並修改請求報文的目標地址爲RIP,經過DIP送往RS。當RS響應客戶端報文給CIP,在通過Director時,Director又會修改源地址爲VIP並將響應報文發送給客戶端,這段過程對於用戶來講是透明的。

NAT特性:

1)RS和Director必需要在同一個IP網段中。

2)RS的網關必須指向DIP

3)能夠實現端口映射

4)請求報文和響應報文都會通過Director

5)RS能夠是任意OS

6)DIP和RIP只能是內網IP

wKioL1eiuDXybGCRAABXr1zmtqQ740.jpg

NAT工做流程:

1)客戶端將請求發送前端的負載均衡器,請求報文源地址是CIP(客戶端IP),目標地址爲VIP(負載均衡器前端地址);

2)負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,作DNAT,把目標IP轉換爲任意後端RS的RIP,而後發送到後端服務器。

3)報文送到Real Server,進行響應,響應報文源IP爲RIP,目標IP仍是CIP,可是網關指向DIP。

4)Dirctor接收到響應報文後,自動進行源地址轉換,把RIP轉換爲VIP,發往互聯網,到達客戶端。

二、DR工做模式

DR模型是一個比較複雜的模型,由於VIP在Director和每個RS上都存在,客戶端對VIP(Director)請求時,Director接收到請求,會將請求報文的源MAC地址和目標MAC地址修改成本機DIP所在網卡的MAC地址和指定的RS的RIP所在網卡的MAC地址,RS接收到請求報文後直接對CIP發出響應報文,而不須要通過Director。

DR特性:

1)RS和Director能夠不在同一IP網段中,可是必定要在同一物理網絡中。(最好同一網段)

2)RS可使用公網地址,此時能夠直接經過互聯網連入,配置監控RS服務器。

3)RS的網關必定不能指向Director。

4)客戶端請求報文必須通過Director,可是響應報文必定不能經過Director。

5)不能實現端口映射。

6)RS能夠是大部分操做系統。

DR模型的問題(客戶請求VIP怎麼到達Director):

1)網絡設備(路由器)中設置VIP地址和Director的MAC地址進行綁定。(前提:路由器的配置權限;缺點:Director故障轉移,沒法更新此綁定;)

2)arptables(前提:在各RS安裝arptables程序,並編寫arptables規則;缺點:依賴於獨特功能的應用程序;)

3)修改Linux內核參數,arp_ignore,arp_announce(前提:RS必須是Linux;缺點:適用性差;)

 兩個參數的取值含義:

    arp_announce:定義通告模式

            0:default,只要主機接入網絡,則自動通告全部網卡MAC地址。

            1:盡力不通告非直接連入網絡的網卡MAC地址。

            2:只通告直接進入網絡的網卡MAC地址。

    arp_ignore:定義收到arp請求時的響應模式                        

            0:只有arp廣播請求,立刻響應,而且響應全部本機網卡的mac地址。

            1:只響應,接受arp廣播請求的網卡接口mac地址。

            2:只響應,接受arp廣播請求的網卡接口mac地址,而且須要請求廣播於接口地址屬於同一網段。

            3:主機範圍(Scope host)內生效的接口,不予響應,只響應全局生效於外網能通訊的網卡接口。

            4-7:保留位

            8:不響應一切arp廣播請求。

wKioL1eiuMWSEYKnAABfKXT-jdg063.jpg

DR工做流程:

DR模型,當RIP,DIP,VIP所有爲公網地址時:

1)客戶端對VIP發送請求。

2)Director接收請求,發現是請求後端的集羣服務,而後對後端集羣RIP發起ARP請求。

3)Director獲得後方RS的MAC地址後,選擇一個把請求經過MAC地址發送給後端服務器。

4)RS接收到請求後,進行響應,使用隱藏的VIP進行封裝報文,但使用RIP所在網卡進行向外發送。

5)RS發出的響應報文因爲是使用VIP隱藏網卡封裝,所以源IP爲VIP,目標IP爲CIP,因此報文直接發往互聯網路由器,到達客戶端。

DR模型,當RIP,DIP,VIP所有爲私有地址時:

1)客戶端對VIP發送請求。

2)Director接收請求,發現是請求後端集羣服務,而後對後端集羣RIP發起ARP請求。

3)Director獲得後方RS的MAC地址後,如今一個把請求經過MAC地址發送給後端服務器。

4)RS接收到請求後,進行響應,使用隱藏的VIP網卡進行封裝報文,但使用RIP所在網卡進行向外發送。

5)RS發出的響應報文因爲是使用VIP隱藏網卡封裝,所以源IP爲VIP,目標IP爲CIP。

6)因爲RS的通訊RIP地址爲私有地址,所以網關須要指向併發往轉發服務器同網段地址網卡。

7)轉發服務器將響應報文發往互聯網,最終到達客戶端。

三、TUN:IP隧道,IP報文中套IP報文

TUN模型經過隧道的方式在公網中實現請求報文的轉發,客戶端請求VIP(Director),Director不修改請求報文的源IP和目標IP,而是在IP首部前附加DIP和對應的RIP地址並轉發到RIP上,RS收到請求報文,RS的本地接口上也有VIP,遂直接響應報文給CIP。

TUN特性

1)RIP,DIP,VIP都必須是公網地址。

2)RS網關不會指向DIP。

3)請求報文必須通過Director,但響應報文必定不通過Director。

4)不支持端口映射。

5)RS的OS(操做系統)必須得支持隧道功能。

wKiom1eiuNOwSGRfAABi8Ue00Oc447.jpg

TUN模型,一般爲異地容災策略:

1)客戶端對VIP發送請求。

2)Director接收請求,發現是請求後端集羣服務,因爲和RS在異地網絡,所以在原請求報文的基礎上,在加上一層,源IP爲DIP,目標IP爲RIP的層。

3)Director將加了包裝的報文發往互聯網,互聯網路由將TUN報文路由發往響應的RS。

4)RS接收到請求後,拆掉外出IP首部,發現裏面還有一層IP首部,而且目標地址爲本身的VIP,所以接收報文並響應。

5)RS經過隱藏VIP包裝響應報文,目標IP仍然是原CIP。

6)RS將響應報文發往互聯網路由器,並最終路由至客戶端。

四、FullNAT:NAT的加強版

FULLNAT是最近幾年纔出現的,客戶端請求VIP(Director),Director修改請求報文的源地址(DIP)和目標地址(RIP)並轉發給RS,FULLNAT模型通常是Director和RS處於複雜的內網環境中的實現。

FULLNAT特性:

1)VIP是公網地址,DIP和RIP是內網地址,可是無需在同一網絡中。

2)請求報文須要通過Director,響應報文也要通過Director。

3)RIP接收到的請求報文的源地址爲DIP,目標地址爲RIP。

4)支持端口映射。

5)RS能夠是任意的OS(操做系統)。

wKioL1ei0aqycTbtAADmPDSGm14147.png

3、LVS的調度算法

靜態方法:僅根據調度算法自己進行調度

rr:round robin,輪流,輪訓,輪叫,輪調
wrr:weighted round robin,增強輪詢
sh:source hashing,session綁定
dh:destination hashing,目標地址hash

動態方法:根據算法及各RS當前的負載情況進行調度

lc:least connection,最少鏈接
wlc:weighted lc,加權最少鏈接
sed:shortest expection delay,最少指望延遲
nq:never queue,永不排隊
lblc:Locality-Based Least Connection,基於局部性的最少鏈接
lblcr:Replicated lblc,基於局部性的帶複製功能的最少鏈接

LVS缺陷:不能檢查後端服務器的健康狀況,老是發送鏈接到後端。

session持久機制:

一、session綁定:始終將同一個請求者的鏈接定向至同一個RS(第一次請求時仍由調度方法選擇);沒有容錯能力,有損負載均衡效果。

二、session複製:在RS之間同步session,所以,每一個RS中都有集羣中全部的session;對於大規模集羣環境不適用。

三、session服務器:利用單獨部署的服務器來同一管理session。

4、LVS使用方法(ipvsadm)

命令格式:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
      ipvsadm -D -t|u|f service-address
      ipvsadm -C
      ipvsadm -R
      ipvsadm -S [-n]
      ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight] [-x upper] [-y lower]
      ipvsadm -d -t|u|f service-address -r server-address
      ipvsadm -L|l [options]
      ipvsadm -Z [-t|u|f service-address]
      ipvsadm --set tcp tcpfin udp
      ipvsadm --start-daemon state [--mcast-interface interface]
              [--syncid syncid]
      ipvsadm --stop-daemon state
      ipvsadm -h
      
命令詳解:
    定義集羣服務:
        -A 添加一個集羣服務
        -D -t|u|f service-address:刪除指定的集羣服務 
        -E 修改一個集羣服務
        -t VIP:端口 定義集羣服務的類型爲TCP的某個端口
        -u VIP:端口 定義集羣服務的類型爲UDP的某個端口
        -f 防火牆標記 定義集羣服務的類型爲防火牆標記
        -s 調度算法 指定集羣服務的調度算法 
        -p timeout:persistent connection,持久鏈接
    定義集羣節點:
        -a 添加一個節點到集羣服務
            -t|-u|-f service-address:指明將RS添加至那個Cluster-service中
            -r:指定RS,可包含{IP[:port]},只有支持端口映射的lvs類型才能使用跟集羣服務中不一樣的端口
        -d 從集羣服務中刪除一個節點
        -e 修改集羣服務器中的節點
        -r 節點IP:端口  定義節點的IP及類型
        -m 定義爲NAT模型
        -g 定義爲DR模型
        -i 定義爲TUN模型
        -w 權重 定義服務器的權重
    查看已經定義的集羣服務及RS:
        ipvsadm -L [options]
                -c:查看各鏈接
                -n:數字格式顯示IP地址
                --stats: 顯示統計數據
                --rate: 速率
                --exact: 顯示統計數據的精確值
                --timeout:超時時間
             -Z:計數器清零;
    從集羣服務中刪除RS:
        ipvsadm -d -t|u|f service-address -r server-address
    刪除集羣服務:
        ipvsadm -D -t|u|f service-address
    清空全部的集羣服務:
        ipvsadm -C 
    保存集羣服務定義:
        ipvsadm -S > /path/to/some_rule_file
        ipvsadm-save > /path/to/some_rule_file
    讓規則文件中的規則生效:
        ipvsadm -R < /path/from/some_rule_file
        ipvsadm-restore < /path/from/some_rule_file

5、LVS各類模型的實現

一、LVS NAT模型的實現

一、集羣環境,一臺Director,兩臺後端Real server RS1,RS2
    Director:兩張網卡
        eth0:192.168.120.100/24     #VIP地址
        eth1:172.16.10.1/16
    RS1:   eth1:172.16.10.11/16
    RS2:   eth1:172.16.10.12/16
    Director的eth1和RS1,RS2的eth1模擬在同一網絡,使用物理機
    Windows7做爲客戶端在192.168.120.0/24網段中
二、爲RS添加網關指向Director
    RS1:
        # ifconfig eth1 172.16.10.11/16 up
        # route add default gw 172.16.10.1
    RS2:
        # ifconfig eth1  172.16.10.12/16 up
        # route add default gw 172.16.10.1
三、修改內核參數,開啓轉發功能
    # echo 1 > /proc/sys/net/ipv4/ip_forward
四、在RS1和RS2上分別建立測試頁,並在Director驗證服務
    [root@node2 ~]# echo node2.bjwf.com > /var/www/html/index.html
    [root@node2 ~]# systemctl start httpd.service
    [root@node3 ~]# echo node3.bjwf.com > /var/www/html/index.html
    [root@node3 ~]# systemctl start httpd.service
    Director上驗證:
    [root@node1 ~]# curl http://172.16.10.11
    node2.bjwf.com
    [root@node1 ~]# curl http://172.16.10.12
    node3.bjwf.com
五、在Director添加集羣服務
    [root@node1 ~]# yum -y install ipvsadm    #安裝集羣管理軟件
    # ipvsadm -A -t 192.168.120.210:80 -s rr
    # ipvsadm -a -t 192.168.120.210:80 -r 172.16.10.11:80 -m -w 1
    # ipvsadm -a -t 192.168.120.210:80 -r 172.16.10.12:80 -m -w 1

二、LVS DR模型的實現

一、集羣環境,一臺Director,兩臺後端Real server RS1,RS2
    Director:    eth0:192.168.120.100/24  
       配置VIP:ifconfig eth0:0 192.168.120.110 netmask 255.255.255.255 broadcast 192.168.120.110
    RS1:       eth0:192.168.120.211/24  
    RS2:       eth0:192.168.120.212/24  
    VIP:          192.168.120.100
二、修改RS1,RS2的內核參數,關閉lo的arp通告和lo的arp響應,並配置隱藏地址
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
    # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    # ifconfig lo:1 192.168.120.100 netmask 255.255.255.255 broadcast 192.168.120.100
三、在RS1和RS2上分別建立測試頁,並在Director驗證服務
    [root@node2 ~]# echo node2.bjwf.com > /var/www/html/index.html
    [root@node2 ~]# systemctl start httpd.service
    [root@node3 ~]# echo node3.bjwf.com > /var/www/html/index.html
    [root@node3 ~]# systemctl start httpd.service
    Director上驗證:
    [root@node1 ~]# curl http://192.168.120.101
    node2.bjwf.com
    [root@node1 ~]# curl http://192.168.120.102
    node3.bjwf.com
四、爲RS1和RS2添加路由條目,保證其發出報文通過eth0以前,還要進過lo:0,保證源地址爲VIP
    # route add 192.168.120.110 dev lo:1
五、在Director添加集羣服務
    # ipvsadm -A -t 192.168.120.110:80 -s rr
    # ipvsadm -a -t 192.168.120.110:80 -r 192.168.120.101:80 -g -w 1
    # ipvsadm -a -t 192.168.120.110:80 -r 192.168.120.102:80 -g -w 1
相關文章
相關標籤/搜索