一、 前言
當一組服務器在高速的局域網或廣域網中相互連接,其前端部署了一個負責負載調度的調度器(Director)的服務器系統。調度器能將網絡請求無縫調度到真實服務器上(Real server),客戶訪問集群系統提供的網絡服務就像訪問一臺高性能、高可用的服務器一樣。集群系統支持透明地增加或刪除服務器節點,而客戶對此是無感知的。除此之外,集群系統能夠通過檢測節點或服務進程的故障來正確地進行節點的切換,以此達到系統的高可用性。通過此類技術實現的負載均衡,因為是在Linux內核上實現的,因此被稱為Linux vitural server(lvs)。
Lvs集群的類型包括:nat、dr、tun和fullnat四種類型,這四種類型的Lvs集群分別有著不同的特點及應用場景,下面我們就來一起看看它們的區別。
lvs常用術語:
VS:Virtual Server,調度器,負責調度
RS: Real Server,負責真正提供服務,后端服務器
VIP: LVS服務器上的公網IP,即Virtual IP
DIP: LVS服務器上的內網IP,即Director IP
RIP: Real Server上的內網IP
CIP:客戶端的IP
二、lvs集群的使用場景
1、nat
lvs的nat集群會將請求報文中的目標地址和目標端口修改為選定到的真實服務器的Ip和端口,從而實現報文的轉發。
lvs-nat集群應用時由以下幾點注意實現:
1、RIP和DIP必須在同一個Ip網絡中,且應使用私網地址,RS的網關要指向DIP;
2、請求報文和響應報文必須經由Director轉發;
3、支持端口映射,可修改請求報文的目標端口;
4、director必須為Linux系統,RS可以為任意系統;
此集群類型的優點在于RS可支持任意TCP/IP操作系統,且僅需一個合法的公網Ip即可部署。但是其缺點為當集群擴展到一定程度后,Director容易成為整個集群系統的瓶頸。
上圖為lvs-nat的常見的使用場景,其工作流程如下:
1、客戶端的請求發往Director 的VIP。
2、Director發到客戶端請求報文后,將報文中的目標Ip修改為集群中的選定的RIP,目標端口80也修改成8080,然后將請求報文發往RS。
3、當RS收到請求報文后,在檢查報文的目標IP為自己的RIP后,會接受報文并進行處理響應。響應的源Ip為RIP,目標IP為CIP,端口不變。
4、Director收到RS的響應報文,修改響應報文的源IP為VIP,端口為80,然后轉發給客戶端。
5、客戶端接受響應報文,其源IP為VIP,端口為80,整個過程對于客戶端來說是透明無感知的。
2、dr
lvs-dr集群是Lvs的默認模式,又稱為Direct Routing,直接路由模式。通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變。
在DR 模式下需要在 Director 和 RS 集群綁定同一個 VIP(RS 通過將 VIP 綁定在 loopback 實現)。由于在VIP在同一個網絡中的多臺服務器上都需要配置,因此必須對RS的ARP響應報文規則進行修改,其方式有三種:
(a) 在前端網關做靜態綁定;
(b) 在RS上使用arptables工具;
# arptables -A IN -d $VIP -j DROP
# arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
(c) 在RS上修改內核參數以限制arp通告及應答級別;
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
總的來說,DR模式在部署時有以下幾點需要注意的:
1、確保前端路由器將目標Ip為VIP的請求報文發往director;
2、RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;
3、RS跟Director要在同一個物理網絡;
4、請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;
5、dr模式不支持端口映射;
lvs-dr模式的優點在于:Director只是分發請求,應答包通過單獨的路由方法返回給客戶端。與Lvs-tun相比,Lvs-dr這種實現方式不需要隧道結構,因此可以使用大多數操作系統做為物理服務器。缺點在于要求負載均衡器的網卡必須與物理網卡在一個物理段上。
上圖為lvs-dr的常見的使用場景,其工作流程如下:
1、客戶端的請求會發往Director,此時,客戶端請求報文的源Ip為CIP,目標Ip為Director的VIP。
2、當Director接受到客戶端的請求報文后,Director會在請求報文外封裝一個MAC首部,其源MAC為Director接口的MAC地址,目標MAC為選定RS的MAC地址;
3、當RS收到Director轉發過來的請求報文后,檢查發現請求報文的目標Ip為本地環回接口上配置的VIP,因此會接受報文進行響應處理。另外由于對ARP響應規則做了修改,因此RS不會把響應報文響應給director ,而是響應給GW;
4、客戶端接收響應報文,完成通信。
3、tun
轉發方式工作,不修改請求報文的IP首部,而在源IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RealServer,RealServer直接響應給客戶端(源IP是VIP,目標IP是CIP),此模式的注意要點:
(1) DIP, VIP, RIP都應該是公網地址;
(2) RS的網關不能,也不可能指向DIP;
(3) 請求報文要經由Director,但響應不能經由Director;
(4) 不支持端口映射;
(5) RS的OS得支持隧道功能;
lvs-tun模式的優先在于Director只負責將請求包分配給對應的RS,而響應則由RS自己直接應答給客戶端,因此director不再是瓶頸。但其缺點在于需要每個服務器都支持Ip tunnel協議。
4、fullnat
lvs-fullnat模式,即通過同時修改請求報文的源IP地址和目標IP地址進行轉發的模式。此類型的模式,默認Kernel不支持。
此模式的注意要點為:
(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;
(2) RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Director還要將其發往Client;
(3) 請求和響應報文都經由Director;
(4) 支持端口映射;
如上圖所示:
1.客戶端的請求會發往Director,此時,客戶端請求報文的源IP為CIP,目標IP為Director的VIP
2.當Director收到客戶端的請求報文時,會將源IP修改為本機的DIP,同時將請求報文中的目標IP修改為后端某個RS的RIP,具體為哪個RS的RIP,取決于LVS使用的具體算法
3.當RS收到對應的請求報文時,會發現報文的目標IP就是自己的RIP,于是就會接收報文并 處理后進行響應。響應報文的源IP則為RIP,目標IP則為DIP
4.當Director收到對應的響應報文時,Director會將響應報文的源IP修改為VIP,目標IP修改為CIP,于是響應報文被發往客戶端。
5.客戶端則會收到響應報文,源IP為VIP,端口為80,而LVS相對于客戶端而言,轉換過程是透明的。