天天看點

DNS負載均衡與NGINX負載均衡政策

負載均衡是指的是把請求均勻的分攤到多個伺服器上處理。一般常見的負載均衡有兩種:①用戶端與反向代理伺服器之間的DNS負載均衡②反向代理伺服器與應用伺服器之間的負載均衡(這種負載均衡有很多,可以是weblogic的負載均衡,可以是Apache+Tomcat負載均衡,也可以是nginx負載均衡,這裡隻讨論nginx負載均衡)。

負載均衡的關鍵在于如何使請求均勻的分攤到伺服器上。這裡考量均勻不僅僅隻的是請求數量上的一緻,還有伺服器壓力的平均。如何均勻的分攤,取決于所選的負載均衡政策。

先說DNS負載均衡(GSLB)

dns負載均衡是通過DNS伺服器實作的,主要用于把請求均勻的分布到nginx伺服器上。其實真是情況中可能是用來根據地域區分請求。但是一個地域中的請求還算需要均勻的配置設定到nginx伺服器上的。

有兩個缺點:一個是無法區分服務是否挂掉,即時某個NGINX伺服器挂掉了,DNS仍然會配置設定。另一個是DNS緩存的問題,使用者通路網站,網站域名被DNS伺服器解析為某個IP。這個IP一般情況都會在用戶端本地進行緩存,短時間内下次再通路這個域名,會直接從緩存中拿,無法達到真正的均勻,但這對伺服器影響不算太大。重要的請求個數無法真正的做到均衡,比如每個Nginx伺服器拿到100個請求,但是所有的耗時大請求都集中到某一台伺服器中,那麼這個伺服器壓力将會很大。其他的會比較空閑。

Nginx負載均衡

nginx是目前流行的,優秀的反向代理伺服器(其實他不僅僅是反向代理伺服器,還是web伺服器,也可以是郵件代理伺服器,感謝俄羅斯人的智慧)。nginx作為反向代理伺服器,主要負責把請求均勻的分攤到應用伺服器中。為了達到均勻,Nginx有五種負載均衡政策。

1.輪詢

請求依次輪流往每個應用伺服器上進行配置設定,配置設定政策比較簡單。

缺點:不均勻,可能會出現,某些伺服器接受的請求較重,負載壓力重,有些負荷小,不可控。另外伺服器之間需要進行session同步。

2.權重輪詢

在輪詢的基礎上給每個應用伺服器一定的權重,比如三台伺服器,權重設定為 0.4:0.4:0.2。來到10個請求(序号1到10),那麼根據輪詢以及權重,序号1、4、 6、 9的請求會打到 第一台伺服器上,序号 2、 5 、7 、10 的請求會打到第二台伺服器上,剩餘序号3 、 8的 請求打到第三台伺服器上。

優點:可以根據情況進行調整。可控,仍然需要進行session同步。

3.IP-hash

優點:無需進行session同步,固定IP會固定通路一台伺服器。

缺點:惡意攻擊,會造成某台伺服器壓垮。提供的服務不同,面向的地區不同,IP可能會出現集中,造成不均勻,不可控。

4.fair

這種相當于自适應,會根據伺服器處理請求的速度進行負載均衡配置設定。處理請求最早結束的,拿到下一個請求。看上去是不是很好。但是一般都不使用,說是考慮到網絡不穩定因素。還有待研究。這種也需要進行session同步。

5.URL-hash

這種是根據URL進行hash,這樣某些請求永遠打某台伺服器。利于利用伺服器的緩存,但是可能由于URL的哈希值分布不均勻,以及業務側重造成某些伺服器壓力大,某些負荷低。這種也需要進行session同步。

目前比較流行的配置是使用第二種進行配置,但是實際生産中還是需要根據業務特點進行配置,每種政策都具有每種政策的優缺點。