LVS詳解

概述

    LVS是工作在4層的負載均衡調度器,可根據請求報文的目標IP和目標協議及端口,根據指定的調度算法,將請求調度轉發至某RealServer,本篇就針對LVS的原理,配置和使用進行簡單介紹,具體包含:

    1、LVS的四種類型的介紹

    2、LVS調度算法的介紹

    3、ipvsadm命令的用法介紹

    4、LVS-NAT方式的配置示例

    5、LVS-DR方式的配置示例

    6、基于FWM(防火墻標記)的LVS的配置

    7、LVS的持久連接機制的使用

第一章    LVS的四種類型的介紹

    1、LVS的組成

        ipvs:內核空間的框架,工作于內核上的netfilter的INPUT鉤子之上的程序,可根據用戶定義的集群實現請求轉發

        ipvsadm:用戶空間的命令行程序,主要用于管理集群服務及集群服務器上的RS(后端真實服務主機)

    2、LVS集群類型:

        lvs-nat:修改請求報文的目標IP,相當于多目標的DNAT

        lvs-dr:操縱封裝新的MAC地址

        lvs-tun:在原請求IP報文之外,新加一個IP首部

        lvs-fullnat:修改請求報文的源和目標IP

    3、LVS-NAT的介紹

    

        LVS-NAT相當于iptables的多目標的DNAT,通過將請求報文中的目標地址和目標端口為挑選出來的后端RS的IP地址和PORT,基于連接追蹤機制,因此,其并發能力受到連接追蹤表的限制(相關連接追蹤表的內容,參考iptables相關內容),所以其并發量不大。一般后端調度的服務器數量不超過10臺

           

        工作模型:

            客戶端請求發往前端調度器,調度器在INPUT鏈上發現請求的是定義好的集群服務,然后將其報文的目標地址轉為后端某個提供真實服務的RIP的地址,發送給該real server,而后端real server處理完后,將響應結果響應給調度器,調度器收到后,根據內部的連接追蹤表,將響應報文的源地址改為自己VIP的地址,然后響應給客戶端

        

        工作特性:

            <1>多目標的DNAT,通過將請求報文中的目標地址和目端口修改為挑選出的而某real server的RIP和PORT實現轉發

            <2>RIP和DIP必須在同一IP網絡,且應該使用私有地址,而且后端real server的網關要指向DIP(保證real server的響應報文必須經由調度器)

            <3>請求報文和響應報文都經過Director轉發,較高負載下,Director容易成為系統瓶頸和單點故障所在

            <4>支持端口映射

            <5>director調度器必須是linux、后端real server可以是任意操作系統

        工作拓撲結構

        blob.png

    4、LVS-DR的介紹

        通過修改請求報文的mac地址進行轉發(源MAC是DIP所在網卡的mac,目標mac是挑選出的某real server的RIP所在接口的MAC地址);IP首部不會發生變化(源地址是CIP,目標地址是VIP),因此為了讓Real Server能夠正常接收報文,要在Real Server上也配置VIP的地址

        在各個real server的本地回環接口的子接口上配置一個IP地址,該IP地址與VIP相同,從而能夠實現由real server直接響應用戶請求,而不用轉交給director響應

        各個real server和director連接在一個網絡中,相當于旁路部署的方式

               

        工作模型:

            director和real server上都只需要一個網卡,director的網卡IP是VIP,同時也會通過網卡別名的方式設置一個DIP,real server集群上的每個主機,也只有一個網卡,設置一個RIP,但會通過網卡別名設置一個跟director一樣的VIP,只是這個別名設置的VIP是隱藏的,不會用來接收任何的報文,只是響應外部請求的是后,用來偽裝以VIP的身份響應。

            當請求進來后,源IP為CIP,目標IP為VIP,但此時只有director的VIP會響應,拿到報文后,director將報文進行幀首部拆封,通過查看IP和端口,發現是定義了集群的應用,然后將源MAC轉為自己的的MAC,目標MAC轉為某個RIP的MAC,然后將報文抓發給那個real server,當real server拿到報文后,解封裝,發現MAC是自己,然后目標IP是VIP,因為自己這里也有一個虛擬出來的VIP,故接受報文,然后響應,響應的時候,以VIP為源地址,CIP為目標地址進行相應。

        此中工作模型下,由于director只負責接受進站的請求,由real server直接相應出站請求,一般進站的請求報文都比較小,故此種方式下,負載均衡性能是非常好的。

      

        工作特性:

            <1>確保前端路由器將目標IP為VIP的請求報文發往Director

                有三種實現方法:

                1) 在路由器上靜態綁定VIP和Director的MAC地址(但是不實用,因為如果對Director做了高可用,當當前綁定的MAC地址的Director故障后,那么在路由器上靜態綁定就要隨著修改)

                2) 禁止各個real server上配置的VIP響應報文目標IP為VIP的請求(也就是在real server上,禁止本機的VIP響應ARP請求,禁止本機VIP向外通告)

                    可通過:

                        (a) arptables工具實現

                        (b) 修改real server的內核參數,并把VIP綁定在lo本地環回接口的別名上

                            內核參數為arp_ignore、arp_announce

            <2>real server可以使用私有地址,也可以使用公網地址,RIP與DIP在同一網絡

            <3>real server和director必須在同一物理網絡,因為二者之間使用MAC地址進行通信,real server的網關必須不能指向DIP

            <4>請求報文必須由Director調度,但響應報文必須不能經過director,響應報文由RS直接發往Client

            <5>不支持端口映射

            <6>real server可使用大多數的操作系統

        工作拓撲結構:

        blob.png

    5、LVS-TUN介紹

        director和real server不在同一個網絡中,當請求報文到達director時,此時源IP為CIP,目標IP為VIP。director進行轉發時,不會動原來的報文,而是在原來報文的基礎上,再加上一層IP報文,將外殼報文的源IP設置為DIP,目標IP設置為選定要轉發到的那臺real server的RIP,當real server收到報文后,解封裝,發現里面還有一個IP首部,源IP為CIP,目標IP為VIP,此種模型下real server上跟DR模型時類似,也有一個隱藏的VIP,故繼續解封裝后由real server直接響應客戶端,響應時源IP為VIP,目標IP為CIP。

       

        工作特點:

            <1>轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP首部之外再封裝一個IP首部(源IP為DIP,目標IP為挑選出來的real server的RIP)

            <2>RIP、DIP、VIP全是公網地址

            <3>real server的網關不能,也不可能指向DIP

            <4>請求報文經由Director轉發,但響應報文將由real server直接發往客戶端CIP

            <5>不支持端口映射

            <6>real server的操作系統必須支持IP隧道功能

        工作拓撲:

        blob.png

    6、LVS-FULLNAT介紹

        主要是為了解決lvs-nat模型中,各個real server不能跨網絡的問題,通過同時修改請求報文的源IP(CIP轉為DIP)和目標IP(VIP轉為RIP)全部進行NAT轉換來實現,此類型默認不支持,如果要使用,需要向內核打補丁

        

        工作特點:

            <1>VIP是公網地址,RIP是DIP是私有網絡地址,且通常不在同一網絡中,但需要經由路由器互通

            <2>real server收到的請求報文源IP為DIP,因此響應報文將直接響應給DIP,Director再將報文處理后再發往Client

            <3>請求和響應報文都經由Director

            <4>支持端口映射

         

第二章    LVS調度算法的介紹

    1、調度算法分類:

        根據其調度是否考慮后端主機的當前負載的情況,可分為靜態方法和動態方法兩類:靜態方法和動態方法

        靜態方法包括:RR、WRR、SH、DH

        動態方法包括:LC、WLC、SED、NQ、LBLC、LBLCR

    2、靜態調度方法:僅根據算法本身進行調度,不考慮后端RS當前負載情況

        <1>RR:round robin,輪詢/輪調/輪叫,將請求輪流的調度到后端每一個RS上

        <2>WRR:weighted round robin,加權輪詢,基于后端RS的權重,將請求按照權重,輪流調度到各個RS上

        <3>SH:source hash,

            源地址hash,主要用于會話保持,將來自于同一個源地址的請求,始終發往后端的同一臺real server上,指的是在一段時間內,只要是來自同一個客戶端的請求,一定會發往同一個后端real server服務器。主要目的是為了session affinity(會話綁定),實際是在WRR算法的基礎上,維持了一張會話表,表中記錄了源IP和其調度到的RS的對應關系

        <4>DH:destination hash,

            目標地址hash,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,多數用于緩存代理中,用于正向的web代理中(緩存),負載均衡內網用戶對外部服務器的請求,hash的是目標地址,將訪問目標IP一致的請求,都調度到同一個代理服務器上,用于提升在代理服務器上的緩存的命中率

    3、動態調度方法:根據算法及各個real server當前的負載狀態進行調度

        <1>LC:least connection

            最少連接。通過計算每個real server的活動連接和非活動連接的總數,計算公式為 active*256+inactive,判斷哪臺服務器的連接數最小,就挑選誰作為調度對象

        <2>WLC:weight lc加權最小連接

            在lc的基礎上,考慮服務器自身性能作為權重依據,性能越好,權重值越大,公式為(active*256+inactive)/weight,判斷哪個的值最小,就將其作為調度對象,如果值一樣,就按排列在上面的作為調度對象

        <3>SED:shortest expections delay,最短期望延遲

            改進了的wlc,計算方式為(active+1)*256/weight,誰小,選誰

        <4>NQ:never queue,永不排隊

            改進了的sed,先根據權重,保證每個服務器上分配一個請求,然后再根據sed的算法,進行分配

        <5>LBLC:locality-based LC,基于本地的最少連接。

            有一個特點,類似動態的dh算法,將請求同一資源的客戶端發往同一個后端的服務器,但是是在考慮服務器空閑狀態的,利用wlc的計算方式。

        <6>LBLCR:基于本地的帶復制功能的最少連接。利用緩存復制功能

     

第三章    ipvsadm命令的用法介紹

    1、管理集群服務:增、改、刪、查

        <1>增加、修改

            ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout]

                -A:增加

                -E:修改

                -t:tcp協議的某個服務添加為集群服務

                -u:udp協議的某個服務添加為集群服務

                -f:firewall mark 防火墻標記

                service-address:

                    -t,TCP協議時,此地址對應為:VIP:PORT

                    -u,UDP協議時,此地址對應為:VIP:PORT

                    -f,防火墻標記時,此地址對應為:MARK(防火墻的標記)

                -s scheduler:指明調度算法,省略此項時,默認為wlc

                -p timeout:當定義LVS的持久連接時,指明持久連接時長

            如:

                ipvsadm -A -t 10.1.32.68:80 -s rr

                表示添加一個tcp類型的集群服務,服務監聽的地址是10.1.32.68的80端口,采取的調度算法為rr算法

                ipvsadm -A -t 10.1.32.68:3306 -s wlc

                添加一個tcp類型的集群服務,服務監聽的地址是10.1.32.68的3306端口,采用的調度算法是wlc

                ipvsadm -E -t 10.1.32.68:80 -s wlc修改集群服務

        <2>刪除指定的集群服務

            ipvsadm -D -t|u|f service-address

            -D  刪除

            如:

                ipvsadm -D -t 10.1.32.68:80

    2、集群上Real Server的管理

        <1>增加、修改

            ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

                -a   增加

                -e   修改,修改時不能修改real server的地址

                -t|u|f service-address :與之前添加的那種協議的集群服務,及其對應的地址(要實現存在)

                -r server-address:指明后端real server的地址,RIP[:PORT],可以不指定PORT,不加時,表示根定義集群服務時的端口一樣

                [-g|i|m]  指明集群類型,不指名,則默認為lvs-dr模型

                    -g   表示gateway,也就是lvs-dr模型

                    -i   表示ipip,也就是lvs-tun模型

                    -m   表示masquerade,也就是lvs-nat模型

                -w weight  指明權重,對于在定義集群服務時,指明的算法如果支持權重,則-w指明該real server的權重

            如:

                ipvsadm -a -t 10.1.32.68:80 -r 10.1.32.72 -m -w 2

                表示向10.1.32.68:80這個tcp類型的集群服務添加一個real server,其地址為10.1.32.72,采用的集群工作模型為lvs-nat模型,該real server的權重為2

  

        <2>刪除

            ipvsadm -d -t|u|f service-address -r server-address

                -d 刪除

                -t|u|f service-address  指明從哪個集群服務中

                -r server-address   表示刪除哪個real server

    3、查看集群的相關信息:    

        ipvsadm -L|l [options]

            options:

                -n  表示數字格式顯示為IP和PORT,而不進行反解到主機名和服務

                -exact   表示顯示大小單位時,不以M,G,而是以精確值來顯示大小

                -c  表示顯示當前ipvs的連接的情況

                –stats   表示顯示ipvs的統計數據,如發送報文速量,接受報文數量…

                –rate   速率,顯示集群服務及real server上的平均每秒接受的報文速率、每秒發送的報文數量…

ipvsadm -Ln顯示出來的內容
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port  Forward Weight ActiveConn InActConn
TCP  10.1.32.68:80 rr   集群服務及其采用的調度算法
 -> 10.1.32.72:80                Masq    2      0          0 
后端的real server的地址和對應的端口,以及采用的lvs的工作模型(nat、dr、tun),權重,活動連接數,非活動連接數        
 -> 10.1.32.73:80                Masq    3      0          0     

ipvsadm -Ln --stats顯示出來的內容
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
 -> RemoteAddress:Port
TCP  10.1.32.68:80                      0        0        0        0        0
集群服務及當前整個集群的連接數,總共的入站的報文數,出站的報文數,入站的字節數,出站的字節數
 -> 10.1.32.72:80                       0        0        0        0        0
當前real server的地址和端口,當前real server的總共的連接數,入站報文數,出站報文數,入站字節數,出站字節數
 -> 10.1.32.73:80                       0        0        0        0        0

ipvsadm -Ln --rate 顯示出來的內容
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
 -> RemoteAddress:Port
TCP  10.1.32.68:80                       0        0        0        0        0
當前集群的平均每秒的連接數,每秒的入站報文數,每秒出站報文數,每秒入站字節數,每秒出站字節數
 -> 10.1.32.72:80                       0        0        0        0        0
當前real server上平均每秒的連接數,每秒的入站報文數,每秒出站報文數,每秒入站字節數,每秒出站字節數
 -> 10.1.32.73:80                       0        0        0        0        0

    4、清空所有ipvs規則:ipvsadm -C  表示清空當前ipvs上的所有的集群定義的規則

    5、清空ipvs的計數器(接受報文數、發送報文數…)

        ipvsadm -Z [-t|u|f service-address]

    6、ipvs規則的保存和重載:

        保存:

            ipvsadm-save > /PATH/TO/FILE

            ipvsadm  -S > /PATH/TO/FILE

        重載:

            ipvsadm-restore < /PATH/FROM/FILE

            ipvsadm  -R < /PATH/FROM/FILE

         

第四章    LVS-NAT方式的配置示例

    1、配置環境說明

    blob.png

    2、在Director上安裝ipvsadm工具,在RS1和RS2上安裝LAMP軟件組合,驗證LAMP組合服務是否可用

    blob.png

    blob.png

    blob.png

    修改LAMP組合的相關程序的配置文件,啟動服務,在RS1和RS2上提供測試頁面,啟動服務,查看LAMP組合是否正常

    blob.png

    blob.png

    blob.png

    blob.png

    3、按照實驗拓撲,配置各個節點的網絡

    blob.png

    blob.png

    blob.png    

    blob.png

    4、在Director上定義集群服務,測試訪問

    blob.png

    blob.png

    blob.png

    blob.png

    blob.png

    blob.png

    blob.png

  

第五章    LVS-DR方式的配置示例

LVS-DR模型的實驗說明:
        1、在各主機(Director、RS)上均需要配置VIP,因此,要解決地址沖突的問題,目標是讓RS上的VIP不可見,僅用于接受
        目標地址為VIP的報文,同時可作為響應報文的源地址,可實現的方法:
            <1> 在前端的網關上進行靜態綁定,明確指明VIP的mac就是director的VIP對應的接口的mac地址
            <2> 在各個RS上使用arptables。arptables的功能類似iptables,只是iptables是在IP層做過濾,
                而arptables在可以基于mac地址做過濾,這樣就可以在real server上設置不允許響應arp的請求包
            <3> 在各個RS上修改內核參數,內核上提供了兩個內核參數:arp_ignore 和arp_announce
                arp_ignore:定義接收到ARP請求時的響應級別。默認是0,接受的值有0-8,其中,0表示請求的IP地址配置
                    在本地的任何接口上,都進行相應;1表示請求的IP地址在配置在請求進來的接口上時,才進行相應。
                arp_announce:定義將自己地址和MAC地址對應關系,向外通告時的通告級別。值為0,1,2。默認是0,
                    其中0表示將本機任何接口上的任何地址向每個接口進行通告;1表示試圖僅向目標網絡通告與其網絡匹配的地址;
                    2表示僅向與本地接口上地址匹配的網絡進行通告
                
                故可以通過在real server上將虛擬的VIP配置到lo接口的別名上,如:lo:0上,
                然后設置arp_ignore 為1,arp_announce為2,這樣就符合要求了

        2、在使用了上述的第<3>方法阻止real server接受VIP的報文后,當director接收到請求報文,然后調度后,
        轉發到某個real server上,當real server接收到請求,進行響應時,由于虛擬的VIP是配置在lo接口上,lo是
        不對外進行響應的,而linux系統上,對外響應報文的源地址,一定是報文出去的接口的IP地址,但是請求報文
        的目標地址是VIP,響應的源地址一定要是VIP,否則客戶端在接收到響應報文后會認為是非法報文,為了解決這
        個問題,可以在real server上配置一條路由條目,將響應報文的源地址設置為lo上配置的假的VIP地址

    1、實驗環境

    blob.png

    

    2、在Director上按照拓撲結構,搭建實驗環境

    blob.png

    3、在RS1上配置實驗所需的環境

    blob.png

    blob.png

    blob.png

    3、在RS2上配置實驗所需環境

    blob.png

    blob.png

    4、設定客戶端環境

    blob.png

    blob.png   

    5、在Director上定義集群,在客戶端進行驗證

    blob.png

    blob.png

    blob.png

    blob.png

   6、補充說明:
        通過以上幾個配置,就可以進行負載均衡了,但是這樣實現負載均衡的前提是,VIP、DIP、RIP在同一個網段內,
        如果是向外提供服務的應用,那么這些主機上都要是公網地址。但是在實際生產環境中,基本上只要VIP是公網
        地址,其他都是私有地址,為了實現這種情況的負載均衡,結構應該是這樣的,進口路由設備通過交換機接到
        director上,這時路由接到交換機的口的地址,以及director的地址都是公有IP,然后各個real server連接到
        交換機上,交換機還有另外一條線路通過別的路由器出去,或者是還有另外一條線路,接到之前那個路由器的另
        外一個接口上,而路由器的這個接口上的IP為私有IP地址

    blob.png

  

第六章    基于FWM(防火墻標記)的LVS的配置

    1、防火墻標記的相關概念

        防火墻標記:在netfilter上給報文打標簽,應該在iptables的mangle表上實現,mangle表可在iptables的5個鏈(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING)上都可以實現,標記的值為正整數

        對ipvs而言,所有報文都是在INPUT鏈上進行處理的,所以如果要基于防火墻標記進行集群配置,則可以在PREROUTING鏈上對報文打上防火墻標記,然后再到INPUT鏈上用ipvs定義集群

    2、利用防火墻標記定義LVS集群的意義

        基于防火墻標記定義集群,可以將多個服務定義一個集群服務(前提是后端的real server也同時提供對應的多個服務)

        還可以基于防火墻標記,進行LVS的持久連接

    3、基于防火墻標記定義集群的示例:

        在LVS-DR實驗的基礎上,利用防火墻標記,將httpd與mysql的服務定義為同一個調度對象,進行統一調度

    1.png

        

   

第七章    LVS的持久連接機制

    1、ipvs的持久連接的作用

        基于一個持久連接模板,能實現,無論使用任何算法調度,都能進行在一段時間內,將來自于同一源IP的請求,始終發往后端同一real server,利用持久連接模板(實際是一段內存緩沖區域),模板內保存了每個客戶端及分配給他的real server 的映射關系

    2、持久連接的類型

        每端口持久(PPC):只持久一個服務

            來自于同一個源IP對ipvs上定義的多個集群服務,當訪問某一個服務,如80端口的服務時,在定義的持久連接的時長內,都調度到某個real server上,但是當該客戶端請求該ipvs上定義的其他集群服務時,如22端口,則是重新調度到另外的真正提供22端口服務的real server上

        每客戶端持久(PCC): 持久所有服務

            只要是來自于同一客戶端的請求,無論訪問的是哪個集群服務,都調度到后端同一個real server上,前提是后端的real server要能同時提供多種集群定義的服務

        每FWM持久:每防火墻標記持久,持久自定義的服務

            將來自同一個防火墻標記的都發往同一個real server上,如此就可以靈活的將各種服務組織成同一個防火墻標記,然后對同一個防火墻標記進行持久連接的定義

    3、配置每端口持久示例

    blob.png

    blob.png

    4、配置每客戶端持久示例

    blob.png

    blob.png

    

    5、定義每防火墻標記持久示例

    blob.png

    blob.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/54875

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-10-27 16:49
下一篇 2016-10-27 16:52

相關推薦

  • ACL實現靈活的權限管理

    ACL實現靈活的權限管理 除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限 CentOS7當中,無論是操作系統安裝時還是之后手工創建的文件系統(xfs、ext4)均會開啟ACL功能。 CentOS6及之前的版本,僅操作系統安裝時創建的文件系統才會默認開啟ACL,手工創建的文件系統,需要手工開啟ACL功能。 mount -o acl /dev/sda…

    2017-07-27
  • python練習實例

    #依次輸出五位數的每一位(由低位到高位)i=12345for a in range(5):j=i%10i=i//10print(j) #依次輸出五位數的每一位(由高位到低位)i=12345for a in range(5,0,-1):j=i//10**(a-1)i=i%10**(a-1)print(j) #打印菱形for i in range(-3,4):j…

    Linux干貨 2018-03-25
  • 正則表達式詳解?

      正則表達式詳解 一、概述   GREP(global search regular expression(RE) and print out theline),是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。利用這些返回值就可進行一些自動化的文本處…

    Linux干貨 2015-05-11
  • linux三劍客之grep

    linux三劍客之grep        所謂三劍客的工具有“grep”、“sed” 、“awk”,他們都是不謀而合的文本搜索查找處理的強大工具。grep 是 Ken Thompson 寫的,他也是 Unix 的創造者。 gerp及正則表達式    grep全稱(GLobal search Regu…

    Linux干貨 2016-08-08
  • Linux作業管理和并發執行

    概述 本章將為大家介紹一些進程管理的補充部分作業管理和任務的并發執行,同時也將介紹一下Linux系統上計劃任務的相關內容,具體分為:1、Linux作業管理2、任務的并發執行 第一章 Linxu作業管理 1、前臺作業和后臺作業    前臺作業:通過中斷啟動,且啟動后一直占據終端    后臺作業:可通過終端啟動,但啟動后即…

    Linux干貨 2016-09-28
  • 第四周作業

    Linux系統文件管理使用案例 1、 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 首先,利用cp命令將/etc/skel目錄復制為/home/tuser1: [root@localhost ~]# cp -r /etc/skel /home/tuser1 隨后通過chmo…

    Linux干貨 2018-03-24
欧美性久久久久