lvs工作原理
lvs(Linux Virtual Server)
,工作于layer4
,其原理是根據請求報文的目標IP和PORT將其轉發至后端主機集群中的某一提供服務的主機,具體轉發到哪一臺后端主機需要由挑選算法來決定。通俗來說,lvs的功能是通過在內核空間的netfilter
上的INPUT
鏈上的ipvs實現的,當報文由物理網絡接口進入主機后,ipvs將流經至INPUT鏈即將進入用戶空間的報文強行改變其流向,即PREROUTING-->INPUT-->POSTROUTING
。
lvs的架構
-
調度器:director,dispatcher,balancer
-
RS:Real Server
-
CIP:Client IP
-
VIP:Director Virtual IP
-
DIP:Director IP
-
RIP:Real server IP
lvs type
lvs-nat(MASQUERADE)
實現過程
當客戶端發出的請求報文經Director的VIP所在的物理網卡流入主機的內核空間時,報文的源IP是CIP,目標IP是VIP。此時,ipvs將強行改變報文的流經方向,即修改報文的目標IP并經DIP所在的物理網卡調度至后端的Real Server,此時,報文的源IP是CIP,而目標IP是RIP。后端RS接收報文并處理后,構建響應報文(源IP是RIP,目標IP是CIP)將經DIP發送至Director,此時,ipvs將修改報文的源IP為VIP,并經VIP所在的物理網卡發送給客戶端。
功能實現的本質
多目標的DNAT(iptables),它通過修改請求報文的目標IP地址(同時可能會修改目標端口實現端口映射) 至挑選出某RS的RIP地址實現轉發。
特性
-
RIP和DIP應該使用私網地址,且RS的網關要指向DIP;
-
請求和相應報文都要經由director轉發,極高負載的場景中,director可能會成為系統瓶頸;
-
支持端口映射;
-
RS可以使用任意OS;
-
RIP和DIP必須在同一物理網絡。
lvs-dr(GATEWAY)
幾個理解要點
-
Director和RS只需要一塊物理網卡;
-
Director和RS連接至同一臺交換機;
-
每臺RS均配置有VIP,并且配置在lo的別名上,如,lo:0
-
由于RS均有VIP,在路由器進行廣播時,為了避免都進行相應,需進行設定,有三種方案
-
靜態綁定:在交換機的配置文件直接進行指定
-
arptables:通過arptables進行設置
-
修改RS主機內核參數
實現過程
客戶端發出的請求報文經過層層路由,到達服務器所在網絡的路由器(此時報文的源IP是CIP,目標IP是VIP)。與路由器相連的交換機此時要進行廣播獲得Director的mac地址,路由器將報文重新進行封裝(源mac是路由器的mac地址,目標mac是Director的MAC地址將),并將報文轉發至Director。此時,Director亦要進行廣播獲得RS的mac地址,并重新將報文進行封裝(目標mac是RS的mac地址)轉發給交換機,交換機收到報文后根據mac轉發給對應的RS。報文到達RS后由物理網卡流入內核空間,并再次經lo進入用戶空間。報文處理后,構建響應報文(源IP是VIP,目標IP是CIP)經lo到物理網卡轉發至路由器,響應給客戶端。
實現本質
通過請求報文目標mac地址進行轉發。
特性
-
保證前端路由器將目標IP為VIP的請求發送給director;
-
RIP可以使用私有地址,也可以使用公網地址;
-
RS跟Director必須處于同一物理網絡中;
-
請求報文經Director調度,但相應報文一定不能經由Director;
-
不支持端口映射;
-
RS可以是大多數的OS;
-
RS的網關不能指向DIP。
lvs-tun(IPIP)
實現本質
不修改請求報文的ip首部,而是通過在原有的ip首部之外,再封裝一個ip首部。需要考慮的問題是再封裝后會超出MTU,而再進行報文切片,但是一般情況下請求報文都比較小,不太可能超出MTU。
特性
-
RIP、VIP和DIP全得是公網地址;
-
RS的網關不能指向DIP;
-
請求報文必須經由Director調度,但相應報文必須不能經由Director;
-
不支持端口映射;
-
RS的OS必須支持隧道功能。
lvs-fullnat:
實現本質:
Director同時修改請求報文的源地址和目標地址進行轉發。但是在內核中并沒有支持此種模式,若要使用需要到官方網站下載補丁包。
實現過程
Director收到報文后, 將源IP(CIP)修改為(DIP),目標地址(VIP)修改為(RIP),然后經過層層路由,轉發給RIP,。當RS主機收到報文后,回應時,源IP為RIP,目標IP為VIP.Director收到報文后,將源IP修改為自己(VIP), 目標IP修改為CIP。此模型適用與多機房且機房不位于同一地區。
特性
-
VIP是公網地址,RIP和DIP是私網地址,且二者無需在同一網絡中;
-
RS接收到的請求報文的源地址是DIP,因此要響應給DIP;
-
請求報文和響應報文都必須經由Director;
-
支持斷就映射機制;
-
RS可以是任意OS。
lvs scheduler
靜態方法:僅根據算法本身進行調度。
-
RR:Round Robin,輪調;
-
WRR:Weighted RR,加權輪調;
-
SH:Source Hash,將來自于同一個ip的請求始終調度至同一RS,實現session保持的機制;
-
DH:Destination Hash,將對同一個目標的請求始終發往同一個RS;
動態方法:根據算法及各RS的當前負載(overhead)狀態進行調度。
-
LC:Least Connection,overhead=Active*256+Inactive;
-
WLC:Weighted LC,overhead=(Active*256+Inactive)/weight;
-
SED:Shortest Expection Delay,overhead=(Active+1)*256/weight
-
NQ:Never Queue,SED算法的改進;
-
LBLC:Locality-Based LC,正向代理情況下的cache server調度;
-
LBLCR:Locality-Based Least-Connection with Replication,帶復制功能的LBLC算法。
ipvsadm工具的使用
管理集群服務
ipvsadm -A|E -t|u|f service-address [-s scheduler] ipvsadm -D -t|u|f service-address service-address(VIP): tcp: -t ip:port udp: -u ip:port fwm: -f mark -s scheduler: 默認為wlc
管理集群服務中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] ipvsadm -d -t|u|f service-address -r server-address server-address(RIP): ip[:port] lvs-type: -g: gateway,dr -i: ipip,tun -m: masquerade,nat
查看和清空
ipvsadm -C ipvsadm -L|l [options] -n: numeric,基于數字 格式顯示地址和端口 -c:connection,顯示ipvs連接; --stats:顯示統計數據; --rate:顯示速率; --exact:顯示精確值。
保存和重載–> /etc/sysconfig/ipvsadm
ipvsadm -R --> ipvsadm--restore ipvsadm -S --> ipvsadm--save
置零計數器
ipvsadm -Z [-t|u|f service-address]
原創文章,作者:Jeason,如若轉載,請注明出處:http://www.www58058.com/62278