Nginx 之 實現(xiàn)調(diào)度功能

1? 概述

本文將介紹ngx_http_upstream_module模塊和ngx_stream_core_module模塊這兩個模塊實現(xiàn)nginx的調(diào)度功能蛾魄。nginx可以通過proxy功能,實現(xiàn)將不同內(nèi)容的訪問調(diào)度到對應(yīng)的機器上。實現(xiàn)了應(yīng)用級的調(diào)度油啤,相關(guān)內(nèi)容見博客《Nginx? 之? 實現(xiàn)代理功能》?

2? ngx_http_upstream_module模塊

該模塊用于將多個服務(wù)器定義成服務(wù)器組,而由proxy_pass,fastcgi_pass等指令進行引用.注意元践,如果nginx上有設(shè)置了proxy_cache.那么訪問的資源如果在nginx上已經(jīng)有緩存了讯蒲,將不會把請求轉(zhuǎn)發(fā)給后臺的服務(wù)器,直接把將緩存返回給客戶端把篓,就不會有調(diào)度的執(zhí)行纫溃,可能同一訪問的得到的結(jié)果是相同的。

.1韧掩、upstream

upstream? name { ... }

定義后端服務(wù)器組紊浩,會引入一個新的上下文,默認(rèn)調(diào)度算法是wrr

Context: http

upstream httpdsrvs{

server ...

server...

...

}

.2疗锐、server

server? address [parameters];

在upstream上下文中server成員坊谁,以及相關(guān)的參數(shù);Context:upstream

address的表示格式:

unix:/PATH/TO/SOME_SOCK_FILE

IP[:PORT]

HOSTNAME[:PORT]

parameters:

weight=number權(quán)重滑臊,默認(rèn)為1

max_conns連接后端報務(wù)器最大并發(fā)活動連接數(shù)口芍,1.11.5后支持

max_fails=number失敗嘗試最大次數(shù);超出此處指定的次數(shù)時雇卷,server將被標(biāo)記為不可用,默認(rèn)為1

fail_timeout=time后端服務(wù)器標(biāo)記為不可用狀態(tài)的連接超時時長鬓椭,默認(rèn)10s

backup將服務(wù)器標(biāo)記為“備用”颠猴,即所有服務(wù)器均不可用時才啟用,相當(dāng)于是sorry server小染,提示用戶翘瓮,注意,這里backup不要用80端口氧映,用其他的虛擬主機來充當(dāng)sorry server,如再開一個端口8000

down標(biāo)記為“不可用”春畔,配合ip_hash使用,實現(xiàn)灰度發(fā)布岛都,灰度發(fā)布律姨,指分批進行發(fā)布上線。

.3臼疫、ip_hash

源地址hash調(diào)度方法

根據(jù)源地址進行調(diào)度择份,同一個源的客戶端調(diào)度到同一臺主機

.4、least_conn

最少連接調(diào)度算法烫堤,當(dāng)server擁有不同的權(quán)重時其為wlc荣赶,當(dāng)所有后端主機連接數(shù)相同時,則使用wrr鸽斟,適用于長連接

.5拔创、hash

hashkey [consistent]基于指定的key的hash表來實現(xiàn)對請求的調(diào)度,此處的key可以直接文本富蓄、變量或二者組合

作用:將請求分類剩燥,同一類請求將發(fā)往同一個upstream server,使用consistent參數(shù)立倍,將使用ketama一致性hash算法灭红,適用于后端是Cache服務(wù)器(如varnish)時使用

hash $request_uri? consistent; #其中,consistent一致性的hash

hash $remote_addr;

.6口注、keepalive連接數(shù)N;

keepalive n;

為每個worker進程保留的空閑的長連接數(shù)量,可節(jié)約nginx端口变擒,并減少連接管理的消耗

.7、health_check

health_check [parameters];

健康狀態(tài)檢測機制寝志;只能用于location上下文

常用參數(shù):

interval=time檢測的頻率娇斑,默認(rèn)為5秒

fails=number:判定服務(wù)器不可用的失敗檢測次數(shù);默認(rèn)為1次

passes=number:判定服務(wù)器可用的失敗檢測次數(shù)材部;默認(rèn)為1次

uri=uri:做健康狀態(tài)檢測測試的目標(biāo)uri悠菜;默認(rèn)為/

match=NAME:健康狀態(tài)檢測的結(jié)果評估調(diào)用此處指定的match配置塊

注意:僅對nginxplus有效,nginxplus為商業(yè)版败富,需要付費

.8match

match name { ... }

對backendserver做健康狀態(tài)檢測時,定義其結(jié)果判斷機制摩窃;只能用于http上下文

.常用的參數(shù):

status ?code[ code ...]:期望的響應(yīng)狀態(tài)碼

headerHEADER[operator value]:期望存在響應(yīng)首部兽叮,也可對期望的響應(yīng)首部的值基于比較操作符和值進行比較

body:期望響應(yīng)報文的主體部分應(yīng)該有的內(nèi)容

注意:僅對nginx plus有效

例子

http配置段如下

vim? /etc/nginx/nginx.conf

http {

......

upstream websrvs {

server 172.18.50.61:80 weight=1;

#server 172.18.50.61:80 weight=1 down;

server 172.18.50.65:80 weight=2;

server 127.0.0.1:8000 backup;

#ip_hash;

#least_conn;

#hash $request_uri;

}

}

server配置段如下

location / {

proxy_pass http://websrvs;

}

3? ngx_stream_core_module模塊

實現(xiàn)代理基于TCP芬骄,UDP (1.9.13),UNIX-domain sockets的數(shù)據(jù)流。工作于傳輸層的反向代理或調(diào)度器鹦聪,這個是和http配置段平行的配置账阻。

.1proxy_pass

proxy_pass? address;指定后端服務(wù)器地址

.2proxy_timeout

proxy_timeout? timeout;無數(shù)據(jù)傳輸時,保持連接狀態(tài)的超時時長泽本,默認(rèn)為10m

.3proxy_connect_timeout

proxy_connect_timeout? time;設(shè)置nginx與被代理的服務(wù)器嘗試建立連接的超時時長淘太,默認(rèn)為60s

4? 語法格式

.4.1、stream{ ... }

定義stream相關(guān)的服務(wù)规丽;Context:main

stream {

upstream telnetsrvs{

server 192.168.22.2:23;

server 192.168.22.3:23;

least_conn;

}

server {

listen 10.1.0.6:23;

proxy_pass? telnetsrvs;

}

}

.4.2蒲牧、listen

listen address:port [ssl] [udp][proxy_protocol] ?[backlog=number] [bind][ipv6only=on|off] [reuseport]?[so_keepalive=on|off [keepidle]:[keepintvl]:[keepcnt]];

5? 示例

vim? /etc/nginx/nginx.conf

stream {

upstream telnetsrvs {

server 172.18.50.61:23;

server 172.18.50.75:23;

least_conn;

}

server {

listen? 2323; #注意,這里的端口不能是代理服務(wù)器上已經(jīng)使用的端口赌莺,如23冰抢,否則將不會調(diào)度

proxy_pass telnetsrvs;

proxy_timeout?60s;

proxy_connect_timeout10s;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市艘狭,隨后出現(xiàn)的幾起案子挎扰,更是在濱河造成了極大的恐慌,老刑警劉巖巢音,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵倦,死亡現(xiàn)場離奇詭異,居然都是意外死亡官撼,警方通過查閱死者的電腦和手機梧躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歧寺,“玉大人燥狰,你說我怎么就攤上這事⌒笨穑” “怎么了龙致?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顷链。 經(jīng)常有香客問我目代,道長,這世上最難降的妖魔是什么嗤练? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任榛了,我火速辦了婚禮,結(jié)果婚禮上煞抬,老公的妹妹穿的比我還像新娘霜大。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布禾唁。 她就那樣靜靜地躺著,像睡著了一般涎拉。 火紅的嫁衣襯著肌膚如雪途茫。 梳的紋絲不亂的頭發(fā)上碟嘴,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音囊卜,去河邊找鬼娜扇。 笑死,一個胖子當(dāng)著我的面吹牛栅组,可吹牛的內(nèi)容都是我干的雀瓢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笑窜,長吁一口氣:“原來是場噩夢啊……” “哼致燥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起排截,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤嫌蚤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后断傲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱吱,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年认罩,在試婚紗的時候發(fā)現(xiàn)自己被綠了箱蝠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦垂,死狀恐怖宦搬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劫拗,我是刑警寧澤间校,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站页慷,受9級特大地震影響憔足,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酒繁,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一滓彰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州袒,春花似錦揭绑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弓叛。三九已至,卻和暖如春诚纸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陈惰。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工畦徘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抬闯。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓井辆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溶握。 傳聞我的和親對象是個殘疾皇子杯缺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧睡榆!Ngi...
    JokerW閱讀 32,670評論 24 1,002
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》萍肆,我們講述了瀏覽器端請求發(fā)起過程,通過DNS域名解析服務(wù)器IP胀屿,并建...
    七寸知架構(gòu)閱讀 80,990評論 21 356
  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一塘揣、I/O模型 (一)I/...
    哈嘍別樣閱讀 892評論 0 4
  • 一個普通的上班族大嬸亲铡,好端端的怎么想起來開個人公眾號了呢?吃飽了撐著沒事干么葡兑? 第一次冒出這個想法是年前奖蔓,總覺得就...
    辣媽成長記閱讀 380評論 2 1