摘要:另一種負(fù)載均衡策略是最少連接。當(dāng)使用最少連接負(fù)載均衡策略時(shí),會(huì)把新請(qǐng)求分發(fā)給不太忙的服務(wù)器,從而避免分發(fā)過多的請(qǐng)求給忙碌的服務(wù)器造成過載。另外,還有很多的命令以及參數(shù)可以控制的負(fù)載均衡,例如。使用做負(fù)載均衡
Introduction
負(fù)載均衡一般被用來優(yōu)化資源利用率、最大化吞吐量、降低延遲和容錯(cuò)配置。
Nginx 可以作為一種十分有效的 HTTP 負(fù)載均衡工具來使用,通過 nginx 的負(fù)載均衡分發(fā)流量到不同的應(yīng)用服務(wù)器,可以提升 web 應(yīng)用的性能、伸展性和可靠性。
Load balancing methodsNginx 支持下面幾種負(fù)載均衡策略:
round-robin(輪詢) — 根據(jù)輪詢分發(fā)請(qǐng)求到不同的服務(wù)器
least-connected(最少連接) — 將最新請(qǐng)求分發(fā)到活動(dòng)連接最少的服務(wù)器
ip-hash(ip 哈希) — 用一個(gè)哈希函數(shù)來決定最新請(qǐng)求應(yīng)該被分發(fā)到哪一個(gè)服務(wù)器(基于客戶端的 ip).
舉個(gè)栗子
最簡(jiǎn)單的 nginx 負(fù)載均衡配置看起來像這樣:
http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
在上面的例子中,有三個(gè)一樣的應(yīng)用跑在 srv1-srv3 服務(wù)器上。當(dāng)我們沒有配置任何負(fù)載均衡策略的時(shí)候,nginx 會(huì)采用默認(rèn)的負(fù)載均衡策略——輪詢。所有的請(qǐng)求都被代理到 myapp1 服務(wù)器群,然后 nginx 根據(jù) HTTP 負(fù)載均衡分發(fā)請(qǐng)求。
Nginx 反向代理包括對(duì) HTTP, HTTPS, FastCGI, uwsgi, SCGI, and memcached 的負(fù)載均衡策略。
如果想要配置 HTTPS 的負(fù)載均衡,只需要使用 “https” 協(xié)議就可以了。
當(dāng)設(shè)置 FastCGI, uwsgi, SCGI, or memcached 的負(fù)載均衡策略時(shí),只需要使用分別使用 fastcgi_pass , uwsgi_pass , scgi_pass , and memcached_pass 指令就可以了。
Least connected load balancing另一種負(fù)載均衡策略是最少連接。當(dāng)一些連接完成所需時(shí)間更長(zhǎng)時(shí),使用最少連接策略可以更公平地控制均衡負(fù)載。
當(dāng)使用最少連接負(fù)載均衡策略時(shí),nginx 會(huì)把新請(qǐng)求分發(fā)給不太忙的服務(wù)器,從而避免分發(fā)過多的請(qǐng)求給忙碌的服務(wù)器造成過載。
只要把 least_conn 指令配置成服務(wù)器群配置的一部分 nginx 就會(huì)采用最少連接負(fù)載均衡策略:
upstream myapp1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }Session persistence
值得注意的是,輪詢和最少連接負(fù)載均衡可能會(huì)把來自同一個(gè)客戶端的請(qǐng)求分發(fā)到不同的服務(wù)器。它們不保證同一個(gè)客戶端的請(qǐng)求會(huì)分發(fā)到同樣的服務(wù)器上。
如果需要把同一個(gè)客戶端請(qǐng)求分發(fā)到同樣的服務(wù)器的,換句話說就是讓客戶端的會(huì)話“持續(xù)”而又“有粘性”地選擇連接到特定的服務(wù)器,那么可以使用 ip 哈希負(fù)載均衡策略。
ip 哈希負(fù)載均衡策略會(huì)使用客戶端的 ip 地址作為哈希的 key 來決定選擇服務(wù)器群中某臺(tái)服務(wù)器來處理客戶端的請(qǐng)求。這種方式確保來自同一臺(tái)客戶端的請(qǐng)求會(huì)分發(fā)到同一臺(tái)服務(wù)器上,除非這臺(tái)服務(wù)器處于不可用狀態(tài)。
只需要把 ip_hash 指令添加到服務(wù)器群(upstream)配置中就可以使用 ip 哈希負(fù)載均衡策略了:
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }Weighted load balancing
除了上面三種負(fù)載均衡策略,我們還可以通過配置服務(wù)器權(quán)重來更深入地影響 nginx 負(fù)載均衡算法。
在上面幾個(gè)例子中,并沒有配置服務(wù)器權(quán)重,那么這意味著 nginx 在進(jìn)行負(fù)載均衡計(jì)算的時(shí)候會(huì)同等地看待配置的服務(wù)器。
假如有足夠的請(qǐng)求,并且請(qǐng)求的處理模式一致而且完成的速度足夠快,那么輪詢負(fù)載均衡策略意味著根據(jù)基本上一致的權(quán)重來分發(fā)請(qǐng)求到服務(wù)器上。
當(dāng)一個(gè)服務(wù)器被配置了權(quán)重的時(shí)候,權(quán)重值就會(huì)被當(dāng)做負(fù)載均衡算法決策因素的一部分。
upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }
當(dāng)采用上面的配置的時(shí)候,每5個(gè)請(qǐng)求將會(huì)如下方式分發(fā)到應(yīng)用服務(wù)器上:
三個(gè)請(qǐng)求會(huì)分發(fā)到 srv1,一個(gè)會(huì)分發(fā)到 srv2,另一個(gè)會(huì)分發(fā)到 srv3
權(quán)重式負(fù)載均衡策略可以在最近版本的 nginx 運(yùn)用到最少連接和 ip hash 負(fù)載均衡策略中。
Health checksnginx 的反向代理實(shí)現(xiàn)包括了被動(dòng)的 health checks 策略。當(dāng)某個(gè)特定的服務(wù)器由于錯(cuò)誤而響應(yīng)失敗時(shí),nginx 會(huì)把這臺(tái)服務(wù)器標(biāo)記為 failed,并且會(huì)在一短時(shí)間內(nèi)不把后續(xù)的請(qǐng)求分發(fā)到這臺(tái)服務(wù)器上。
max_fails 指令可以設(shè)置允許的在 fail_timeout 時(shí)間內(nèi)嘗試與服務(wù)器交互的最大連續(xù)失敗次數(shù)。max_fails 默認(rèn)為 1。當(dāng) max_fails 設(shè)置成 0 的時(shí)候,這臺(tái)服務(wù)器的 health checks 功能將會(huì)被禁用。fail_timeout 參數(shù)同時(shí)也定義了服務(wù)器被標(biāo)記為 failed 的時(shí)長(zhǎng)。服務(wù)器出錯(cuò)并且經(jīng)過 fail_timeout 的時(shí)間間隔之后, nginx 會(huì)開始優(yōu)雅地用活躍的客戶端請(qǐng)求來探測(cè)出錯(cuò)的服務(wù)器。如果這些探測(cè)成功了,那么這臺(tái)服務(wù)器將會(huì)被標(biāo)記為正常。
強(qiáng)烈建議讀完 max_fails 跟 fail_timeout 的鏈接。
Further reading另外,還有很多的命令以及參數(shù)可以控制 nginx 的負(fù)載均衡,例如 proxy_next_upstream , backup , down , and keepalive 。同時(shí),可以通過閱讀 reference documentation 來獲取更多信息。
使用 NGINX 做 HTTP 負(fù)載均衡 - Agentd
Reference linkshttp://nginx.org/en/docs/http...
http://nginx.org/en/docs/http...
http://nginx.org/en/docs/http...
http://nginx.org/en/docs/http...
http://blog.csdn.net/xiajun07...
http://blog.csdn.net/xiajun07...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40141.html
摘要:如果你有一個(gè)高流量的站點(diǎn),提高性能的第一步是在你的前面放一個(gè)反向代理服務(wù)器。使用在一個(gè)已經(jīng)存在的服務(wù)器前做反向代理,作為的一個(gè)核心應(yīng)用,已經(jīng)被用于全世界成千上萬的站點(diǎn)中。 如果你的 node 服務(wù)器前面沒有 nginx, 那么你可能做錯(cuò)了。— Bryan Hughes Node.js 是使用 最流行的語(yǔ)言— JavaScript 構(gòu)建服務(wù)器端應(yīng)用的領(lǐng)先工具 。由于可以同時(shí)提供 web ...
摘要:架設(shè)服務(wù)器均衡負(fù)載方式有多種,是目前使用最廣泛的三種方案關(guān)于均衡負(fù)載架設(shè)服務(wù)器均衡負(fù)載方式有多種,是目前使用最廣泛的三種方案。服務(wù)器集群環(huán)境接下來講下想要搭的均衡負(fù)載環(huán)境。 http://homeway.me showImg(http://homeway.me/image/logo-nginx.png); 為jue.so架設(shè)一個(gè)服務(wù)器集群。 架設(shè)服務(wù)器均衡負(fù)載...
摘要:部署只是一種規(guī)則,控制器組件會(huì)將這一規(guī)則應(yīng)用于實(shí)際負(fù)載均衡器中。原因是功能僅允許將端口用于路由,負(fù)載均衡器和則可作為全局啟動(dòng)。負(fù)載均衡的限制提供了功能豐富的負(fù)載均衡器支持詳細(xì)介紹在此。截至目前,我們暫時(shí)無法使用工具將負(fù)載均衡器配置從轉(zhuǎn)換為。 如果您的應(yīng)用程序是面向大量用戶、會(huì)吸引大量流量,那么一個(gè)不變的目標(biāo)一定是在高效滿足用戶需求的同時(shí)、不讓用戶感知到任何類似于服務(wù)器繁忙!的情況。這一...
閱讀 981·2023-04-26 01:47
閱讀 1672·2021-11-18 13:19
閱讀 2041·2019-08-30 15:44
閱讀 644·2019-08-30 15:44
閱讀 2291·2019-08-30 15:44
閱讀 1231·2019-08-30 14:06
閱讀 1420·2019-08-30 12:59
閱讀 1899·2019-08-29 12:49