大家好,我是IT售前工程師Bernie。
LVS(Linux Virtual Server)是企業中常用的負載均衡方案,是一種基于Linux 虛拟伺服器,也是Linux标準核心的一部分。 它能夠實作高性能、高可用的伺服器叢集,具有良好可靠性、可擴充性和可操作性。
說白了: LVS就是在計算機網絡中,利用Linux虛拟伺服器的作為一種媒介,實作請求的負載均衡政策。
LVS常用的工作模式主要有:NAT模式、DR模式、TUN模式。
首先,明确一些LVS工作中的一些專業術語。
NAT模式
NAT(Network Address Translation)是一種外網和内網位址映射的工作模式。NAT 模式下,資料包的進出都要經過 LVS 的處理,LVS 作為後端伺服器的網關。我們将資料包的發送和響應過程進行拆解,分别說明。
請求過程
- 用戶端發送一個資料包,報頭包含資料、源IP和目的IP。源IP是用戶端PC的IP位址,目的IP是LVS伺服器的IP位址。即:資料的寄件人是用戶端,收件人是lvs伺服器。
- 當lvs伺服器收到資料後,會通過自身的負載均衡政策(輪詢、權重輪詢等)選中了IDC裡面的一台ip位址為RIP的伺服器去處理。
- lvs伺服器會将資料包的目的ip從自己的ip更換為伺服器的ip位址(VIP-->RIP),源ip位址保持不變,将資料包發出。
- 後端伺服器接收到資料包,進行任務處理。
nat模式 請求過程
當伺服器處理完任務後,進入響應的過程。
響應過程
- 後端伺服器将資料包的源ip和目的ip對調,響應時的資料包源ip為RIP,目的ip為CIP。對調後,資料發送回lsv伺服器。
- lvs伺服器接收到資料後,目标ip不變,将源ip更換為自己的ip(VIP),然後将資料傳回給用戶端。
nat模式 響應過程
由此可見,nat模式下lvs伺服器充當了中間商的角色,後端伺服器對用戶端透明(不可見)。這樣的工作模式擴充性不好,因為:當伺服器節點過多時,所有的請求和應答都經過負載均衡器。此時,大量的資料包都交彙在lvs,效率就會變得非常低。
DR模式
相對于nat模式,直接路由(Direct routing)模式做了一些優化,效率更高一些。負載均衡器和後端伺服器使用同一個IP對外服務,但隻有DR對ARP請求進行響應,所有後端伺服器(RS)對源IP的ARP請求保持靜默。
DR模式 請求響應過程
- 用戶端以ARP消息的方式通過網絡發送資料給lvs伺服器和RIP伺服器。由于後端伺服器對ARP消息靜默,是以,隻有lvs伺服器處理該消息;
- lvs伺服器根據排程算法,将資料包分發給衆多後端伺服器中的一台。然後将資料包中的源mac位址保留,目的mac位址改成後端伺服器的mac位址,發給RIP伺服器。
- RS收到資料包後進行處理,由于IP一緻,處理後直接将資料返給用戶端。
TUN模式
隧道(TUN)模式下,負載均衡器把用戶端發來的資料包,封裝一個新的IP頭标記(僅目的IP)發給RS,RS收到後先把資料包的頭解開,還原資料包。RS處理後直接傳回給用戶端,不需要再經過負載均衡器。整個請求、響應的流程跟DR模式一樣的,不多做贅述。
tun模式
需要注意的是: 由于RS需要對負載均衡器發過來的資料包進行還原,一定要支援IP TUNNEL協定才可以。隧道模式的RS節點需要合法IP,這種方式需要所有的伺服器支援"TP Tunneling(IP Encapsulation)協定。
與DR模式相比,TUN模式有IP隧道的開銷,對叢集中的後端伺服器也必要必須支援IP隧道協定。效率上來講,還是DR更勝一籌。
總結
以上是計算機組網中lvs負載均衡常用的NAT、DR、TUN模式。從效率上來講,DR>TUN>NAT。DR模式也是lvs負載均衡中應用最多的一種類型。除此之外還有full-nat模式,原理與nat模式類似,應用較少。
我是IT售前工程師Bernie,歡迎關注!下期見~