lvs三種工作模型

LVS介紹

LVS:Linux Virtual Server,負載調度器,內核集成,章文嵩(花名 正明), 阿里的四層SLB(Server Load Balance)是基於LVS+keepalived實現
LVS 官網:http://www.linuxvirtualserver.org/


lvs工作原理:

1.根據套接字做轉發:四層交換、四層路由,工作在tcp/udp等協議的四層;
    2. 根據用於的請求的IP加端口來判定是否轉發:向何處轉發,工作在內核中,不通過用戶空間;
    3. osi模型第四層,(無法根據應用層轉發,如果要通過應用層轉發就必須到用戶空間,根據mac轉換叫交換機加,根據ip轉發叫路由器);
    4. 套接字最多65535個,ipvs不依賴套接字


lvs相關術語

LVS Director:負載調度器,它接收所有傳入的客戶端服務請求,並將它們定向到特定的“真實服務器(RS)”以處理請求
    Real servers:組成LVS羣集的節點,用於代表羣集提供服務
    Client computers:向LVS Director請求服務的計算機
    VIP(Virtual IP address):用於向客戶端計算機提供服務的IP地址
    RIP(Real IP address):用於連接到羣集節點的IP地址
    DIP (Directors IP address):用於連接到真實IP地址網絡的IP地址
    CIP(Client computers):分配給客戶端計算機的IP地址,它用作發送到羣集的請求的源IP地址

訪問流程:CIP <--> VIP == DIP <--> RIP

Lvs工作模式

一、lvs-nat: 修改請求報文的目標ip和目標端口,多目標ip的DNAT

1. RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP
    2. 請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸
    3. 支持端口映射,可修改請求報文的目標PORT
    4. VS必須是Linux系統,RS可以是任意OS系統

缺點:
    Director很可能成爲系統性能瓶頸

LVS-DNat工作過程
1、 客戶端請求數據,目標IP爲VIP
2、 請求數據到達LB服務器,LB根據調度算法將目的地址修改爲RIP地址及對應端口(此RIP地址是根據調度算法得出的),並在連接HASH表中記錄下這個連接。
3-4、 數據包從LB服務器到達RS服務器webserver,然後webserver進行響應。Webserver的網關必須是LB,然後將數據返回給LB服務器。
5、 收到RS的返回後的數據,根據連接HASH表修改源地址VIP目標地址CIP,及對應端口80.然後數據就從LB出發到達客戶端。
6、 客戶端收到的就只能看到VIP/DIP信息。


二、LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

1. Director和各RS都配置有VIP
   2. 確保前端路由器將目標IP爲VIP的請求報文發往Director
   3. RS的RIP可以使用私網地址,也可以是公網地址,此時可以直接通過互聯網連入RS以實現配置、監控等;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director
   4. RS和Director要在同一個物理網絡(不能由路由分隔,中間不能經過路由器,可以經過交換機
   5. 請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client
   6. RS可使用大多數OS系統

缺點:
    不支持端口映射(端口不能修敗)

同網段

LVS-DR工作原理
1、Client正常訪問服務,源地址CIP目標地址GIP即真實的僞地址公網IP(因爲提供服務的是內部的私有網絡VIP)
2、通過路由器或防火牆的調度把請求報文的數據幀的目標MAC地址改爲LB服務器真實的DIP的MAC地址,放行此次訪問把請求給送給提供調度的LB服務器,此時CIP的MAC爲私網入口IP的MAC,VIP目標爲LB主機VDP的MAC(因爲通過路由器和防火牆調度後,數據幀始終在同一個局域網傳輸)
3、LB將請求報文的數據幀的目標MAC地址改爲RS服務器的MAC地址(RIP),然後再將修改的數據幀在局域網內發送給真實提供服務RS服務服務器。此時的CIP的MAC內DIP的MAC,VIP目標爲RS服務的MAC.(我們需要在本地的lo上面配置VIP,來調度後面的RS服務器,並接受響應)
4、RS服務器接收到請求數據包的時候, 解開IP包頭查看到的目標IP是VIP。(此時只有自己的IP符合目標IP纔會接收進來,所以需要在本地的lo上面配置VIP,等待調度)
5、然後RS服務器做成請求響應,之後根據自己的路由信息將這個響應數據包發送回給客戶,並且源IP地址還是VIP,目標仍IP爲CIP,源MACRSMAC目標MAC爲私網入口MAC地址,之後在通過入口設備調用給Client

問題:由於同一局域網內網絡接口都會進行ARP廣播響應,但集羣的其他機器都有這個VIP的lo接口,都響應就會衝突

解決方法:
1 在前端網關做靜態綁定VIP和Director的MAC地址(未必有路由器的配置權限;Director調用時靜態地址綁定將難以適用)
 
 
2.在RS上使用arptables工具(不常用)
           arptables -A IN -d $VIP -j DROP
           arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RI

3 在RS上修改Liunx內核參數,將RS上的VIP配置在lo接口的別名,限制其LIunx僅對對應接口的ARP請求做相應(建議使用)
 /proc/sys/net/ipv4/conf/all/arp_ignore(修改爲1)
    0:只要本地配置有相應的地址時,就給與相應
    1:僅在請求的目標地址配置請求到達的接口上的時侯,纔給與響應

/proc/sys/net/ipv4/conf/all/arp_announce(修改爲2)
    0:將本地任何接口的任何地址向外通告
    1:試圖僅向目標網絡通告與其網絡匹配的地址
    2:僅與本地接口上地址匹配的網絡

不同網段

如同網段的請求過程基本一樣,不在贅述

需要注意:
lo網卡上的VIP10.0.0./32和局域網IP不在同一網絡中卻都屬於私有網絡,此時需要在路由器上做路由或者添加一個10.0.0.0/8網段的任意主機在eth1網卡即內網IP入口的網卡上
 
添加路由
ip route 10.0.0.0/8 via eth1
 
添加ip
ip a a 10.0.0.100/8 via eth1
自動生成到10.0.0.0/8 dev eth1的路由
從而通過eth1實現和不同主機上的lo網卡通信
``


三、LVS TUN類型: ip隧道(IPIP)轉發方式:不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP

1、RIP、DIP、VIP都是公網地址(也可以是私網,如內部專線)
    2、RS的網關不會指向也不可能指向DIP;
    3、請求報文經過Directory,但響應報文一定不經過DIrector
    4、適用於跨互聯網轉發

缺點
不支持端口映射
RS的OS必須得支持隧道功能

LVS-TUN實現原理
1、客戶請求數據包,目標地址VIP發送到LB上。
2、LB接收到客戶請求包,進行IPTunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然後發送出去。
3、RS節點服務器根據IP Tunnel包頭信息(此時就又一種邏輯上的隱形隧道,只有LB和RS之間懂)收到請求包,然後解開IP Tunnel包頭信息,得到客戶的請求包並進行響應處理。
4、RS服務器響應處理完畢之後,RS服務器使用自己的出公網的線路,將這個響應數據包發送給客戶端。源IP地址還是VIP地址,仍需經過路由(RS節點服務器需要在lo配置VIP)


LVS工作模式總結和比較

VS/NAT VS/TUN VS/DR
Server any Tunneing Non-arp device
server network private LAN/WAN LAN
server number low(10-20) High(100) High(100)
server gatway load balancer own router Own route

1.vs-nat與lvs-fullnat:
請求和響應報文都經由Director
lvs-nat:RIP的網關要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信

2.lvs-dr與lvs-tun:
請求報文要經由Director,但響應報文由RS直接發往Client
lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發
lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

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