HAProxy前端
HAProxy是一個特別適用於高可用環境的TCP/HTTP開源的反向代理和負載均衡軟件。在7層負載均衡方面的功能
很強大(支持cookie track,header rewrite等),支持雙機熱備,支持虛擬主機,支持健康檢查(經過patch能夠
支持ECV),同時還提供直觀的監控頁面,能夠清晰實時的監控服務集羣的運行情況。同時支持Linux 2.6內核中
System Epoll,經過簡化系統調用,大幅的提升了網絡I/O性能。web
Haproxy包括如下一些特性:
根據靜態分配的cookie,分配HTTP請求。
分配負載到各個服務器,同時保證服務器經過使用HTTP Cookie實現鏈接保持。
當主服務器宕機時切換到備份服務器。
容許特殊端口的服務監控。
作維護時經過熱配置能夠保證業務的連續性,更加人性化。
添加/修改/刪除HTTP Request和Response頭。
經過特定表達式Block HTTP請求。
根據應用的cookie作鏈接保持。
帶有用戶驗證的詳細的HTML監控報告。
新的1.3版本引入了frontend,backend配置段,frontend根據任意HTTP請求頭內容作規則匹配,而後把請求
定向到相關的backend,經過ACL能夠實現相似與F5的irules的功能。功能很是強大。目前HAProxy支持如下算法
5種負載均衡算法,同時也支持經過weight來實現負載比率的調整和經過cookie來實現鏈接保持。
1. 輪詢 roundrobin
2. 最少鏈接數 Leastconn
3. 根據原IP source
4. 根據URI uri
5. 根據URL裏的參數 url_param數據庫
LVS(Linux Virtual Server)是一個開源的軟件,由畢業於國防科技大學的張文嵩博士於1998年5月創立,
能夠實現Linux下的簡單負載均衡。
在企業的IT集羣應用中,最經常使用的架構除了高可用集羣外,還有負載均衡集羣(Load Balancing)。負載均衡
集羣可實現多臺服務器或應用的流量均衡分配。服務器集羣對外部應用及客戶表現爲一個虛擬的服務器,集羣
內部各服務器平均地處理由外部應用及客戶端所提交的業務,實現服務器之間的負載均衡處理並提供靈活的可
擴展性,當業務壓力增大時,可隨時加入新的服務器以提升集羣的總體性能。負載均衡集羣特別適用於高併發
的網絡應用,如網站、文件服務器、各類要求高併發的Socket處理等。一般負載均衡集羣方案大多經過專用的
硬件——負載均衡器來實現,但此類硬件產品每每價格昂貴。目前在服務器領域千兆網絡已經很是普及,可是
當前中檔的百兆負載均衡器依然動輒近十萬元的高價,使得很多企業望而卻步。
隨着LVS功能的逐漸完善及性能的不斷提升,當前很多硬件負載均衡器就是經過Linux內核結合LVS來實現的。後端
1. 技術簡介瀏覽器
LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具備很好的吞吐率,將請求均衡的轉移到不一樣的服
務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。
整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。爲此,在設計時須要考慮系統的
透明性、可伸縮性、高可用性和易管理性。安全
2. 集羣採用三層結構服務器
負載調度器(load balancer):它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而
客戶認爲服務器是來自一個IP地址(稱之爲虛擬IP地址)。
Load Balancer是整個集羣系統的前端,負責把客戶端請求轉發到Real Server上。
Backup是備份的Load Balancer,當Load Balancer不可用時接替他,成爲實際的Load Balancer。
Load Balancer經過Ldirectord監測個Real Server的健康情況,在Real Server不可用時把它從集羣中剔除,恢復
時從新加入。cookie
服務器池(server pool):是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等。網絡
共享存儲(shared storage):爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,
提供相同的服務。
3. LVS的IP負載均衡
可伸縮網絡服務的幾種結構,它們都須要一個前端的負載調度器(或者多個進行主從備份)。IP負載均衡技術
在負載均衡調度器的實現技術中效率最高。LVS集羣中實現的三種IP負載均衡技術,分別是:
VS/NAT(Virtual Server via Network Address Translation):端口映射NAT,其目標是將一組服務器構成一個
高性能的、高可用的虛擬服務器。由於這種技術容易造成單點故障,從而形成網絡沒法訪問,而且存在帶寬瓶
頸。因此LVS又提供了下面兩種實現。
VS/TUN(Virtual Server via IP Tunneling):經過IP隧道實現虛擬服務。
VS/DR(Virtual Server via Direct Routing):直接路由實現虛擬服務器的方法,負載能力最強,要求真實服務
器直接將結果返回到客戶端。
下面是一個採用VS/DR的拓撲圖。
4. 調度器
調度器是服務器集羣系統的惟一入口點,它能夠採用IP負載均衡技術、基於內容請求分發技術或者二者相結合。
在IP負載均衡技術中,須要服務器池擁有相同的內容提供相同的服務。當客戶端請求到達時,調度器只根據服務
器負載狀況和設定的調度算法從服務器池中選出一個服務器,將該請求轉發到選出的服務器,並記錄這個調度。
當這個請求的其它報文到達時,也會被轉發到前面選出的服務器。
在基於內容請求分發技術中,服務器能夠提供不一樣的服務。當客戶端請求到達時,調度器能夠根據請求的內容
選擇服務器執行請求。由於全部的操做都是在Linux內核空間中完成的,它的調度開銷很小,因此它具備很高的
吞吐率。服務池的節點數是可變的。當整個系統收到的負載超過目前全部節點的處理能力時,能夠在服務器池
中增長服務器來知足不斷增加的請求負載。
對大多數網絡服務來講,請求間不存在很強的相關性,請求能夠在不一樣的節點上並行執行,因此整個系統的性
能基本上能夠隨着服務器池的節點數目增長而線性增加。共享存儲一般是數據庫、網絡文件系統或者分佈式文
件系統。服務器節點須要動態更新的數據通常存儲在數據庫系統中,同時數據庫會保證併發訪問時數據的一致
性。靜態的數據能夠存儲在網絡文件系統中(如NFS/CIFS),但網絡文件系統的伸縮能力有限,通常來講,
NFS/CIFS服務器只能支持3~6個繁忙的服務器節點。對於規模較大的集羣系統,能夠考慮用分佈式文件系統,
如AFS、GFS、Coda和Intermezzo等。分佈式文件系統能夠爲服務器提供共享的存儲區,它們訪問分佈式文件
系統就像訪問本地文件系統同樣,同時分佈式文件系統能夠提供良好的伸縮性和可用性。
5. 分佈式鎖管理器
當不一樣服務器上的應用程序同時讀寫訪問分佈式文件系統上同一資源時,應用程序的訪問衝突須要消解才能使
資源處於一致狀態。這須要一個分佈式鎖管理器(Distributed Lock Manager),它多是分佈式文件系統內
部提供的,也多是外部的。開發者在寫應用程序時,可使用分佈式鎖管理器來保證應用程序在不一樣節點上
併發訪問的一致性。
負載調度器、服務池和共享存儲系統經過高速網絡相鏈接,如100Mbps交換網絡、Myrinet和Gigabit網絡等。
使用高速的網絡,主要爲避免當系統規模擴大時互聯網絡成爲整個系統的瓶頸。
6. 監視器
Graphic Monitor是系統管理員提供整個集羣系統的監視器,它能夠監視系統的狀態。Graphic Monitor是基於
瀏覽器的,因此不管管理員在本地仍是在異地均可以監視系統的情況。爲了安全的緣由,瀏覽器要經過HTTPS
(Secure HTTP)協議和身份認證後,才能進行系統監測,並進行系統的配置和管理。
7. heartbeat
高可用集羣是指一組經過硬件和軟件鏈接起來的獨立計算機,它們在用戶面前表現爲一個單一的系統,這樣的
一組計算機系統內部的一個或者多個節點中止工做,服務會從故障節點切換到正常工做的節點上運行,不會引
起服務中斷。從這個定義能夠看出,集羣必須檢測節點和服務什麼時候失效,什麼時候恢復爲可用。這個任務一般由一
組被稱爲「心跳」的代碼完成。在Linux-HA裏這個功能由一個叫作heartbeat的程序完成。
可用於Load Balancer主機和Backup之間failover的實現。
8. keepalived
keepalived是一個相似於layer3/4/5交換機機制的軟件,也就是咱們平時說的第3層、第4層和第5層交換。它的
做用是檢測web服務器的狀態,若是有一臺web服務器死機,或者工做出現故障,keepalived將檢測到,並將
有故障的web服務器從系統中剔除,當web服務器工做正常後keepalived自動將web服務器加入到服務器集羣
中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
主要用於Real Server健康狀態監測以及Load Balancer主機和Backup之間failover的實現。
10. IPVS
IPVS是LVS集羣系統的核心軟件,安裝在Load Balancer上,把發往Virtual IP的請求轉發到Real Server上。
IPVS的負載均衡機制有三種,就是上文提到的:
VS/NAT(Virtual Server via NAT)
VS/TUN(Virtual Server via IP Tunneling)
VS/DR(Virtual Server via Direct Routing)
IPVS的負載調度算法有十種。
IPVS(IP Virtual Server)是一種高效的Layer-4交換機,它提供負載均衡的功能。當一個鏈接的初始SYN報文
到達時,IPVS就選擇一臺服務器,將報文轉發給它。此後經過檢查發報文的IP和TCP報文頭地址,保證此鏈接
的後繼報文被轉發到相同的服務器。這樣,IPVS沒法檢查到請求的內容在選擇服務器,這就要求後端的服務器
組提供相同的服務,無論請求被髮送到哪個服務器,返回的結果應該是同樣的。可是在有一些應用中後端的
服務器可能功能不一,就要基於內容請求分發,同時基於內容請求分發能夠提升後端服務器上訪問的局部性。
IPVS的具體實現由ipvsadm這個程序來完成,所以判斷一個系統是否具有ipvs,只需查看ipvsadm是否被安裝。
9. 配置
若是LVS負載均衡器只是單臺的,只須要安裝LVS便可。若是LVS服務器是多臺通常須要LVS+keepalived或
LVS+ldirectord+heartbeat來實現LVS負載均衡器的熱備和監控應用服務器的狀態。
Nginx(engine x)是一個高性能的HTTP服務器和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。
Nginx由於它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。
在高鏈接併發的狀況下,Nginx是Apache服務器不錯的代替品。Nginx在美國是作虛擬主機經常使用的軟件平臺之
一。可以支持高達50,000個併發鏈接數的響應,它選擇了epoll and kqueue做爲開發模型。
Nginx採用C進行編寫,它最大的優點在於高負載狀況下內存和CPU的低消耗。
Nginx安裝簡單,配置文件很是簡潔,Bugs不多,啓動很容易,而且幾乎能夠作到7*24不間斷運行,即便運行
數個月也不須要從新啓動。可以在不間斷服務的狀況下進行軟件版本的升級。
目前Nginx使用簡單的輪詢算法,沒法作到基本鏈接數計數的負載均衡。目前中國大陸使用Nginx網站用戶有:新浪、網易、騰訊。Nginx能夠和Apache結合使用,使用Nginx處理靜態請求,並將動態請求反向代理給Apache處理。