高併發負載均衡(二)——Nginx 和LVS
在上一篇部落格中介紹到實現負載均衡主要可以通過軟、硬體兩個方面進行,例如硬體上購買RadWare等硬體裝置,或者通過軟體策略實現負載均衡。軟體策略上使用廣泛有Nginx 和LVS
在介紹兩款工具之前,先聊聊負載均衡的應用場景
普通web應用部署到多臺應用伺服器上,客戶端通過訪問應用伺服器傳送請求,最簡單的就是n對1模式,n個客戶端訪問同一個應用伺服器,這種情況當併發量大了,就無法應對,而且,如果只有一臺伺服器時,這個伺服器掛了,那麼對於網站來說是個災難.;解決方案便可以橫向擴充n臺應用伺服器,並且客戶端訪問與應用伺服器中間加上負載均衡配置,負載均衡能實現的效果主要有三個:
1、轉發功能:按照一定的演算法【權重、輪詢】,將客戶端請求轉發到不同應用伺服器上,減輕單個伺服器壓力,提高系統併發量。
2、故障移除:通過心跳檢測的方式,判斷應用伺服器當前是否可以正常工作,如果伺服器期宕掉,自動將請求傳送到其他應用伺服器。
3、恢復新增:如檢測到發生故障的應用伺服器恢復工作,自動將其新增到處理使用者請求隊伍中。
下面接著介紹實現負載均衡的兩款常用方案
一、Nginx
什麼是Nginx?
Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,由俄羅斯的程式設計師Igor Sysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler使用。其特點是佔有記憶體少,併發能力強,中國大陸使用nginx網站使用者有:百度、新浪、網易、騰訊等。
優點:
1、可執行linux,並有windows 移植版
2、在高併發情況下,Nginx 可支援高達50000個併發連線數的響應。
Nginx如何實現負載均衡?
1、Nginx反向代理
Nginx利用自身反向代理功能,在conf配置檔案中新增反向代理地址,以代理伺服器的身份接受客戶端傳送過來的請求,然後將請求轉發給內部網路上的應用伺服器,並將從伺服器上得到的結果返回給客戶端,此時代理伺服器對外就表現為一個伺服器,不過它只負責轉發請求,不負責處理。
2、Nginx轉發策略
Nginx轉發請求可按照排程規則通過輪詢、ip雜湊、URL雜湊、權重等多種方式對應用伺服器做負載均衡,同時還支援後端伺服器的健康檢查,也就是上面講的故障移除和恢復新增功能。
nginx 的 upstream目前支援
Ps.大家不要看這些東西挺蒙,其實就是在Nginx伺服器配置上指定的引數即可實現。例如配置反向代理地址:proxy_pass,配置轉發演算法以及session共享
二、LVS:
什麼是LVS?
Linux Virtual Server,Linux虛擬伺服器,主要使用叢集技術實現和Linux作業系統實現一個高效能、高可用的伺服器虛擬的伺服器集群系統。
LVS主要組成部分為:
負載排程器(load balancer/ Director),它是整個叢集對外面的前端機,負責將客戶的請求傳送到一組伺服器上執行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。簡單理解這個排程器跟Nginx的反向代理服務、DNS的域名解析實現的是同樣功能。對外提供統一虛擬IP,實際使用者訪問的是LVS通過轉發請求到指定伺服器上的應用。
伺服器池(server pool/ Realserver),是一組真正執行客戶請求的伺服器,執行的服務一般有WEB、MAIL、FTP和DNS等。
共享儲存(shared storage),它為伺服器池提供一個共享的儲存區,這樣很容易使得伺服器池擁有相同的內容,提供相同的服務。這也是LVS跟Nginx區別之處:LVS可通過共享儲存結構實現多個應用伺服器間的session共享。
LVS如何實現負載均衡?