lvs:Linux Virtual Server
l4:四層路由、四層交換
根據請求報文的目標IP和目標PORT將其調度轉發至后端的某主機;
IPTABLES:
工作在用戶空間中的iptables
工作在內核空間中的netfilter
PREROUTING–>INPUT
PREROUTING–>FORWORD–>POSTROUTING
OUTPUT–>POSTROUTING
LVS:
工作在用戶空間中的ipvsadm
工作在內核空間中的ipvs
ipvsadm:用戶空間的命令行工具,用于管理集群服務及集群服務的RS(real server);
ipvsadm用于定義哪一個服務是集群服務,即TCP或UDP哪一個端口被定義為集群服務
ipvs:內核中的協議棧上實現
工作于內核上的netfilter的INPUT鉤子之上的程序,可根據用戶定義的集群實現請求轉發;
ipvs在內核INPUT層面,監控目前集群服務的請求,強行修改報文的流程。將報告送往POSTROUTING,并離開本機;
POSTROUTING發送到后端服務器時,需要做相應的修改,使后端服務器能夠接受報文
因此不建議一臺LVS服務器上LVS與其他程序一同使用filter規則(尤其不同啟用nat規則),否則將影響LVS服務器的并發連接能力
支持基于TCP、UDP、SCTP、AH、EST、AH_EST等協議進行調度;
一般基于TCP的某個端口進行調度
一個ipvs主機可以為多個集群提供服務,因為Lvs是通過請求的目標地址和目標端口來進行轉發的。但是因為Director可能成為負載均衡的瓶頸,因此不建議一臺Director為多個集群進行負載
一個ipvs服務至少應該有一個RS; #否則沒有意義
LVS集群的專用術語:
vs:Virtual Server、Director、Dispatcher、Balancer
rs:Real Server
CIP:Client IP #客戶端地址
VIP:Virtual Server IP #用于與客戶端通信的地址
DIP:Director IP #用于與Real Server通信的地址
RIP:Real Server IP
lvs集群的類型:
1.lvs-nat:多目標的DNAT,通過將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT實現轉發(并發能力有限)
請求報文:先根據算法選擇一臺合適的rs,并修改客戶端請求的目標IP為REAL SERVER的IP實現的
客戶端–>調度器 源IP:CIP 目標IP:VIP 調度器–>真實服務器 源IP:CIP 目標IP:RIP1
響應報文:要經過調度服務器發送回客戶端
真實服務器–>調度器 源IP:RIP1 目標IP:CIP 調度器–>客戶端 源IP:VIP 目標IP:CIP
使用規則:
(1)RIP和DIP必須在同一網段中,并建議使用私有地址,RS的網關必須指向DIP(保證響應報文必須經由Director);
(2)請求報文和響應報文都經由Director轉發,較高負載下,Director易于成為系統性能瓶頸;
(3)支持端口映射;
(4)Director必須是Linux,RS可以是任意OS;
2.lvs-dr:Direct Routing
lvs的默認類型
RS是接入在與Director相同層次的網絡中,因此請求經Director調度給后端的RS后,RS直接響應客戶端,而不經過Director。
這要求每個RS都配有VIP,為避免VIP地址沖突,每臺RS中將RIP配置在物理接口上,將VIP配置在Loopback口的子接口中(lo:0),并調整內核參數,使其他主機對的VIP的ARP請求RS的物理接口不會響應。
工作原理:
請求報文:用戶發送請求后應送達Director,由Director進行調度,因此后端RS的VIP地址不能直接響應客戶端的請求,即RS需要做隔離廣播ARP請求
由Director發送至調度的RS,變更請求報文中的源、目的MAC,RS的lo:0會響應請求,并將數據由外部網卡(如eth0)發出
客戶端–>調度器 源IP:CIP 目標IP:VIP 源MAC:路由器MAC 目標MAC:Director VIP的MAC 調度器–>真實服務器 源IP:CIP 目標IP:VIP 源MAC:Director VIP的MAC 目標MAC:挑選出的RS 的RIP接口的MAC
響應報文:報文由RIP所在接口發出,因此下一跳必須是與RIP接口在同一網段的路由器。因報文是由RS服務器的外部接口發出,因此下一條路由器必須與RSIP在同一網段內
真實服務器–>客戶端 源IP:VIP 目標IP:CIP
總結如下:
通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的MAC,目標MAC是挑選出的某RS的RIP所在接口的MAC地址;IP首部不會發生變化
(1)確保前端路由器將目標IP為VIP的請求報文發往Director
解決方案:
在路由器上靜態綁定VIP和Director的MAC地址;
禁止RS響應VIP的ARP請求,禁止RS的VIP進行通告
(a)使用系統自帶的ARPtables
(b)修改RS的內核參數,并把VIP綁定lo的別名上
arp_ignore,arp_announce
(2)RS的RIP可以使用私有地址,也可以使用公網地址
(3)RS跟Director必須在同一物理網絡;RS的網關必須不能指向DIP
(4)請求報文必須由Director調度,但響應報文必須不能經由Director
(5)不支持端口映射
(6)RS可以使用大多的OS
3.lvs-tun:tunnel
隧道模型:用于實現多地域的負載均衡
請求報文:用戶發送請求后應送達Director,由Director進行調度,在IP首部外再加了一層IP首部,源地址DIP 目標地址是某個挑選的RIP
客戶端–>調度器 源IP:CIP 目標IP:VIP 調度器–>真實服務器 內部IP首部如“客戶端–>調度器”,外部隧道IP首部 源地址:DIP 目標地址:某個挑選的RIP
響應報文:響應報文通過RIP發送出去
真實服務器–>客戶端 源IP:VIP 目標IP:CIP
轉發方式:不修改請求報文的IP首部(源IP為CIP、目標IP為VIP),而是在源IP首部之外在封裝一個首部(源IP為DIP、目標IP為挑選出RS的RIP)
(1)RIP、DIP、VIP全得是公網地址
(2)RS的網關不能指向也不可能指向DIP(否則負載均衡便沒有意義)
(3)請求報文必須由Director調度,但響應報文必須不能經由Director
(4)不支持端口映射
(5)RS的OS必須支持隧道功能
4.lvs-fullnat(非標準模型)
通過同時修改報文的源IP和目標IP進行轉發
請求報文:
客戶端–>調度器 源IP:CIP 目標IP:VIP 調度器–>真實服務器 源IP:DIP 目標IP:RIP
響應報文:
真實服務器–>調度器 源IP:RIP 目標IP:DIP 調度器–>客戶端 源IP:VIP 目標IP:CIP
(1)VIP是公網地址,RIP和DIP是私網地址,且通常不在同一個網絡中,但需要經由路由器互通
(2)RS收到的請求報文源IP為DIP,因此響應報文將直接響應給DIP
(3)請求和響應報文都經由Director
(4)支持端口映射
原創文章,作者:oranix,如若轉載,請注明出處:http://www.www58058.com/66282