版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、nginx負載均衡中RR和ip_hash策略分析一、nginx的upstream 目前支持負載均衡方式的分配1、RR (默認)每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。例如:upstream tomcats server 07:88max_fails=3 fail_timeout=3s weight=9;server 32:80max_fails=3 fail_timeout=3s weight=9;2、ip_hash每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
2、例如:upstream tomcats ip_hash;server 07:88;server 32:80;3、fair (第三方)按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配。4、url_hash (第三方)按訪問url的hash結(jié)果來分配請求,使每個 url定向到同一個后端服務器,后端服務器為 緩存時比較有效。下面,我們針對RR和ip_hash的負載均衡策略進行分析。因為每一種負載均衡策略都是在upstream 的框架中使用,upstream 控制總的工作流程,負載均衡策略僅僅提供選擇或釋 放server 的函數(shù),所以,我們在分析RR時結(jié)合 ups
3、tream(ngx_http_upstream.c)。ip_hash 大部分內(nèi)容與 RR 一致,只是重新實現(xiàn) RR中的ngx_http_upstream_get_peer 函 數(shù)。二、RR策略RR機制分為三個部分:初始化upstream ,獲取一個可用的后臺服務器和釋放后臺服務器。以下分析以此配置為例:upstream backe ndserverAmax_fails=3 fail_timeout=4s weight=9;serverBmax_fails=3 fail_timeout=4s weight=9;serverCmax_fails=3 fail_timeout=4s weight=9
4、;serverDbackup;ServerEbackup;2.1 初始化 upstream對于例子中的 upstream backe nd來說,首先初始化各個server,除了設置 IP和端口號外,還要設置如下置weight ,current_weight ,max_fails 禾口 fail_timeout 。其中 max_fails 禾口 fail_timeout 這兩個參數(shù) 是組合使用的,表示server如果失敗次數(shù)達到 max_fails 次,并保持fail_timeout 秒之內(nèi) 該服務器不能被訪問。對于serverA 來說,設置如下serverA.weight =9;serverA
5、.current_weight = 9;/ 初始值等于配置文件中的weight.serverA.max_fails = 3;serverA.fail_timeout = 4;接著,創(chuàng)建兩個server類型(在下文介紹中,server類型等同于peer類型,都是用來 指明存儲upstream 中一個server的信息)的數(shù)組,peers和backup ,分別存儲正常的輪循server和備用server.并且,按照數(shù)組中各個 server的 weight值的大小,由高到底排序。本例中,在數(shù)組peers 中存儲 serverA、serverB和serverC,并記錄server的總個數(shù)peers-&
6、gt;nu mber=3;在數(shù)組backup 中存儲serverD和serverE,并記錄server的總個數(shù)backup->nu mber=2;最后,設置upstream 中各個變量的值。rrp 表示當前要輪循的 server數(shù)組,初始設置為 Upstream->rrp = peers.tries表示嘗試的次數(shù),當嘗試一個server失敗后,tries的值就會減一。初始設置為peers的總個數(shù)。Next表示當peers數(shù)組中server都失敗,不能提供服務了,通過 upstream-next , 切換到back數(shù)組中選擇 server.2.2具體的RR策略2.2.1 ) 選擇最初
7、要輪循的 server, 把它給rrp->current變量,跳轉(zhuǎn)到當一個客戶端請求到達 nginx后,nginx就會在upstream 的peers數(shù)組中挑選一個 current_weight 最大的server作為當前請求最初要輪循的 server.在peers 數(shù)組中選取 curren t_weight 最大的算法如下:由于peers數(shù)組中的server是按照weight值的大小排序好的。它是通過雙重循環(huán),滿足下列條件后,if (peer n.curre nt_weight * 1000 / peeri.curre nt_weight > peer n.weight * 10
8、00 /peeri.weight)peeri.current_weight不為 0并且該 server 的current_weight 大于 0,就選擇 sever n,把編號 n賦給 rrp->curre nt,成功返回。如果當upstream 的peers 數(shù)組中的所有 server 的current_weight都為零時,立即無條件地把所有 server 的current_weight設置為初 始值。for (i = 0; i < peers _>nu mber; i+) peeri.curre nt_weight = peeri.weight;然后,當所有 serve
9、r的current_weight設置為初始值后,重新查找peers數(shù)組中current_weight 最大的 server。把編號賦給 rrp->current ,返回。判斷當前rrp->curre nt 所指向的server是否有效,如果無效,就會讓 rrp->current+,判斷 peers 數(shù)組中下一個 server,是否有效。至到找到有效的server為止.跳轉(zhuǎn)到2.2.3;否則跳轉(zhuǎn)到2.221判斷server是否有效的方法是:1 )如果 server 的失敗次數(shù)(peers->peeri.fails )沒有達到了 max_fails 所設置的最大失敗次數(shù),則
10、該server是有效的。2 )如果server已經(jīng)達到了 max_fails所設置的最大失敗次數(shù),從這一時刻開始算起,在fail_timeout 所設置的時間段內(nèi), server是無效的。3 )當server的失敗次數(shù)(peers->peeri.fails )為最大的失敗次數(shù),當距離現(xiàn)在的時間超過了fail_timeout所設置的時間段,則令peers->peeri.fails =0 ,使得該server 重新有效。如果peers中所有的server都是無效的;就會嘗試去backup的數(shù)組中找一個有效的server,如果找到, 跳轉(zhuǎn)到2.2.3;如果仍然找不到,表示此時upstre
11、am 中無server可以使用。就會清空所有 peers數(shù)組中所有的失敗次數(shù)的記錄,使所有 server都變成了有效。這樣做的目的是為了防止下次再有請求訪問時,仍找不到一個有效的server.for (i = 0; i < peers _>nu mber; i+) peers->peeri.fails = 0;并返回錯誤碼給ngi nx,nginx得到此錯誤碼后,就不再向后臺 server發(fā)請求,而是在nginx 的錯誤日志中輸出" no live upstreams while connecting to upstream”的記錄(這就是no live產(chǎn)生的真正原
12、因),并直接返回給請求的客戶端一個502的錯誤。當找到一個有效的 server后,令該server的current_weight減一,然后,nginx就會嘗試與該server建立連接。如果成功建立連接,跳轉(zhuǎn)到2.2.4;否則 跳轉(zhuǎn)到如果nginx在等待了 proxy_connect_timeout所設置的時間段后(如3秒),連接仍然沒有建立成功,ngi nx 就在錯誤日志中輸出"upstream timed out (110:Connection timed out) while connecting to upstream” 的記錄 (這就是 timed
13、 out(連接超時)產(chǎn)生的真正原因).2.2.3 .2 接著,讓當前 server的失敗次數(shù)加一(peer->fails+; 如果該server最大 失敗次達到最大失敗次數(shù),將在一段時間內(nèi)該server是無效的),如果當前nginx與后臺服務器的嘗試次數(shù)沒有達到 upstream 中server的總個數(shù),重新跳轉(zhuǎn)到2.2.2,輪循下一個 server,繼續(xù)嘗試。如果達到最大嘗試次數(shù),就表示 uptream 中所有的server都嘗試了一 遍,沒有server可以提供服務,返回一個 504的錯誤給客戶端。當nginx與server建立連接成功后,如果server響應請求,把處理結(jié)果返回給n
14、gi nx,跳轉(zhuǎn)到225;否則跳轉(zhuǎn)到2.2412.241如果nginx在等待了 proxy_read_timeout 所設置的時間段后(如30秒), server仍然沒有對nginx發(fā)送來的請求作出響應,nginx就在錯誤日志中輸出“ upstream timed out (110: Connection timed out) while readi ngresp onse header fromupstream ”的記錄(這就是 timed out(讀超時)產(chǎn)生的真正原因) 接著,讓當前server的失敗次數(shù)加一 (peer->fails+; 如果該server最 大失敗
15、次達到最大失敗次數(shù),將在一段時間內(nèi)該server是無效的),如果當前nginx與后臺服務器的嘗試次數(shù)沒有達到 upstream 中server的總個數(shù),重新跳轉(zhuǎn)到 2.2.2,輪循下一 個server,繼續(xù)嘗試。如果達到最大嘗試次數(shù), 就表示uptream 中所有的server都嘗試了 一遍,沒有server可以提供服務,返回一個 504的錯誤給客戶端。2.2.5 Nginx收到后臺server傳送過來的結(jié)果后,就會返回給客戶端一個200的正確結(jié)果。這樣,nginx作為反向代理的功能也就完成了。三、Ip_hash 策略3.1 Ip_hash和RR的策略有兩點不同在于:當一個客戶請求到nginx
16、后,1)nginx如何選擇一個最初的server,2 )以及當前選擇的 server不能提供服務時,如何選擇下一個server.3.2 RR策略回顧從第二部分對RR的介紹中,我們知道:當一個客戶請求到達后,RR策略是從 upstream 的所有server中選擇一個當前權(quán)重(current_weight)最大的 server 作為最初的 server.upstream 的所有server是按照由高到低排序后存儲在一個peers數(shù)組中,當最初選擇的server不能提供服務時,RR策略就會選擇peers數(shù)組中的下一個元素作為當前server,繼續(xù)嘗試,如果已經(jīng)達到數(shù)組的最大元素,就會從第一個元素再
17、輪循。3.3 ip_hash策略介紹在ip_hash策略中,它選擇最初的server的方法是根據(jù)請求客戶端的IP計算出一個哈希值,再根據(jù)哈希值選擇后臺的服務器。1 )由IP計算哈希值的算法如下,其中公式中hash初始值為89 , iphp->addri 表示客戶端的IP,通過三次哈希計算得出一個IP的哈希值:for (i = 0; i < 3; i+) hash = ( hash * 113 + iphp->addri) % 6271;2) 在選擇下一個 server時,ip_hash的選擇策略是這樣的:它在上一次哈希值的基礎 上,再次哈希,就會得到一個全新的哈希值,再根據(jù)哈希值選擇另外一個后臺的服務器。哈希算法仍然是for (i = 0; i < 3; i+) hash = ( hash * 113 + iphp->addri) % 6271;在這種ip_hash策略,如果一個后臺服務器不能提供提服務(連接超時或讀超時),該服務器的失敗次數(shù)就會加一, 當一個服務器的失敗次數(shù)達到 max_fails所設置的值,就會在 fail_timeout 所設置的時間段內(nèi)不能對外提供服務,這點和RR是一致的。如果當前server不能提供服務,就會根
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 龍血竭片的智能監(jiān)控制劑技術(shù)研究-洞察及研究
- 靶向疫苗耐藥策略探討-洞察及研究
- 國際稅收規(guī)則對我國稅務師的影響-洞察及研究
- 教育學期中考試在線作業(yè)題目
- 跨文化溝通在國際貿(mào)易中的作用-洞察及研究
- 物業(yè)管理責任及考核細則
- 電池多尺度失效分析-洞察及研究
- 氣候變化影響評估-第9篇-洞察及研究
- 安全員A證考試題庫檢測題型完整附答案詳解
- 安全員A證考試題庫含答案詳解(考試直接用)
- 軍采協(xié)議供貨合同范本
- 2025年醫(yī)院年度應急演練計劃表
- 衛(wèi)生所藥品自查自糾報告
- 2024年新高考Ⅰ卷英語真題(原卷+答案)
- 機械安裝安全培訓課件
- 2025年國家審計署公務員面試模擬題及備考指南
- 養(yǎng)老機構(gòu)傳染病疫情報告制度及流程
- 港口碼頭安全生產(chǎn)委員會組織架構(gòu)及職責
- 《快件處理員理論知識考核要素細目表四級》
- 種植養(yǎng)殖基地管理制度
- 東莞產(chǎn)業(yè)園區(qū)發(fā)展:歷程、現(xiàn)狀、挑戰(zhàn)與突破路徑
評論
0/150
提交評論