日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
細(xì)說nginx負(fù)載均衡

Nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器,Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器以及電子郵件代理服務(wù)器,并在一個(gè)BSD-like協(xié)議下發(fā)行,本篇文章重點(diǎn)為大家講解一下nginx的負(fù)載均衡。

輪詢

nginx將所有請求均勻的分給集群中的每臺服務(wù)器。

upstream test {
server 127.0.0.1:7001; # 等同于server 127.0.0.1:7001 weight=1;
server 150.109.118.85:7001; # 等同于server 150.109.118.85:7001 weight=1;
}

server {
listen 8081;
server_name localhost;

location / {
 proxy_pass http://test/;
}
}

upstream:定義一個(gè)服務(wù)集群。 proxy_pass: 將匹配的請求代理轉(zhuǎn)發(fā)到proxy_pass后面配置的服務(wù)上,這里因?yàn)樾枰渲秘?fù)載均衡,所以這里http://后面必須要跟上upstream定義的服務(wù)集群。

注意:upstream定義服務(wù)集群時(shí),配置的服務(wù)地址只能是域名+端口或者ip+端口,不能帶有協(xié)議和路徑,否則nginx會報(bào)nginx: [emerg] invalid host in upstream這個(gè)錯誤信息。

加權(quán)(weight)

upstream test {
server 127.0.0.1:7001 weight=2;
server 150.109.118.85:7001 weight=1;
}

前面兩次請求都會轉(zhuǎn)發(fā)到127.0.0.1:7001這個(gè)服務(wù),后面一次請求會轉(zhuǎn)發(fā)到150.109.118.85:7001這個(gè)服務(wù),再后面兩次轉(zhuǎn)發(fā)到127.0.0.1:7001,。。。

最少連接數(shù)

文件位置:src/http/modules/ngx_http_upstream_least_conn_module.c

nginx請求分配給active_connection/weight最小的服務(wù)器。

upstream test {
  least_conn;
server 127.0.0.1:7001 weight=1;
server 150.109.118.85:7001 weight=1;
}

ip_hash

文件位置:src/http/modules/ngx_http_upstream_ip_hash_module.c

根據(jù)用戶的ip,計(jì)算出一個(gè)hash值,如果負(fù)載均衡緩存中有這個(gè)hash對應(yīng)的服務(wù)器,那就直接轉(zhuǎn)發(fā)到對應(yīng)的服務(wù)器上。

upstream test {
  ip_hash;
server 127.0.0.1:7001;
server 150.109.118.85:7001;
}

nginx使用ip_hash策略后,只要用戶電腦的ip不變化,就會始終請求同一臺業(yè)務(wù)服務(wù)。

應(yīng)用場景:在實(shí)現(xiàn)文件上傳功能時(shí),要實(shí)現(xiàn)一個(gè)大文件上傳,往往會將這個(gè)大文件分成多個(gè)片段,然后上傳到服務(wù)器,如果使用前面給的策略,就會出現(xiàn)同一個(gè)文件的分片被上傳到不同服務(wù)器,導(dǎo)致文件合并失敗,不能達(dá)到預(yù)期效果。nginx使用ip_hash策略后,客戶端只要上傳了當(dāng)前文件的一個(gè)片段,后續(xù)文件片段上傳的時(shí)候,nginx通過計(jì)算ip的hash,自動把請求轉(zhuǎn)發(fā)到hash對應(yīng)的服務(wù)器。

hash

文件位置:src/http/modules/ngx_http_upstream_hash_module.c

可以進(jìn)行hash計(jì)算的有remote_addr(客戶端ip)(從測試結(jié)果上面看感覺可以直接替換掉ip_hash)、request_uri(請求uri)、args(請求參數(shù)),下面主要以request_uri的使用作為展示,其他兩個(gè)使用都類似。

根據(jù)請求的uri計(jì)算出一個(gè)hash值,然后將該請求轉(zhuǎn)發(fā)到一臺服務(wù)器上面,后續(xù)請求通過hash計(jì)算后,如果有相同的hash,那么就會將該請求轉(zhuǎn)發(fā)到該hash對應(yīng)的服務(wù)器。

如果集群中某臺服務(wù)器宕機(jī)之后會出現(xiàn)什么情況:假設(shè)r1命中a服務(wù)器;r2命中b服務(wù)器。當(dāng)a服務(wù)器宕機(jī),之前通過r1計(jì)算出來的hash與a服務(wù)器的對應(yīng)情況會失效,r1將重新分配給b服務(wù)器。后續(xù)a服務(wù)器恢復(fù)正常后,r1還是會分配給b服務(wù)器。

upstream test {
  hash $request_uri;
server 127.0.0.1:7001;
server 150.109.118.85:7001;
}

應(yīng)用場景:所有請求相同的文件資源的請求都會被轉(zhuǎn)發(fā)到同一個(gè)服務(wù)器,資源更容易命中緩存,減少寬帶和資源下載時(shí)間。

consistent_hash

consistent_hash(一致性hash)這個(gè)模塊使用方式和nginx內(nèi)置的hash模塊幾乎相同。能夠使用consistent_hash進(jìn)行計(jì)算的內(nèi)容和前面提到的nginx內(nèi)置的hash模塊一樣,有remote_addr、request_uri、args。這是一個(gè)三方模塊,可以在ngx_http_consistent_hash這里下載。

upstream test {
consistent_hash $request_uri;
server 127.0.0.1:7001;
server 150.109.118.85:7001;
}

fair

響應(yīng)時(shí)間短的服務(wù)優(yōu)先分配請求。這個(gè)是三方模塊,可以在nginx_upstream_fair這里下載模塊。這個(gè)模塊上次更新是8年前,可能需要考慮下是否需要使用這個(gè)。

upstream test {
fair;
server 127.0.0.1:7001;
server 150.109.118.85:7001;
}

測試中得出效果和輪詢默認(rèn)情況效果一樣,暫時(shí)沒有找到問題在哪。。。

負(fù)載均衡相關(guān)參數(shù)

down

標(biāo)識down的服務(wù)器暫時(shí)不支持資源請求。

upstream test {
server 127.0.0.1:7001 down;
server 150.109.118.85:7001;
}

上面負(fù)載均衡的例子中,因?yàn)?code>127.0.0.1:7001標(biāo)識為down,所以不會有請求轉(zhuǎn)發(fā)到這個(gè)服務(wù),所有的請求都會轉(zhuǎn)發(fā)到150.109.118.85:7001這個(gè)服務(wù)。

weight

集群中服務(wù)的權(quán)重值,默認(rèn)是1。在只有weight這一個(gè)影響條件下,且集群中服務(wù)都正常,nginx會將更多的請求轉(zhuǎn)發(fā)到weight更大的服務(wù)。

upstream test {
server 127.0.0.1:7001 weight=2;
server 150.109.118.85:7001 weight=1;
}

這個(gè)集群中127服務(wù)和150服務(wù)各處理的請求比例為2:1。

max_fails

允許服務(wù)處理請求時(shí)服務(wù)出錯的次數(shù),默認(rèn)為1。當(dāng)服務(wù)處理請求發(fā)生錯誤的次數(shù)超過max_fails時(shí),后面的請求暫時(shí)不會轉(zhuǎn)發(fā)到這臺發(fā)生錯誤的服務(wù)。

upstream test {
server 127.0.0.1:7001 max_fail=1;
server 150.109.118.85:7001;
}

fail_timeout

當(dāng)服務(wù)處理請求發(fā)生錯誤的次數(shù)超過max_fails以后,nginx會暫時(shí)禁止將請求轉(zhuǎn)發(fā)到這個(gè)服務(wù)。當(dāng)過去fail_timeout設(shè)置的時(shí)間以后,nginx會嘗試將請求轉(zhuǎn)發(fā)到剛才被禁止的服務(wù),如果服務(wù)正常,那么后續(xù)的請求可以繼續(xù)轉(zhuǎn)發(fā)到這臺服務(wù),如果服務(wù)錯誤,那么繼續(xù)等待fail_timeout時(shí)間后再來檢測。fail_timeout默認(rèn)時(shí)間是10s。

upstream test {
server 127.0.0.1:7001 max_fail=1 fail_timeout=10s;
server 150.109.118.85:7001;
}

backup

備用服務(wù)器,當(dāng)所有非backup服務(wù)發(fā)生錯誤被停用或者設(shè)置為down時(shí),nginx會啟用標(biāo)識為backup的服務(wù)。

upstream test {
server 127.0.0.1:7001 backup;
server 150.109.118.85:7001;
}

max_conns

這個(gè)功能存在于nginx商業(yè)版。同一服務(wù)同時(shí)處理請求的個(gè)數(shù)。防止服務(wù)因處理請求過多,服務(wù)器性能不足,發(fā)生宕機(jī)的情況。

upstream test {
server 127.0.0.1:7001 max_conns=10000;
server 150.109.118.85:7001;
}

slow_start

這個(gè)功能存在于nginx商業(yè)版。當(dāng)集群中錯誤服務(wù)等待fail_timeout時(shí)間后,nginx檢測到這個(gè)服務(wù)能夠正常使用后,再等待slow_start時(shí)間后,才正式使用這個(gè)服務(wù)。

upstream test {
server 127.0.0.1:7001 slow_start=30s;
server 150.109.118.85:7001;
}

本文標(biāo)題:細(xì)說nginx負(fù)載均衡
分享地址:http://m.5511xx.com/article/dhsscdp.html