1. 程式人生 > 實用技巧 >lvs群集理論知識

lvs群集理論知識

1、什麼是群集

叢集(Cluster):計算機集合為解決某個特定問題組合起來形成的單個系統。

叢集型別:

LB(LoadBanlancing):負載均衡叢集
HA(HighAvailability):高可用叢集。提高服務可用性,避免出現單點故障
HP(HighPerformance):高效能叢集
分散式儲存與運算

2、什麼是負載均衡叢集(LB)

在現實情況中當我們遇到了單臺伺服器效能不足的時候,這時我們有兩種提升方案:

ScaleUp:向上擴充套件、垂直擴充套件、縱向擴充套件;用效能好的主機替代效能差的主機,價效比差;
ScaleOut:向外擴充套件、水平擴充套件,即以新增伺服器和現有伺服器組成叢集來應對效能不足的問題

在以上兩種解決方案中我們一般選擇向外擴充套件 因為:

向上擴充套件所付出的代價和得到效能的提升不成正比,大多時候提升伺服器一倍的效能需要花費三倍的價格
向外擴充套件也有很多問題,例如:如何協調兩臺伺服器提供一服務,使用者在兩臺伺服器進行輪調時如何儲存其的session資訊

負載均衡或者負載均衡叢集的作用就是將:

向外擴張的伺服器群組組成一個負載均衡叢集,前端通過負載均衡排程器來對使用者請求通過排程演算法合理分發到後端伺服器中,來達到負載均衡的目的

LB叢集常見的解決方案:

硬體:
F5BIG-IP
CitrixNetscaler
A10A10
Array
Redware
軟體:
lvs:LinuxVirtualServer
haproxy
nginx
ats(apachetrafficserver)
perlbal

3、什麼是(HA)高可用叢集

在叢集伺服器架構中,當主伺服器故障時,備份伺服器能夠自動接管主伺服器的工作,並及時切換過去,以實現對使用者的不間斷服務

HA叢集的實現:

keepalived:通過實現vrrp協議來實現地址漂移

4、LVS簡介

LVS(LinuxVirtualServer)是前阿里巴巴首席科學家章文嵩博士在大學期間的一款開源的負載均衡軟體,可實現四層的負載均衡。
首先解釋下下文中出現的各種術語:
Director:負載均衡排程器,負責在前端接受使用者請求根據特定的演算法轉發到後端RealServer
RealServer:後端提供服務的伺服器
VIP:Director接受使用者請求的IP地址
DIP:Director和RealServer聯絡的IP地址
RIP:RealServer的IP地址
CIP:ClientIP,客戶端的IP地址

5、LVS在Linux上的工作過程

工作流程圖:


lvs%E6%9E%B6%E6%9E%84.jpg

LVS其實由兩個元件組成, 在使用者空間的ipvsadm和核心空間的ipvs, ipvs工作在INPUT鏈上, 如果有請求報文被ipvs事先定義,就會將請求報文直接擷取下根據其特定的模型修改請求報文, 再轉發到POSTROUTING鏈上送出TCP/IP協議棧
其報文流經過程如下:

1.當客戶端的請求到達負載均衡器的核心空間時,首先會到達PREROUTING鏈;
2.當核心發現請求資料包的目的地址是本機時,將資料包送往INPUT鏈;
3.LVS由使用者空間的ipvsadm和核心空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當資料包到達INPUT鏈時,首先會被IPVS檢查,如果資料包裡面的目的地址及埠沒有在規則裡面,那麼這條資料包將被放行至使用者空間;
4.如果資料包裡面的目的地址及埠在規則裡面,那麼這條資料報文將被修改目的地址為事先定義好的後端伺服器,並送往POSTROUTING鏈;
5.最後經由POSTROUTING鏈發往後端伺服器。

6、LVS的工作特點:

lvs具有以下特點:
1)ipvs工作於netfilter框架上;
2)規則:
簡單來說就是把ip加埠定義為ipvs叢集服務,ipvs會為此請求定義一個或多個後端服務目標地址未必會改,但是報文
會被強行轉發給後端的伺服器
3)ipvs元件:ipvsadm(使用者空間,用來編寫規則)+ipvs(核心空間);
4)ipvs工作在第四層:
(1)四層交換、四層路由。做第四層轉發。(osi模型中的網路層)
(2)只能基於ip和port轉發,無法在應用層,session級別轉發
(3)不用到達應用層空間,就能轉發
即工作在第四層不能進行7層負載均衡,但基於4層可以不要管上層協議進行負載均衡,只要支援tcp或udp就行。
5)lvs效能很好,但是由於工作於四層,不能到使用者空間,因此不能進行更加精細的控制;在精細控制方面haproxy和Ngnix
可以更好的實現;
6)lvs通常作為總入口,更精細化的切割可能使用haproxy或者Nginx實現

7、在負載均衡中,LVS的實現方式

lvs的型別:
lvs-nat
lvs-dr(directrouting)
lvs-tun(iptunneling)
lvs-fullnat(同時改變請求報文的源IP和目標IP)
		
注意:前三種為標準型別;fullnat為後來新增的型別,核心預設可能不支援;

下面詳細介紹LVS幾種型別的工作模式

lvs-nat:多目標的DNAT:通過將請求報文的目標地址和目標埠修改為挑選出某RS的RIP和PORT來實現;

工作流程圖如下:

lvs-nat.jpg

實現過程說明:

1.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),後面統稱為CIP),目標地址為VIP(負載均衡器前端地址,後面統稱為VIP);
2.負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將客戶端請求報文的目標地址改為了後端伺服器的RIP地址並將報文根據演算法傳送出去;
3.報文送到RealServer後,由於報文的目標地址是自己,所以會響應該請求,並將響應報文返還給LVS。
4.然後lvs將此報文的源地址修改為本機併發送給客戶端。注意:在NAT模式中,RealServer的閘道器必須指向LVS,否則報文無法送達客戶端;
5.NAT模型其實就是一個多路的DNAT,客戶端對VIP進行請求,Director通過事先指定好的排程演算法計算出應該轉發到哪臺RS上,並修改請求報文的目標地址為RIP,通過DIP送往RS.當RS響應客戶端報文給CIP,經過Director時;

Director又會修改源地址為VIP並將響應報文發給客戶端.這段過程對於使用者來說是透明的。

配置注意事項:

(1)RIP和DIP應該使用私網地址,RS的閘道器應該指向DIP;
(2)請求和響應報文都要經由director轉發;極高負載的場景中,Director可能會成為系統瓶頸;
(3)支援埠對映;
(4)VS必須為Linux,RS可以是任意的OS;
(5)RS的RIP與Director的DIP必須在同一IP網路;


lvs-dr:direct routing

通過修改請求報文的MAC地址進行轉發;IP首部不會發生變化(源IP為CIP,目標IP始終為VIP);

流程圖如下:

lvs-dr.jpg


過程說明:

1、客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。
2、負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,並將此包傳送給RS。
3、RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文後,將響應報文通過lo介面送給eth0網絡卡直接傳送給客戶端。
注意:需要設定lo介面的VIP不能響應本地網路內的arp請求。
DR模型是一個較為複雜的模型.DR模型比較詭異,因為VIP在Director和每一個RS上都存在,客戶端對VIP(Director)請求時,Director接收到請求會將請求報文的源MAC地址和目標MAC地址修改為本機DIP所在網絡卡的MAC地址和指定的RS的RIP所在網絡卡的MAC地址,RS接收到請求報文後直接對CIP發出響應報文,而不需要通過Director

配置注意事項:

(1) 由於RealServer和Director都要設定相同的VIP,確保前端路由器將目標IP為VIP的請求報文一定會發送給Director;

解決方案:

靜態繫結:在硬體裝置(交換機)上設定MAC和IP繫結;

禁止RS響應VIP的ARP請求;

(a) arptables;

(b) 修改各RS的核心引數,並把VIP配置在特定的介面上實現禁止其響應;

(2) RS的RIP可以使用私有地址,也可以使用公網地址;

(3) RS跟Director必須在同一物理網路中;

(4) 請求報文必須由Director排程,但響應報文必須不能經由Director;

(5) 不支援埠對映;

(6) 各RS可以使用大多數的OS;


lvs-tun:ip tunneling,ip隧道

工作流程圖:

lvs-tun.jpg工作流程說明:

1、客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。
2、負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包傳送給RS。
3、RS收到請求報文後,會首先拆開第一層封裝,然後發現裡面還有一層IP首部的目標地址是自己lo介面上的VIP,所以會處理次請求報文,並將響應報文通過lo介面送給eth0網絡卡直接傳送給客戶端。
注意:需要設定lo介面的VIP不能在公網上出現。

tun模型原理如下:
TUN模型通過隧道的方式在公網中實現請求報文的轉發,客戶端請求VIP(Director),Director不修改,請求報文的源IP和目標IP,而是在IP首部前附加DIP和對應RIP的地址並轉發到RIP上,RS收到請求報文,本地的介面上也有VIP,遂直接響應報文給CIP。

注意事項:

(1) RIP,DIP,VIP全得是公網地址;

(2) RS的閘道器不能也不可能指向DIP;

(3) 請求報文經由Director排程,但響應報文將直接發給CIP;

(4) 不支援埠對映;

(5) RS的OS必須支援IP隧道功能;


lvs-fullnat:同時改變請求報文的源IP和目標IP

工作流程圖:

1451286204111890.png說明:

FULLNAT實現原理:
FULLNAT是近幾年才出現的,客戶端請求VIP(Director),Director修改請求報文的源地址(DIP)和目標地址(RIP)並轉發給
RS,FULLNAT模型一般是Director和RS處在複雜的內網環境中的實現。
實現FULLNAT模型需要注意的:
1、VIP是公網地址,DIP和RIP是內網地址,但是無需在同一網路中
2、請求報文需要經過Director,響應報文也要通過Director
3、RIP接收到的請求報文的源地址為DIP,目標地址為RIP
4、支援埠對映
5、RS可以是任意的作業系統


轉載於:https://blog.51cto.com/afterdawn/1889033