Linux集羣(一)-LVS-四種工作模型

       服務器向外部提供服務,當一臺服務器承受過多的壓力,那麼服務可能會產生服務不可用的情況,所以,我們應該讓一臺服務器承受的壓力在合理範圍內,如果一臺服務器無法滿足需求,那麼可以橫向擴展使用多臺服務器分攤這些壓力,這些服務器作爲一個整體對外提供服務,並且分攤壓力時,那麼我們可以稱這些服務器爲"負載均衡集羣"。

       LVS 是 Linux Virtual Server 的簡稱,也就是 Linux 虛擬服務器。現在 LVS 已經是 Linux 標準內核的一部分,從 Linux2.4 內核以後,已經完全內置了 LVS 的各個功能模塊,無需給內核打任何補丁,可以直接使用 LVS 提供的各種功能。LVS在內核中名稱是ipvs,作爲netfilter的模塊存在,管理ipvs的工具爲ipvsadm。

     LVS 是四層負載均衡,也就是說建立在 OSI 模型的第四層——傳輸層之上,傳輸層上有我們熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的負載均衡。因爲 LVS 是四層負載均衡,因此它相對於其它高層負載均衡的解決辦法,比如 DNS 域名輪流解析、應用層負載的調度、客戶端的調度等,它的效率是非常高的。


爲方便後續探討,這裏先說明下幾個名詞


VS: Virtual Server,調度器,負責調度

RS: Real Server,負責真正提供服務,後端服務器

VIP: LVS服務器上的公網IP,即Virtual IP

DIP: LVS服務器上的內網IP,即Director IP

RIP: Real Server上的內網IP

CIP: 客戶端的IP


工作原理:

VS根據請求報文的目標IP目標協議端口將其調度轉發至某RS,根據調度算法來挑選RS。


LVS 的工作模式


NAT :

        SNAT: 修改源地址

        DNAT: 修改目標地址

DR : 修改目標 MAC

TUN : 在原請求IP報文之外新加一個IP首部

FULLNAT: 修改請求報文的源和目標IP


LVS的工作位置

1.png

流入數據包

LVS-NAT模式:

LVS-NAT報文中IP轉換過程

1.png


上圖所示:

1.客戶端的請求會發往LVS主機,此時,客戶端請求報文的源IP爲CIP,目標IP爲LVS的VIP

2.當LVS收到客戶端的請求報文時,會將請求報文中的目標IP修改爲後端某個RealServer的RIP,具體爲哪個RealServer的RIP,取決於LVS使用的具體算法

3.當RealServer收到對應的請求報文時,會發現報文的目標IP就是自己的RIP,於是就會接收報文並 處理後進行響應。響應報文的源IP則爲RIP,目標IP則爲CIP

4.當LVS收到對應的響應報文時,LVS會將響應報文的源IP修改爲VIP,目標IP不變爲CIP,於是響應報文被髮往客戶端。

5.客戶端則會收到響應報文,源IP爲VIP,端口爲80,而LVS相對於客戶端而言,轉換過程是透明的。


優點:集羣中的物理服務器可以使用任何支持TCP/IP操作系統,物理服務器可以分配Internet的保留 私有地址,只有負載均衡器需要一個合法的IP地址。


缺點:擴展性有限。當服務器節點(普通PC服務器)數量增長到20個或更多時,負載均衡器將成爲整個系統的瓶頸,因爲所有的請求包和應答包都需要經過負載均衡器再生。


LVS-NAT的建議:

(1)RIP和DIP建議在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP(中間無其他設備)


(2)請求報文和響應報文都必須經由LVS轉發,LVS易於成爲系統瓶頸。但是也能滿足一般需求

(3)支持端口映射,可修改請求報文的目標PORT

(4)VS必須是Linux系統,RS可以是任意OS系統


LVS-DR模式:

LVS默認模式。直接路由,應用最廣泛,通過爲請求報文重新封裝一個MAC首部進行轉發。

DR 模式下需要 LVS 和 RS 集羣綁定同一個 VIP(RS 通過將 VIP 綁定在 loopback 實現),

請求報文由 LVS 接受,響應報文不經過 LVS,由RealServer(RS)直接返回給用戶。因此,DR 模式具有較好的性能,也是目前大型網站使用最廣泛的一種負載均衡手段。


源MAC是DIP所在的接口的MAC,

目標MAC是調度算法選出的RS的RIP所在接口的MAC地址;

源IP/端口,以及目標IP/端口均保持不變

LVS和各RS都配置有VIP


LVS-DR報文中IP和MAC轉換過程

1.png


上圖所示:

1.客戶端的請求會發往LVS主機,此時,客戶端請求報文的源IP爲CIP,目標IP爲LVS的VIP

2.當LVS收到客戶端的請求報文時,會將請求報文中的源MAC修改爲本機的DIP所在網卡的MAC,把目標MAC修改爲後端某個RealServer的RIP的MAC,具體爲哪個RealServer的RIP,取決於LVS使用的具體算法。其他不作修改。

3.當RealServer收到對應的請求報文時,因爲RealServer會在本機的LO上綁定了VIP的地址,並且會因爲在內核中修改了ARP相關參數從而在同一網絡中同時擁有了與LVS同樣的IP地址,因此在接收到請求報文時會發現報文的目標IP就是自己的VIP,於是就會接收報文並處理後不經過LVS進行響應。響應報文的源IP則爲VIP,目標IP則爲CIP,源MAC地址則爲RS發送數據包的MAC,目標MAC則爲最近的路由MAC。

4.客戶端則會收到響應報文,源IP爲VIP,端口爲80。而LVS相對於客戶端而言,轉換過程是透明的。


優點:負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與LVS-TUN相比,LVS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器。


缺點:要求負載均衡器的網卡必須與物理網卡在一個物理段上。


因爲VIP在同一網絡中同時存在,必須改變RealServer 對APR報文響應規則

方法1:在RS上使用arptables工具

# arptables -A IN -d $VIP -j DROP

# arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP


方法2:在RS上修改內核參數以限制arp通告及應答級別 (推薦)

arp_announce = 2

arp_ignore = 1


LVS-DR的建議:

(1) RealServer的RIP建議使用私網地址。RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文 不會經過VS

(2) LVS和RS要在同一個物理網絡。不能跨地域物理網絡調度。

(3) 請求報文要經由VS,但響應報文不經由VS,而由RealServer直接發往Client

(4) 不支持端口映射(端口不能修改)

(5) RealServer可使用大多數OS系統

(6) VS可以只要一塊網卡,同時配置VIP和DIP,注意路由走向。


LVS-TUN模式:

轉發方式工作,不修改請求報文的IP首部,而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RealServer;RealServer直接響應給客戶端(源IP是VIP,目標IP是CIP)


LVS-TUN報文中IP包頭轉換過程

1.png


上圖所示:

1.客戶端的請求會發往LVS主機,此時,客戶端請求報文的源IP爲CIP,目標IP爲LVS的VIP

2.當LVS收到客戶端的請求報文時,會在原請求報文基礎上再封裝一個新的IP包頭,源IP爲本機的DIP,目標IP爲後端某個RealServer的RIP,具體爲哪個RealServer的RIP,取決於LVS使用的具體算法。其他不作修改。

3.當RealServer收到對應的請求報文時,在接收到請求報文時會發現報文的目標IP就是自己的RIP,於是就會接收報文並處理後不經過LVS進行響應。響應報文的源IP則爲VIP,目標IP則爲CIP。

4.客戶端則會收到響應報文,源IP爲VIP,端口爲80。而LVS相對於客戶端而言,轉換過程是透明的。


優點:負載均衡器只負責將請求包分發給物理服務器,而物理服務器將應答包直接發給用戶。所以,負載均衡器能處理很巨大的請求量,這種方式,一臺負載均衡能爲超過100臺的物理服務器服務,負載均衡器不再是系統的瓶頸。


缺點:這種方式需要所有的服務器支持"IP Tunneling"(IP Encapsulation)協議。


LVS-TUN的建議:

(1) DIP, VIP, RIP都應該是公網地址(或具備跨網絡通訊支持)

(2) RS的網關不能指向DIP

(3) 請求報文要經由VS,但響應不能經由VS

(4) 不支持端口映射

(5) RealServer的OS須支持隧道功能。相對DR模式來講,具備跨地域物理網絡調度。


LVS-FULLNAT模式:

轉發工作。通過同時修改請求報文的源IP地址和目標IP地址進行轉發。


LVS-FULLNAT報文中IP包頭轉換過程

1.png

上圖所示:

1.客戶端的請求會發往LVS主機,此時,客戶端請求報文的源IP爲CIP,目標IP爲LVS的VIP

2.當LVS收到客戶端的請求報文時,會將源IP修改爲本機的DIP,同時將請求報文中的目標IP修改爲後端某個RealServer的RIP,具體爲哪個RealServer的RIP,取決於LVS使用的具體算法

3.當RealServer收到對應的請求報文時,會發現報文的目標IP就是自己的RIP,於是就會接收報文並 處理後進行響應。響應報文的源IP則爲RIP,目標IP則爲DIP

4.當LVS收到對應的響應報文時,LVS會將響應報文的源IP修改爲VIP,目標IP修改爲CIP,於是響應報文被髮往客戶端。

5.客戶端則會收到響應報文,源IP爲VIP,端口爲80,而LVS相對於客戶端而言,轉換過程是透明的。


LVS-FULLNAT的建議:

(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會 指向DIP

(2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但VS還要將其發往Client

(3) 請求和響應報文都經由VS,LVS易於成爲系統瓶頸。但是也能滿足一般需求

(4) 支持端口映射

注意:此類型kernel默認不支持


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章