想要高可用?你需要了解哪些負載均衡架構?
共 5579字,需瀏覽 12分鐘
·
2024-06-18 21:20
當前大多數的互聯網系統都使用了服務器集群技術,集群是將相同服務部署在多臺服務器上構成一個集群整體對外提供服務,這些集群可以是 Web 應用服務器集群,也可以是數據庫服務器集群,還可以是分布式緩存服務器集群等等。
LVS、Nginx、HAProxy 是目前使用最廣泛的三種軟件負載均衡軟件。
目前關于網站架構一般比較合理流行的架構方案:Web 前端采用 Nginx/HAProxy+Keepalived 作負載均衡器;后端采用 MySQ L數據庫一主多從和讀寫分離,采用 LVS+Keepalived 的架構。
LVS
LVS 是 Linux Virtual Server 的簡稱,也就是 Linux 虛擬服務器?,F在 LVS 已經是 Linux 標準內核的一部分,從 Linux2.4 內核以后,已經完全內置了 LVS 的各個功能模塊,無需給內核打任何補丁,可以直接使用 LVS 提供的各種功能。
LVS 自從1998年開始,發(fā)展到現在已經是一個比較成熟的技術項目了。
1 LVS的體系結構
LVS 架設的服務器集群系統有三個部分組成:
(1) 最前端的負載均衡層,用 Load Balancer 表示。
(2) 中間的服務器集群層,用 Server Array 表示。
(3) 最底端的數據共享存儲層,用 Shared Storage 表示。
2 LVS 負載均衡機制
所謂四層負載均衡 ,也就是主要通過報文中的目標地址和端口。七層負載均衡 ,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容。
LVS 的轉發(fā)主要通過修改 IP 地址(NAT 模式,分為源地址修改 SNAT 和目標地址修改 DNAT)、修改目標 MAC(DR 模式)來實現。
3 NAT 模式:網絡地址轉換
4 DR 模式:直接路由
5 LVS的優(yōu)點
抗負載能力強、是工作在傳輸層上僅作分發(fā)之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的,對內存和 cpu 資源消耗比較低。
配置性比較低,這是一個缺點也是一個優(yōu)點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。
工作穩(wěn)定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如 LVS+Keepalived。
無流量,LVS 只分發(fā)請求,而流量并不從它本身出去,這點保證了均衡器 IO 的性能不會受到大流量的影響。
-
應用范圍比較廣,因為 LVS 工作在傳輸層,所以它幾乎可以對所有應用做負載均衡,包括 http、數據庫、在線聊天室等等。
6 LVS的缺點
-
軟件本身不支持正則表達式處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是 Nginx、HAProxy+Keepalived 的優(yōu)勢所在。 -
如果是網站應用比較龐大的話,LVS/DR+Keepalived 實施起來就比較復雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
Nginx
1 Nignx 的架構設計
2 Nginx 負載均衡
Nginx 負載均衡主要是對七層網絡通信模型中的第七層應用層上的 http、https 進行支持。
Nginx 實現負載均衡的分配策略有很多,Nginx 的 upstream 目前支持以下幾種方式:
-
輪詢(默認):每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除。 -
weight:指定輪詢幾率,weight 和訪問比率成正比,用于后端服務器性能不均的情況。 -
ip_hash:每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決 session 的問題。 -
fair(第三方):按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配。 url_hash(第三方):按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同一個后端服務器,后端服務器為緩存時比較有效。
3 Nginx 的優(yōu)點
-
跨平臺:Nginx 可以在大多數 Unix like OS編譯運行,而且也有 Windows 的移植版本 -
配置異常簡單:非常容易上手。配置風格跟程序開發(fā)一樣,神一般的配置 -
非阻塞、高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接,在實際生產環(huán)境中跑到2~3萬并發(fā)連接數 -
事件驅動:通信機制采用 epoll 模型,支持更大的并發(fā)連接 -
Master/Worker 結構:一個 master 進程,生成一個或多個 worker 進程 -
內存消耗?。?/span>處理大并發(fā)的請求內存消耗非常小。在3萬并發(fā)連接下,開啟的10個 Nginx 進程才消耗150M 內存(15M*10=150M) -
內置的健康檢查功能:如果 Nginx 代理的后端的某臺 Web 服務器宕機了,不會影響前端訪問 -
節(jié)省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭 穩(wěn)定性高:用于反向代理,宕機的概率微乎其微
4 Nginx 的缺點
-
Nginx 僅能支 持http、https 和 Email 協議,這樣就在適用范圍上面小些,這個是它的缺點。 對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過 ur l來檢測。
不支持 Session 的直接保持,但能通過 ip_hash 來解決。
HAProxy
HAProxy 支持兩種代理模式 TCP(四層)和HTTP(七層),也是支持虛擬主機的。
HAProxy 的優(yōu)點能夠補充 Nginx 的一些缺點,比如支持 Session 的保持,Cookie 的引導;同時支持通過獲取指定的 url 來檢測后端服務器的狀態(tài)。
HAProxy 跟 LVS 類似,本身就只是一款負載均衡軟件;單純從效率上來講 HAProxy 會比 Nginx 有更出色的負載均衡速度,在并發(fā)處理上也是優(yōu)于 Nginx 的。
HAProxy 支持 TCP 協議的負載均衡轉發(fā),可以對 MySQL 讀進行負載均衡,對后端的 MySQL 節(jié)點進行檢測和負載均衡,大家可以用 LVS+Keepalived 對 MySQL 主從做負載均衡。
HAProxy 負載均衡策略非常多:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)。
Reference:
https://zhongwuzw.github.io
http://www.importnew.com/11229.html
http://edisonchou.cnblogs.com
