高併發負載均衡 nginx與lvs

2021-09-25 11:55:15 字數 4006 閱讀 4166

客戶端通過企業防火牆傳送請求

伺服器通過訪問資料庫進行互動,同樣高併發大資料會涉及到資料庫處理高併發的方案

另外會新增多台伺服器用作快取、訊息處理等

1、高併發一般會發生在下面兩處

負載均衡處 

資料庫高併發;

2、高併發初期解決方案

應對高併發,解決方案大多從伺服器級別和應用程式級別【硬體和軟體】兩個方向進行

第乙個方向:增大伺服器的cpu,增加記憶體,或者直接購買高效能伺服器。但隨著業務的不斷增加,伺服器效能也達到瓶頸。

3種利用負載均衡解決高併發訪問的方案

簡單理解:domain name system,網域名稱系統是網際網路上作為網域名稱和ip位址相互對映的乙個分布式資料庫,能夠使使用者更方便的訪問網際網路。例如我們將程式發布到192.168.55.145 和144兩台伺服器上,通過dns可以設定乙個統一的訪問入口,如www.max1209.com對這兩台伺服器上的服務進行訪問。使用者直接訪問www.max1209.com主機名而不需記住機器ip,通過主機名,最終得到該主機名進行網域名稱解析得到對應的ip位址進行訪問。

在dns伺服器中,可以為多個不同的ip配置同乙個名字,這個資料被傳送給其他名字伺服器,而最終查詢這個名字的客戶機將在解析這個名字時隨機使用其中乙個位址。因此,對於同乙個名字,不同的客戶機會得到不同的位址,因此不同的客戶訪問的也就是不同位址的web伺服器。

簡單說,也就是乙個外觀,給部署了同乙個**的n多台伺服器設定同乙個名字,不同地區或者不同特點的使用者訪問同乙個名字,實際接收客戶請求的是外觀裡的不同ip的伺服器,從而達到負載均衡的目的。

同時面對更高訪問量需求,dns可以以設定成樹狀,多個dns伺服器將請求分發給下乙個dns伺服器,n層解析之後再訪問到應用伺服器,這樣就可以增加應用伺服器的個數,應對更大併發資料請求。

但使用dns負載均衡的時候,如果伺服器發生故障,dns繼續把請求傳送給故障機器,一直到把故障伺服器從dns中移走為止,這樣使用者就只能等到dns連線超時後才能訪問到目標**。

解決方案便可以橫向擴充n臺應用伺服器,並且客戶端訪問與應用伺服器中間加上負載均衡配置,負載均衡能實現的效果主要有三個:

**功能:按照一定的演算法【權重、輪詢】,將客戶端請求**到不同應用伺服器上,減輕單個伺服器壓力,提高系統併發量。

故障移除:通過心跳檢測的方式,判斷應用伺服器當前是否可以正常工作,如果伺服器期宕掉,自動將請求傳送到其他應用伺服器。

恢復新增:如檢測到發生故障的應用伺服器恢復工作,自動將其新增到處理使用者請求隊伍中。

1、nginx應用

2、nginx的優點

可以執行在多個平台:linux、windows等

在高併發情況下,nginx 可支援高達50000個併發連線數的響應。

1、nginx反向**

nginx利用自身反向**功能,在conf配置檔案中新增反向**位址,以**伺服器的身份接受客戶端傳送過來的請求,然後將請求**給內部網路上的應用伺服器,並將從伺服器上得到的結果返回給客戶端,此時**伺服器對外就表現為乙個伺服器,不過它只負責**請求,不負責處理。

2、nginx**策略:upstream目前支援的分配演算法

nginx**請求可按照排程規則通過輪詢、ip雜湊、url雜湊、權重等多種方式對應用伺服器做負載均衡,同時還支援後端伺服器的健康檢查,也就是上面講的故障移除和恢復新增功能。

1、輪詢(預設)       

每個請求按時間順序逐一分配到不同的應用伺服器,如果應用伺服器down掉,能自動剔除。

2、權重   

通過配置權重,指定輪詢機率,權重和訪問比率成正比,用於應用伺服器效能不均的情況。 

3、ip_雜湊演算法

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問乙個應用伺服器,可以解決session共享的問題。

三、配置nginx的負載均衡與分發策略:upstream配置

擴充套件知識點:nginx配置4層負載

總結:

預設支援七層****:基於http;--with-stream為四層****:基於tcp,udp;

nginx tcp負載均衡原理上和lvs等是一致的,工作在更為底層,效能會高於原來http負載均衡不少。但是,不會比lvs更為出色,lvs被置於核心模組,而nginx工作在使用者態,而且,nginx相對比較重。

1、通過在upstream引數中新增的應用伺服器ip後新增指定引數即可實現

upstream tomcatserver1    

server

}

通過以上配置,便可以實現,在訪問8080.max.com這個**時,由於配置了proxy_pass位址,所有請求都會先通過nginx反向**伺服器,在伺服器將請求**給目的主機時,讀取upstream為 tomcatsever1的位址,讀取分發策略,配置tomcat1權重為3,所以nginx會將大部分請求傳送給49伺服器上的tomcat1,也就是8080埠;較少部分給tomcat2來實現有條件的負載均衡,當然這個條件就是伺服器1、2的硬體指數處理請求能力。 

2、upstream深入配置

upstream myserver
1、down

表示單前的server暫時不參與負載

2、weight

預設為1.weight越大,負載的權重就越大。

3、max_fails

允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤

4、fail_timeout

max_fails 次失敗後,暫停的時間。

5、backup

其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。

除了要實現**的高可用,也就是提供n多台伺服器用於發布相同的服務,新增負載均衡伺服器分發請求以保證在高併發下各台伺服器能相對飽和的處理請求。同樣,負載均衡伺服器也需要高可用,以防如果負載均衡伺服器掛掉了,後面的應用伺服器也紊亂無法工作。

實現高可用的方案:新增冗餘。新增n臺nginx伺服器以避免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用

1、什麼是lvs

linux virtual server,linux虛擬伺服器,主要使用集群技術實現和linux作業系統實現乙個高效能、高可用的伺服器虛擬的伺服器集群系統。

2、lvs主要組成部分

1、負載排程器(load balancer/ director)

它是整個集群對外面的前端機,負責將客戶的請求傳送到一組伺服器上執行,而客戶認為服務是來自乙個ip位址(我們可稱之為虛擬ip位址)上的。簡單理解這個排程器跟nginx的反向**服務、dns的網域名稱解析實現的是同樣功能。對外提供統一虛擬ip,實際使用者訪問的是lvs通過**請求到指定伺服器上的應用。

2、伺服器池(server pool/ realserver)

一組真正執行客戶請求的伺服器,執行的服務一般有web、mail、ftp和dns等。

3、共享儲存(shared storage)

它為伺服器池提供乙個共享的儲存區,這樣很容易使得伺服器池擁有相同的內容,提供相同的服務。這也是lvs跟nginx區別之處:lvs可通過共享儲存結構實現多個應用伺服器間的session共享。

3、lvs如何實現負載均衡

lvs主要通過ip負載均衡技術vs/nat、vs/tun、vs/dr實現負載均衡。簡單介紹第乙個vs/nat,它是一種最簡單的方式,所有的realserver只需要將自己的閘道器指向director即可。客戶端可以是任意作業系統,但此方式下,乙個director能夠帶動的realserver比較有限。在vs/nat的方式下,director也可以兼為一台realserver。

Nginx搭建負載均衡實現高併發

有的時候我們部署的專案併發人數一旦增加,單體專案很容易掛掉,不是我們的伺服器配置不夠,因為每乙個 tomcat 的能力是有限的,導致了拖慢訪問速度,這個時候我們就可以使用負載均衡 負載均衡建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬 增加吞吐量 加強網路資料處...

Django 高併發負載均衡

當一台伺服器的效能達到極限時,我們可以使用伺服器集群來提高 的整體效能。那麼,在伺服器集群中,需要有一台伺服器充當排程者的角色,使用者的所有請求都會首先由它接收,排程者再根據每台伺服器的負載情況將請求分配給某一台後端伺服器去處理。那麼在這個過程中,排程者如何合理分配任務,保證所有後端伺服器都將效能充...

04 高併發負載均衡 LVS

路由器 三層,只關心ip和路由表 lvs伺服器 四層,只關心port,狀態 nginx 七層,只關心socket對應關係 dip rip client的資料報到rip上 隱藏vip cip動態排程方法 預設方法 wlc 修改 e 刪除 d t u f service address ipvsadm ...