3-3-基於LVS實現4層負載均衡模式和場景應用
linux的集群形式:LB負載均衡,HA高並發,HP高性能
分布式系統:存儲、計算(超算集群)
lb cluster實現方式:
軟件
四層:lvs、nginx(stream)、haproxy(mode tcp)
七層:
http:nginx(http)/httpd/haproxy(mode http)/ats/perlbal/pound
mysql:ProxySQL...
硬件
lvs:linux virtual server
vs/rs,cip/vip/dip/rip
lvs type:
nat/dr/tun/fullnat
nat類型:多目標IP的DNAT,通過修改請求報文的目標IP和PORT來實現調度;
dr類型:通過為請求報文重新封裝一個MAC首部進行轉發:源MAC是DIP所在的接口的MAC,目標MAC是某次挑選出的RS的RIP所在接口的MAC地址;請求報文經由directory,響應報文不經由directory
NAT和DR都有距離的限制,必須在很近的距離內,因為雙絞線的限制(私網地址必須在同一個物理網絡)
接上次課課件:
lvs-tun:---RS不在同一個機房,所以不需要做拒絕arp廣播和響應,這種模型應用不多(有個問題,巨型幀---客戶端請求數據超過mtu)
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP);
(1)DIP,VIP,RIP都應該是公網地址;
(2)RS的網關不能,也不可能指向DIP;
(3)請求報文要經由Director,但響應不能經由Director;
(5)RS的OS得支持隧道功能;
lvs-fullnat:---非標準類型 通過同時修改請求報文的源IP地址和目標IP地址進行轉發; CIP<-->DIP VIP<-->RIP (1)VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP; (2)RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Direcotr還要將其發往Client; (3)請求和響應報文都經由Director; (4)支持端口映射; 註意:此類型默認不支持; 總結: lvs-nat,lvs-fullnat:請求和響應報文都經由Director; lvs-nat:RIP的網關要指向DIP; lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信; lvs-dr,lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client; lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發; lvs-tun:通過在原IP報文之外封裝新的IP首部實現轉發,支持遠距離通信;
ipvs scheduler:
根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種:
靜態方法:僅根據算法本身進行調度;---一般短鏈接使用這種調度方法
RR:roundrobin,輪詢;
WRR:Weighted RR,加權輪詢;---有的服務器計算能力比較強,會虛擬出幾臺服務器的能力
SH:Source Hashing,實現session sticy(黏性),源IP地址hash;將來自同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定;---用戶第一次訪問,一般是加權輪詢,在內存建立一個hash表,以源IP為鍵,以RIP為值---有個問題,server down了,session也就丟了,而且lvs工作在四層,不能進行cookie綁定
DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡;
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度;---適用於長連接---非活動連接對資源的依賴很少很少,重量是活動連接的256分之一
Overhead=負載值
LC:least connections---最少連接,誰小就挑選誰
Overhead=activeconns*256+inactiveconns
WLC:Weighted LC---加權最少連接,誰重就選誰,默認算法,有問題,剛開始沒有連接,恰好輪詢時第一臺性能最差
Overhead=(activeconns*256+inactiveconns)/weight
SED:Shortest Expection Delay---最短期望延遲
Overhead=(activeconns+1)*256/weight
NQ:Never Queue不排隊保證每個server都有鏈接
LVLC:Locality-Based LC,動態的DH算法;如果沒有綁定,不是輪詢而是根據後端服務器的負載來調度
LBLCR:LBLC with Replicaion,帶復制功能的LBLC;兩個緩存服務器之間允許緩存協議的共享
ipvsadm/ipvs:---ipvs是內核的直接功能,只要內核編譯時開啟此功能就能用,ipvsadm是用戶空間工具,只要裝安裝包就能用,不需要監聽任何服務和端口
集群和集群之上的各RS是分開管理的;
集群定義
RS定義
ipvs:
~]#grep -i "ipvs" -C 10 /boot/config-VERSION-RELEASE.x86_64---從這個內核編譯信息配置模板的上下文中查找關鍵字的上下10行
支持的協議:TCP,UDP,AH,ESP,AH_ESP,SCTP;---都是四層協議
ipvs集群:
集群服務
服務商的RS
yum info ipvsadm---查看這個包信息
正向代理:代表客戶端發出請求的
反向代理:代表服務端提供服務的
3-3-基於LVS實現4層負載均衡模式和場景應用