1. 程式人生 > >主流負載均衡器比較

主流負載均衡器比較

lvs

IP負載均衡服務是工作在網路層(修改IP)和傳輸層(修改埠,第四層),比起工作在應用層(第七層)效能要高出非常多。常見的負載方式是LVS和IPVS(IP Virtual Server)

LVS (Linux Virtual Server),它是一種叢集技術。

1、組成部分

(1)Load balancer/Director(負載排程器),它是整個叢集對外面的前端機,負責將客戶的請求傳送到一組伺服器上執行,而客戶認為服務是來自一個IP地址(我們可稱為虛擬IP地址)上的。

(2)server pool/realserver(伺服器池),是一組真正執行客戶請求的伺服器。

(3)shared storage(共享儲存),它為伺服器池提供一個共享的儲存區。

2、lvs負載均衡方式

(1)vs/nat( virtual server via network address translation)

最簡單的方式,所有的RealServer只需將自己的閘道器指向Director即可。客戶端可以是任意作業系統,但此方式下,一個Director能夠帶動的RealServer比較有限。Director也可以兼為一臺RealServer。

(2)vs/tun(virtual server via ip tunneling)

IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的資料報文能被封裝和轉發到另一個IP地址。IP隧道技術亦稱為IP封裝技術。

(3)vs/dr(virtual server via direct routing)

這種方式是通過改寫請求報文中的mac地址部分來實現的。

nginx

正向代理用於保護和限制真實的客戶端,從結構上來看,客戶端和代理伺服器可以劃為組成一部分,而反向代理一般用於web服務提供方提供保護,從結構上看,代理伺服器和外網資源組成一部分。

反向代理服務的核心主要是轉發HTTP請求,因為它工作在HTTP層(應用層),也就是網路七層結構中的第七層,因此敢被稱為“七層負載均衡”。可以做反向代理的軟體很多,比較常見的一種是nginx。

nginx可以自由定製轉發策略,分配伺服器流量的權重等。反向代理中,常見的一個問題,就是同一個登入使用者的請求,無法保證一定分配到相同的web機器上,會導制無法找到session的問題。

解決方案:

1、配置轉發規則,讓同一個使用者的請求一定落到同一臺機器上(通過分析cookie),複雜的轉發規則將會消耗更的的cpu,也增加了代理伺服器的負擔。

2、將session這類的資訊,專門用某個獨立服務來儲存,例如redis/memchache,這個方案是比較推薦的。

這種負載均衡的實現的部署非常簡單,而且效能表現也比較好。但是,它有“單點故障”的問題。而且,到了後期web伺服器繼續增加,它本身可能成為系統的瓶頸。

所謂的單點故障是,某臺節點伺服器掛了,但是nginx仍然會可能選中這個出故障的機器,然後就一直連線著。

dns

一個域名是可以配置成多個對應IP的,因此,dns也就可以作為負載均衡服務,這種負載均衡策略,配置簡單,效能極佳,但是,不能自由定義規則,而且,變更被對映的Ip或者機器故障時很麻煩,還存在dns生效延遲的問題。

在同一個域名對映多ip的基礎上更進一步,通過gslb(global server load balance)規則對映域名iip,一般情況況下都是按照地理位置,將離使用者近的ip返回給使用者,減少網路傳輸中的路由節點之間的跳躍消耗。