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頭實現轉發,支持遠距離通信