Linux LVS Nginx HAProxy 優缺點

Dus發表於2015-02-24

說明:以下內容參考了撫琴煮酒的《構建高可用Linux伺服器》第六章內容.

搭建負載均衡高可用環境相對簡單,主要是要理解其中原理。此文描述了三種負載均衡器的優缺點,以便在實際的生產應用中,按需求取捨。


目前,線上上環境中應用較多的負載均衡器硬體有F5 BIG-IP,軟體有LVS,Nginx及HAProxy,高可用軟體有Heartbeat、Keepalived,成熟的架構有LVS+Keepalived、Nginx+Keepalived、HAProxy+keepalived及DRBD+Heartbeat.

三種負載均衡器的優缺點說明如下:

LVS的優點:
1、抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體裡的效能最強的;無流量,同時保證了均衡器IO的效能不會受到大流量的影響;
2、工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
3、應用範圍比較廣,可以對所有應用做負載均衡;
4、配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的機率;
LVS的缺點:
1、軟體本身不支援正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。
2、如果網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
#############################################################

 

1. LVS/DR如何處理請求報文的,會修改IP包內容嗎?

1.1 vs/dr本身不會關心IP層以上的資訊,即使是埠號也是tcp/ip協議棧去判斷是否正確,vs/dr本身主要做這麼幾個事:

1)接收client的請求,根據你設定的負載均衡演算法選取一臺realserver的ip;

2)以選取的這個ip對應的mac地址作為目標mac,然後重新將IP包封裝成幀轉發給這臺RS;

3)在hash table中記錄連線資訊。

vs/dr做的事情很少,也很簡單,所以它的效率很高,不比硬體負載均衡裝置差多少。

資料包、資料幀的大致流向是這樣的:client --> VS --> RS --> client

1.2 前面已作了回答,vs/dr不會修改IP包的內容.

2. RealServer為什麼要在lo介面上配置VIP?在出口網路卡上配置VIP可以嗎?

2.1 既然要讓RS能夠處理目標地址為vip的IP包,首先必須要讓RS能接收到這個包。

在lo上配置vip能夠完成接收包並將結果返回client。

2.2 答案是不可以將VIP設定在出口網路卡上,否則會響應客戶端的arp request,造成client/gateway arp table紊亂,以至於整個load balance都不能正常工作。

3. RealServer為什麼要抑制arp幀?

這個問題在上一問題中已經作了說明,這裡結合實施命令進一步闡述。我們在具體實施部署的時候都會作如下調整:

       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

我相信很多人都不會弄懂它們的作用是什麼,只知道一定得有。我這裡也不打算拿出來詳細討論,只是作幾點說明,就當是補充吧。

3.1

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

這兩條是可以不用的,因為arp對邏輯介面沒有意義。

3.2 如果你的RS的外部網路介面是eth0,那麼

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

其實真正要執行的是:

echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce

所以我個人建議把上面兩條也加到你的指令碼里去,因為萬一系統裡上面兩條預設的值不是0,那有可能是會出問題滴。

4. LVS/DR load balancer(director)與RS為什麼要在同一網段中?

從第一個問題中大家應該明白vs/dr是如何將請求轉發給RS的了吧?它是在資料鏈路層來實現的,所以director必須和RS在同一網段裡面。

5. 為什麼director上lo介面除了VIP另外還要在eth0配一個ip(即DIP)?

5.1 如果是用了keepalived等工具做HA或者Load Balance,則在健康檢查時需要用到DIP。

5.2 沒有健康檢查機制的HA或者Load Balance則沒有存在的實際意義。

6. LVS/DR ip_forward需要開啟嗎?

不需要。因為director跟realserver是同一個網段,無需開啟轉發。

7. director的vip的netmask一定要是255.255.255.255嗎?

lvs/dr裡,director的vip的netmask 沒必要設定為255.255.255.255,也不需要再去

route add -host $VIP dev eth0:0

director的vip本來就是要像正常的ip地址一樣對外通告的,不要搞得這麼特殊.

8. LVS/DR如何進行tcp的三次握手?

 

#####################################################################

 


Nginx的優點:
1、工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;
2、Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
3、Nginx安裝和配置比較簡單,測試起來比較方便;
4、可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的併發量;
5、Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;
6、Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高併發方面相對apache有優勢;
7、Nginx現在作為Web反向加速快取越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作為反向代理加速器;
Nginx的缺點:
1、Nginx不支援url來檢測。
2、Nginx僅能支援http和Email,這個它的弱勢。
3、Nginx的Session的保持,Cookie的引導能力相對欠缺。

HAProxy的優點:
1、HAProxy是支援虛擬主機的,可以工作在4、7層(支援多網段);
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
3、支援url檢測後端的伺服器;
4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟體;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的;
5、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時效能不如LVS;
6、HAProxy的演算法較多,達到8種;

相關文章