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

1? 概述

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

2? ngx_http_upstream_module模塊

該模塊用于將多個服務器定義成服務器組,而由proxy_pass,fastcgi_pass等指令進行引用.注意,如果nginx上有設置了proxy_cache.那么訪問的資源如果在nginx上已經有緩存了,將不會把請求轉發(fā)給后臺的服務器,直接把將緩存返回給客戶端,就不會有調度的執(zhí)行,可能同一訪問的得到的結果是相同的。

.1、upstream

upstream? name { ... }

定義后端服務器組,會引入一個新的上下文,默認調度算法是wrr

Context: http

upstream httpdsrvs{

server ...

server...

...

}

.2、server

server? address [parameters];

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

address的表示格式:

unix:/PATH/TO/SOME_SOCK_FILE

IP[:PORT]

HOSTNAME[:PORT]

parameters:

weight=number權重,默認為1

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

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

fail_timeout=time后端服務器標記為不可用狀態(tài)的連接超時時長,默認10s

backup將服務器標記為“備用”,即所有服務器均不可用時才啟用,相當于是sorry server,提示用戶,注意,這里backup不要用80端口,用其他的虛擬主機來充當sorry server,如再開一個端口8000

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

.3、ip_hash

源地址hash調度方法

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

.4、least_conn

最少連接調度算法,當server擁有不同的權重時其為wlc,當所有后端主機連接數(shù)相同時,則使用wrr,適用于長連接

.5、hash

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

作用:將請求分類,同一類請求將發(fā)往同一個upstream server,使用consistent參數(shù),將使用ketama一致性hash算法,適用于后端是Cache服務器(如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檢測的頻率,默認為5秒

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

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

uri=uri:做健康狀態(tài)檢測測試的目標uri;默認為/

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

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

.8match

match name { ... }

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

.常用的參數(shù):

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

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

body:期望響應報文的主體部分應該有的內容

注意:僅對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ù)流。工作于傳輸層的反向代理或調度器,這個是和http配置段平行的配置。

.1proxy_pass

proxy_pass? address;指定后端服務器地址

.2proxy_timeout

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

.3proxy_connect_timeout

proxy_connect_timeout? time;設置nginx與被代理的服務器嘗試建立連接的超時時長,默認為60s

4? 語法格式

.4.1、stream{ ... }

定義stream相關的服務;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; #注意,這里的端口不能是代理服務器上已經使用的端口,如23,否則將不會調度

proxy_pass telnetsrvs;

proxy_timeout?60s;

proxy_connect_timeout10s;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容