nginx-負(fù)載均衡宕機(jī)配置.docx_第1頁
nginx-負(fù)載均衡宕機(jī)配置.docx_第2頁
nginx-負(fù)載均衡宕機(jī)配置.docx_第3頁
nginx-負(fù)載均衡宕機(jī)配置.docx_第4頁
nginx-負(fù)載均衡宕機(jī)配置.docx_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1.摘要(1)結(jié)論詳細(xì)描述了nginx記錄失效節(jié)點(diǎn)的6種狀態(tài)(time out、connect refuse、500、502、503、504,后四項(xiàng)5XX需要配置proxy_next_upstream中的狀態(tài)才可以生效)、失效節(jié)點(diǎn)的觸發(fā)條件和節(jié)點(diǎn)的恢復(fù)條件、所有節(jié)點(diǎn)失效后nginx會(huì)進(jìn)行恢復(fù)并進(jìn)行重新監(jiān)聽。(2)Nginx負(fù)載均衡方式介紹Nginx的負(fù)載均衡方式一共有4種:rr(輪詢模式)、ip_hash、fair、url_hash。(3)Ngxin負(fù)載均衡和相關(guān)反向代理配置內(nèi)容Nginx負(fù)載均衡和與容錯(cuò)相關(guān)的反向代理的配置。(4)獲取后端流程后端server的自動(dòng)容錯(cuò)流程圖。(5)測(cè)試環(huán)境和測(cè)試結(jié)果針對(duì)幾種錯(cuò)誤方式進(jìn)行自動(dòng)容錯(cuò)測(cè)試。2.結(jié)論(1)nginx判斷節(jié)點(diǎn)失效狀態(tài)Nginx默認(rèn)判斷失敗節(jié)點(diǎn)狀態(tài)以connect refuse和time out狀態(tài)為準(zhǔn),不以HTTP錯(cuò)誤狀態(tài)進(jìn)行判斷失敗,因?yàn)镠TTP只要能返回狀態(tài)說明該節(jié)點(diǎn)還可以正常連接,所以nginx判斷其還是存活狀態(tài);除非添加了proxy_next_upstream指令設(shè)置對(duì)404、502、503、504、500和time out等錯(cuò)誤進(jìn)行轉(zhuǎn)到備機(jī)處理,在next_upstream過程中,會(huì)對(duì)fails進(jìn)行累加,如果備用機(jī)處理還是錯(cuò)誤則直接返回錯(cuò)誤信息(但404不進(jìn)行記錄到錯(cuò)誤數(shù),如果不配置錯(cuò)誤狀態(tài)也不對(duì)其進(jìn)行錯(cuò)誤狀態(tài)記錄),綜述,nginx記錄錯(cuò)誤數(shù)量只記錄timeout、connect refuse、502、500、503、504這6種狀態(tài),timeout和connect refuse是永遠(yuǎn)被記錄錯(cuò)誤狀態(tài),而502、500、503、504只有在配置proxy_next_upstream后nginx才會(huì)記錄這4種HTTP錯(cuò)誤到fails中,當(dāng)fails大于等于max_fails時(shí),則該節(jié)點(diǎn)失效;(2)nginx處理節(jié)點(diǎn)失效和恢復(fù)的觸發(fā)條件nginx可以通過設(shè)置max_fails(最大嘗試失敗次數(shù))和fail_timeout(失效時(shí)間,在到達(dá)最大嘗試失敗次數(shù)后,在fail_timeout的時(shí)間范圍內(nèi)節(jié)點(diǎn)被置為失效,除非所有節(jié)點(diǎn)都失效,否則該時(shí)間內(nèi),節(jié)點(diǎn)不進(jìn)行恢復(fù))對(duì)節(jié)點(diǎn)失敗的嘗試次數(shù)和失效時(shí)間進(jìn)行設(shè)置,當(dāng)超過最大嘗試次數(shù)或失效時(shí)間未超過配置失效時(shí)間,則nginx會(huì)對(duì)節(jié)點(diǎn)狀會(huì)置為失效狀態(tài),nginx不對(duì)該后端進(jìn)行連接,直到超過失效時(shí)間或者所有節(jié)點(diǎn)都失效后,該節(jié)點(diǎn)重新置為有效,重新探測(cè);(3)所有節(jié)點(diǎn)失效后nginx將重新恢復(fù)所有節(jié)點(diǎn)進(jìn)行探測(cè)如果探測(cè)所有節(jié)點(diǎn)均失效,備機(jī)也為失效時(shí),那么nginx會(huì)對(duì)所有節(jié)點(diǎn)恢復(fù)為有效,重新嘗試探測(cè)有效節(jié)點(diǎn),如果探測(cè)到有效節(jié)點(diǎn)則返回正確節(jié)點(diǎn)內(nèi)容,如果還是全部錯(cuò)誤,那么繼續(xù)探測(cè)下去,當(dāng)沒有正確信息時(shí),節(jié)點(diǎn)失效時(shí)默認(rèn)返回狀態(tài)為502,但是下次訪問節(jié)點(diǎn)時(shí)會(huì)繼續(xù)探測(cè)正確節(jié)點(diǎn),直到找到正確的為止。3.nginx負(fù)載均衡Nginx的負(fù)載均衡方式一共有4種:rr(輪詢模式)、ip_hash、fair、url_hash;Nginx自帶的2種負(fù)載均衡為rr和ip_hash,fair和url_hash為第三方的插件,nginx在不配置負(fù)載均衡的模式下,默認(rèn)采用rr負(fù)載均衡模式。lRR負(fù)載均衡模式:每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果超過了最大失敗次數(shù)后(max_fails,默認(rèn)1),在失效時(shí)間內(nèi)(fail_timeout,默認(rèn)10秒),該節(jié)點(diǎn)失效權(quán)重變?yōu)?,超過失效時(shí)間后,則恢復(fù)正常,或者全部節(jié)點(diǎn)都為down后,那么將所有節(jié)點(diǎn)都恢復(fù)為有效繼續(xù)探測(cè),一般來說rr可以根據(jù)權(quán)重來進(jìn)行均勻分配。lIp_hash負(fù)載均衡模式:每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題,但是ip_hash會(huì)造成負(fù)載不均,有的服務(wù)請(qǐng)求接受多,有的服務(wù)請(qǐng)求接受少,所以不建議采用ip_hash模式,session共享問題可用后端服務(wù)的session共享代替nginx的ip_hash。lFair(第三方)負(fù)載均衡模式:按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。lurl_hash(第三方)負(fù)載均衡模式:和ip_hash算法類似,是對(duì)每個(gè)請(qǐng)求按url的hash結(jié)果分配,使每個(gè)URL定向到一個(gè)同一個(gè)后端服務(wù)器,但是也會(huì)造成分配不均的問題,這種模式后端服務(wù)器為緩存時(shí)比較好。4.Nginx負(fù)載均衡配置Nginx的負(fù)載均衡采用的是upstream模塊其中默認(rèn)的采用的負(fù)載均衡模式是輪詢模式rr(round_robin),具體配置如下:1)指令:ip_hash語法:ip_hash默認(rèn)值:none使用字段:upstream這個(gè)指令將基于客戶端連接的IP地址來分發(fā)請(qǐng)求。哈希的關(guān)鍵字是客戶端的C類網(wǎng)絡(luò)地址,這個(gè)功能將保證這個(gè)客戶端請(qǐng)求總是被轉(zhuǎn)發(fā)到一臺(tái)服務(wù)器上,但是如果這臺(tái)服務(wù)器不可用,那么請(qǐng)求將轉(zhuǎn)發(fā)到另外的服務(wù)器上,這將保證某個(gè)客戶端有很大概率總是連接到一臺(tái)服務(wù)器。無法將權(quán)重(weight)與ip_hash聯(lián)合使用來分發(fā)連接。如果有某臺(tái)服務(wù)器不可用,你必須標(biāo)記其為“down”,如下例:upstream backend ip_hash;;;down;;server語法:server name parameters默認(rèn)值:none使用字段:upstream指定后端服務(wù)器的名稱和一些參數(shù),可以使用域名,IP,端口,或者unix socket。如果指定為域名,則首先將其解析為IP。lweight = NUMBER -設(shè)置服務(wù)器權(quán)重,默認(rèn)為1。lmax_fails = NUMBER -在一定時(shí)間內(nèi)(這個(gè)時(shí)間在fail_timeout參數(shù)中設(shè)置)檢查這個(gè)服務(wù)器是否可用時(shí)產(chǎn)生的最多失敗請(qǐng)求數(shù),默認(rèn)為1,將其設(shè)置為0可以關(guān)閉檢查,這些錯(cuò)誤在proxy_next_upstream或fastcgi_next_upstream(404錯(cuò)誤不會(huì)使max_fails增加)中定義。lfail_timeout = TIME -在這個(gè)時(shí)間內(nèi)產(chǎn)生了max_fails所設(shè)置大小的失敗嘗試連接請(qǐng)求后這個(gè)服務(wù)器可能不可用,同樣它指定了服務(wù)器不可用的時(shí)間(在下一次嘗試連接請(qǐng)求發(fā)起之前),默認(rèn)為10秒,fail_timeout與前端響應(yīng)時(shí)間沒有直接關(guān)系,不過可以使用proxy_connect_timeout和proxy_read_timeout來控制。ldown -標(biāo)記服務(wù)器處于離線狀態(tài),通常和ip_hash一起使用。lbackup - (0.6.7或更高)如果所有的非備份服務(wù)器都宕機(jī)或繁忙,則使用本服務(wù)器(無法和ip_hash指令搭配使用)。示例配置weight=5;server:8080max_fails=3fail_timeout=30s;serverunix:/tmp/backend3;注意:如果你只使用一臺(tái)上游服務(wù)器,nginx將設(shè)置一個(gè)內(nèi)置變量為1,即max_fails和fail_timeout參數(shù)不會(huì)被處理。結(jié)果:如果nginx不能連接到上游,請(qǐng)求將丟失。解決:使用多臺(tái)上游服務(wù)器。upstream語法:upstream name 默認(rèn)值:none使用字段:http這個(gè)字段設(shè)置一群服務(wù)器,可以將這個(gè)字段放在proxy_pass和fastcgi_pass指令中作為一個(gè)單獨(dú)的實(shí)體,它們可以可以是監(jiān)聽不同端口的服務(wù)器,并且也可以是同時(shí)監(jiān)聽TCP和Unix socket的服務(wù)器。服務(wù)器可以指定不同的權(quán)重,默認(rèn)為1。示例配置upstream backend server weight=5;server :8080max_fails=3fail_timeout=30s;server unix:/tmp/backend3;請(qǐng)求將按照輪詢的方式分發(fā)到后端服務(wù)器,但同時(shí)也會(huì)考慮權(quán)重。在上面的例子中如果每次發(fā)生7個(gè)請(qǐng)求,5個(gè)請(qǐng)求將被發(fā)送到,其他兩臺(tái)將分別得到一個(gè)請(qǐng)求,如果有一臺(tái)服務(wù)器不可用,那么請(qǐng)求將被轉(zhuǎn)發(fā)到下一臺(tái)服務(wù)器,直到所有的服務(wù)器檢查都通過。如果所有的服務(wù)器都無法通過檢查,那么將返回給客戶端最后一臺(tái)工作的服務(wù)器產(chǎn)生的結(jié)果。2)變量版本0.5.18以后,可以通過log_module中的變量來記錄日志:log_format timing $remote_addr - $remote_user $time_local$request upstream_response_time $upstream_response_time msec $msec request_time $request_time;log_format up_head $remote_addr - $remote_user $time_local$request upstream_http_content_type $upstream_http_content_type;l$upstream_addr前端服務(wù)器處理請(qǐng)求的服務(wù)器地址l$upstream_cache_status0.8.3版本中其值可能為:MISSEXPIRED - expired。請(qǐng)求被傳送到后端。UPDATING - expired。由于proxy/fastcgi_cache_use_stale正在更新,將使用舊的應(yīng)答。STALE - expired。由于proxy/fastcgi_cache_use_stale,后端將得到過期的應(yīng)答。HITl$upstream_status前端服務(wù)器的響應(yīng)狀態(tài)。l$upstream_response_time前端服務(wù)器的應(yīng)答時(shí)間,精確到毫秒,不同的應(yīng)答以逗號(hào)和冒號(hào)分開。l$upstream_http_$HEADER隨意的HTTP協(xié)議頭,如:$upstream_http_hostl$upstream_http_host3)Proxy指令:proxy_next_upstream語法:proxy_next_upstreamerror|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off默認(rèn)值:proxy_next_upstream error timeout使用字段:http, server, location確定在何種情況下請(qǐng)求將轉(zhuǎn)發(fā)到下一個(gè)服務(wù)器:error -在連接到一個(gè)服務(wù)器,發(fā)送一個(gè)請(qǐng)求,或者讀取應(yīng)答時(shí)發(fā)生錯(cuò)誤。timeout -在連接到服務(wù)器,轉(zhuǎn)發(fā)請(qǐng)求或者讀取應(yīng)答時(shí)發(fā)生超時(shí)。invalid_header -服務(wù)器返回空的或者錯(cuò)誤的應(yīng)答。http_500 -服務(wù)器返回500代碼。http_502 -服務(wù)器返回502代碼。http_503 -服務(wù)器返回503代碼。http_504 -服務(wù)器返回504代碼。http_404 -服務(wù)器返回404代碼。off -禁止轉(zhuǎn)發(fā)請(qǐng)求到下一臺(tái)服務(wù)器。轉(zhuǎn)發(fā)請(qǐng)求只發(fā)生在沒有數(shù)據(jù)傳遞到客戶端的過程中。其中記錄到nginx后端錯(cuò)誤數(shù)量的有500、502、503、504、timeout,404不記錄錯(cuò)誤。proxy_connect_timeout語法:proxy_connect_timeout timeout_in_seconds默認(rèn)值:proxy_connect_timeout 60s使用字段:http, server, location指定一個(gè)連接到代理服務(wù)器的超時(shí)時(shí)間,單位為秒,需要注意的是這個(gè)時(shí)間最好不要超過75秒。這個(gè)時(shí)間并不是指服務(wù)器傳回頁面的時(shí)間(這個(gè)時(shí)間由proxy_read_timeout聲明)。如果你的前端代理服務(wù)器是正常運(yùn)行的,但是遇到一些狀況(例如沒有足夠的線程去處理請(qǐng)求,請(qǐng)求將被放在一個(gè)連接池中延遲處理),那么這個(gè)聲明無助于服務(wù)器去建立連接??梢酝ㄟ^指定時(shí)間單位以免引起混亂,支持的時(shí)間單位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小時(shí)),和“m”(分鐘)。這個(gè)值不能大于597小時(shí)。proxy_read_timeout語法:proxy_read_timeout time默認(rèn)值:proxy_read_timeout 60s使用字段:http, server, location決定讀取后端服務(wù)器應(yīng)答的超時(shí)時(shí)間,單位為秒,它決定nginx將等待多久時(shí)間來取得一個(gè)請(qǐng)求的應(yīng)答。超時(shí)時(shí)間是指完成了兩次握手后并且狀態(tài)為established的超時(shí)時(shí)間。相對(duì)于proxy_connect_timeout,這個(gè)時(shí)間可以撲捉到一臺(tái)將你的連接放入連接池延遲處理并且沒有數(shù)據(jù)傳送的服務(wù)器,注意不要將此值設(shè)置太低,某些情況下代理服務(wù)器將花很長的時(shí)間來獲得頁面應(yīng)答(例如如當(dāng)接收一個(gè)需要很多計(jì)算的報(bào)表時(shí)),當(dāng)然你可以在不同的location里面設(shè)置不同的值??梢酝ㄟ^指定時(shí)間單位以免引起混亂,支持的時(shí)間單位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小時(shí)),和“m”(分鐘)。這個(gè)值不能大于597小時(shí)。proxy_send_timeout語法:proxy_send_timeout seconds默認(rèn)值:proxy_send_timeout 60s使用字段:http, server, location設(shè)置代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求的超時(shí)時(shí)間,單位為秒,同樣指完成兩次握手后的時(shí)間,如果超過這個(gè)時(shí)間代理服務(wù)器沒有數(shù)據(jù)轉(zhuǎn)發(fā)到被代理服務(wù)器,nginx將關(guān)閉連接??梢酝ㄟ^指定時(shí)間單位以免引起混亂,支持的時(shí)間單位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小時(shí)),和“m”(分鐘)。這個(gè)值不能大于597小時(shí)。5.獲取后端流程GET_RR_PEER:通過RR算法獲取后端流程K:是判斷peer是否宕機(jī)和判斷失效狀態(tài)算法FAIL:嘗試次數(shù)用盡有,跳轉(zhuǎn)到失敗流程,如果有備機(jī),備機(jī)再嘗試監(jiān)聽,如果監(jiān)聽失敗則返回NGX_BUSY,成功則返回當(dāng)前狀態(tài)。6.測(cè)試環(huán)境操作系統(tǒng):centos5.6Cpu:16核內(nèi)存:32gWeb服務(wù)器:nginxWeb應(yīng)用服務(wù)器:tomcat(2臺(tái))7.測(cè)試結(jié)果l設(shè)置tomcat1超時(shí)時(shí)間,造成超時(shí)狀態(tài)(總有一臺(tái)server為有效狀態(tài)):Tomcat1的connectionTimeout設(shè)置為-1,永遠(yuǎn)超時(shí),nginx設(shè)置tomcat1和tomcat2權(quán)重為10,tomcat1的max_fails為10,fail_timeout=120;在連接tomcat1的10次后,返回給nginx為10次超時(shí),ngxin判斷tomcat1為失效,然后將tomcat1超時(shí)時(shí)間恢復(fù)為1000重新啟動(dòng)tomcat1,在這段時(shí)間內(nèi)nginx判斷tomcat1還是失效狀態(tài),所以在2分鐘后,nginx繼續(xù)監(jiān)聽到tomcat1正常后,那么nginx會(huì)將tomcat1判斷為有效,將連接繼續(xù)均勻分配到2個(gè)tomcat上。l設(shè)置tomcat1連接數(shù)量,造成超時(shí)狀態(tài)(總有一臺(tái)server為有效狀態(tài)):Tomcat1的線程數(shù)量設(shè)置為1,nginx設(shè)置tomcat1和tomcat2權(quán)重為10,tomcat1的max_fails為10,fail_timeout=120;在連接tomcat1超過線程接受數(shù)量后,tomcat1會(huì)返回超時(shí)狀態(tài),在返回給nginx10次超時(shí)狀態(tài)后,ngxin判斷tomcat1為失效,然后將tomcat線程數(shù)量恢復(fù)為700,重新啟動(dòng)tomcat1,在這段時(shí)間內(nèi)nginx判斷tomcat1還是失效狀態(tài),超過2分鐘失效后,nginx繼續(xù)監(jiān)聽到tomcat1正常后,那么nginx會(huì)將tomcat1判斷為有效,將連接繼續(xù)均勻分配到2個(gè)tomcat上。l設(shè)置tomcat1關(guān)閉,造成拒絕狀態(tài)(總有一臺(tái)server為有效狀態(tài)):Tomcat1為關(guān)閉,nginx設(shè)置tomcat1和tomcat2權(quán)重為10,tomcat1的max_fails為10,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論