lvs: Linux Virtual Server l4:四層交換;四層路由; 根據請求報文的目標IP和PORT將其轉發至後端主機集群中的某一臺主機(根據挑選演算法); netfilter: PREROUTING --> INPUT PREROUTING --> FORWARD --> POSTROU ...
lvs:
Linux Virtual Server
l4:四層交換;四層路由;
根據請求報文的目標IP和PORT將其轉發至後端主機集群中的某一臺主機(根據挑選演算法);
netfilter:
PREROUTING --> INPUT
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> POSTROUTING
ipvsadmin/ipvs
ipvsadmin:用戶空間的命令行工具,用於管理集群服務;
ipvs:工作內核中netfileter INPUT鉤子上;
支持 TCP, UDP, AH, EST, AH_EST, SCTP 等諸多協議;
lvs arch
調度器:director,dispatcher,balancer
RS:Real Server
Client IP:CIP
Director Virtual IP:VIP
Director IP:DIP
Real Server:RIP
lvs type:
lvs-nat MASQUERADE
lvs-dr(direct routing) GATEWAY
lvs-tun(ip tunneling) IPIP
lvs-fullnat
lvs-nat: 隱藏內網主機
多目標的DNAT,通過修改請求報文的目標IP地址(埠)至挑選出的某RS的RIP地址實現轉發;
(1)RS和DIP應該使用私有地址,且RS的網關要指向DIP;
(2)請求和響應報文都要經由Director轉發; 極高負載場景中,Director可能會成為系統瓶頸;
(3)支持埠映射;
(4)RS可使用任意操作系統;
(5)RS的RIP和Director的DIP必須在同一IP網路;
lvs-dr:direct routing
通過修改請求報文的目標MAC地址進行轉發;
Director:VIP,DIP
RS:VIP,RIP
(1)保證前端路由器將目標IP為VIP的請求報文發送給Director;
解決方案:
靜態綁定
arptables
修改RS主機內參數
(2)RS的RIP可以使用私有地址;但也可以使用公網地址;
(3)RS和Director必須在同一物理網路中;
(4)請求報文經由Director調度,但響應報文一定不能經由Director;
(5)不支持埠映射;
(6)RS可以是大多數OS;
(7)RS的網關不能指向DIP;
lvs-tun:
不修改請求報文的IP首部,而是通過在原有的IP首部之外(cip <--> vip),再封裝一個IP首部;(dip <--> rip);
(1)RIP,DIP,VIP 全需要是公網地址;
(2)RS的網關不能指向DIP;
(3)請求報文必須經由Director調度,響應報文不能經由Director;
(4)不支持埠映射;
(5)RS的OS必須支持隧道功能;
lvs-fullnat:
Director通過同時修改請求報文的目標地址和源地址進行轉發;
(1)VIP是公網地址;RIP和DIP儘量使私網地址,二者無需在同一網路中;
(2)RS接收到的請求報文的源地址為DIP,因此要響應給DIP;
(3)請求把穩的響應報文都必須經由Director;
(4)RS可以使用任意OS;
(5)支持埠映射;
http: stateless
session保持:
session綁定:
source ip hash
cookie hash
session集群:
在所以伺服器中維護所有的session
session伺服器
lvs scheduler:
靜態方法:僅根據演算法本身進行調度;
RR: round robin,輪調
WRR: weighted rr,加權輪調
SH: source hash,實現 session 保持; 來自同一個IP的請求將始終被調度至同一RS;
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/we ight
NQ: Never Queue
SED 的改進,將請求優先調度至沒有被調度過的Server,之後再用 SED 演算法調度
LBLC: Locality-Based LC,動態的DH 演算法;
正向代理情形下的cache server的調度;
LBLCR: LBLC with Repication,帶複製功能的LBLC演算法;
ipvs的集群服務:
(1)一個ipvs主機可以同時定義多個cluster service;
tcp,udp
(2)一個cluster server 上至少應該有一個 real server;
定義時:指明lvs-type,以及lvs scheduler;
ipvsadm的用法:
管理集群服務
ipvsadm -A|E -t|u|f service-address [-s scheduler]
service-address:
tcp: -t ip:port
udp: -u ip:port
fwm: -f mark
-s scheduler:
預設為 WLC
ipvsadm -D -t|u|f service-address
ipvsadm -L|l [options]
ipvsam -C
管理集群服務中的RS
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight] [-x upper] [-y lower]
server-address:
ip[:port]
lvs-type:
-g: gateway,dr
-i: ipip
-m: masquerade,nat
ipvsadm -d -t|u|f service-address -r server-address
查看和清理:
ipvsadm -L|l [options]
-n: number, 基於數字格式顯示地址和埠;
-c: connection, 顯示ipvs連接;
--stats: 進出站位元組統計
--rate: 進出站位元組數速率
--exact:顯示精確值
ipvsadm -C
保存和重載:
ipvsadm -R
ipvsadm -S [-n]
清空計數器:
ipvsadm -Z [-t|u|f service-address]