LVS調(diào)度方案及NGINX模塊

簡述LVS調(diào)度方案及應(yīng)用場景

調(diào)度算法可以分為靜態(tài)調(diào)度和動態(tài)調(diào)度

1、靜態(tài)調(diào)度即根據(jù)算法本身的結(jié)果來進行調(diào)度**

1.1慷妙、輪詢調(diào)度算法(RR)

輪詢算法適用于所有服務(wù)器的處理性能相近的應(yīng)用場景,因為輪詢算法相對簡單,其調(diào)度方式是不管服務(wù)器當(dāng)前的連接數(shù)和響應(yīng)速度如何的。因此當(dāng)后端服務(wù)器的處理性能殘次不齊袁稽,請求服務(wù)的時間變化較大時,輪詢算法很容易導(dǎo)致服務(wù)器之間的負(fù)載不均衡擒抛。因此輪詢算法只適用于后端服務(wù)器性能相近推汽,請求時間變化不大的場景使用。

1.2歧沪、加權(quán)輪詢調(diào)度算法(WRR)

可以理解為輪詢算法的進階版歹撒。通過設(shè)置權(quán)重來表示后端服務(wù)器的處理型男,權(quán)重越大表示服務(wù)器的處理能力越強诊胞,但是當(dāng)請求時間變化很大時暖夭,加權(quán)輪詢算法依然會導(dǎo)致服務(wù)器間的負(fù)載不平滑。

1.3撵孤、目標(biāo)地址哈希調(diào)度算法(DH)

指針對通過計算目前地址的散列(HASH)函數(shù)來將一個目標(biāo)IP地址映射到一臺服務(wù)器迈着。DH算法首先根據(jù)請求的目標(biāo)IP地址作為散列鍵(Hask key),從靜態(tài)分配的散列表中找出對應(yīng)的服務(wù)器邪码。若該服務(wù)器是可用且未超載裕菠,則將請求發(fā)送到該服務(wù)器,否則返回為空闭专。此調(diào)度算法可保證用戶訪問同一個應(yīng)用服務(wù)時奴潘,請求均被送往同一個后端服務(wù)器。典型應(yīng)用場景為正向代理緩存場景中的負(fù)載均衡影钉。

1.4画髓、源地址散列調(diào)度算法(SH)

是指根據(jù)請求的源IP地址作為散列鍵(Hash key),從靜態(tài)分配的散列表中找出其對應(yīng)的服務(wù)器平委。若服務(wù)器是可能且未超載雀扶,否則將返回空。SH算法可將來自于同一個IP地址的請求始終發(fā)往同一個后端服務(wù)器肆汹,從而實現(xiàn)會話綁定愚墓。

2、動態(tài)調(diào)度算法即指結(jié)合算法及當(dāng)前每個后端服務(wù)器的負(fù)載狀態(tài)進行計算調(diào)整選出最優(yōu)的后端服務(wù)器進行分配負(fù)載昂勉。

2.1浪册、最小連接調(diào)度算法(LC)

是指把新的連接請求分配到當(dāng)前連接數(shù)最小的服務(wù)器。調(diào)度器會記錄各個服務(wù)器已建立連接的數(shù)目岗照,當(dāng)一個請求被調(diào)度分配到一個后端服務(wù)器村象,其連接數(shù)就加一;當(dāng)連接超時或終止時攒至,其連接數(shù)減一厚者。
LC算法則會把新的連接請求分配到已建立連接數(shù)最小的服務(wù)器上,保證后端服務(wù)器迫吐,每一個都始終處于工作狀態(tài)库菲。
此算法適用于后端服務(wù)器性能差不多,請求時間不一樣的情況下使用志膀。

2.2熙宇、加權(quán)最小連接調(diào)度算法(WLC)

是在一個服務(wù)器性能差異較大的集群中,根據(jù)最小連接數(shù)及服務(wù)器的權(quán)重來分配的連接請求溉浙。對比LC算法來說烫止,WLC可優(yōu)化負(fù)載均衡的性能,使得具有較高權(quán)重的服務(wù)器承受較大比例的活動連接負(fù)載戳稽。

2.3馆蠕、最小期望延遲調(diào)度算法(SED)

是WLC算法的改進版,根據(jù)算法(active+1)*256/weight的結(jié)果惊奇,將請求分配給計算結(jié)果最小的服務(wù)器互躬。

2.4、從不排隊調(diào)度(NQ)

增強改進的sed算法赊时,即在sed算法結(jié)果之后增加了輪詢的機制吨铸。如果有臺real server的連接數(shù)=0直接分配,不需要再進行sed運算祖秒,而是直接分配請求連接到指定的服務(wù)器诞吱。
因此這種算法就會盡量不讓請求出現(xiàn)排隊的情況,即避免了某個節(jié)點非常繁忙而其他節(jié)點相對空閑的情況竭缝。
避免了權(quán)重小的節(jié)點不會現(xiàn)沒有請求被調(diào)度的情況房维。

2.5、基于局部性的最少連接(LBLC)

基于局部性的最少連接算法是針對請求報文的目標(biāo)IP地址的負(fù)載均衡調(diào)度抬纸,主要用于cache集群系統(tǒng)咙俩,因為cache集群中客戶請求報文的目標(biāo)IP地址是變化的,這里假設(shè)任何后端服務(wù)器都可以處理任何請求,算法的設(shè)計目標(biāo)在服務(wù)器的負(fù)載基本平衡的情況下阿趁,將相同的目標(biāo)IP地址的請求調(diào)度到同一臺服務(wù)器膜蛔,來提高服務(wù)器的訪問局部性和主破cache命中率,從而調(diào)整整個集群系統(tǒng)的處理能力脖阵。

2.6皂股、基于局部性的帶復(fù)制功能的最少連接(LBLCR)

基于局部性的帶復(fù)制功能的最少連接調(diào)度算法也是針對目標(biāo)IP地址的負(fù)載均衡,該算法根據(jù)請求的目標(biāo)IP地址找出該 目標(biāo)IP地址對應(yīng)的服務(wù)器組命黔,按“最小連接”原則從服務(wù)器組中選出一臺服務(wù)器呜呐,若服務(wù)器沒有超載,將請求發(fā)送到該服務(wù)器悍募;若服務(wù)器超載蘑辑,則按“最小連接”原則從這個集群中選出一臺服務(wù)器,將該服務(wù)器加入服務(wù)器組中坠宴,將請求發(fā)送到該服務(wù)器洋魂。同時,當(dāng)該服務(wù)器組有一段時間沒有被修改啄踊,將最忙的服務(wù)器從服務(wù)器組中刪除忧设,以降低復(fù)制的程度。

詳細(xì)描述nginx模塊并舉例說明

1)ngx_http_access_module模塊:

實現(xiàn)基于IP的訪問控制功能

allow address | CIDR | unix: | all; 允許
deny address | CIDR | unix: | all;  拒絕

2)ngx_http_auth_basic_module模塊:

實現(xiàn)基于用戶的訪問控制颠通,使用basic機制進行用戶認(rèn)證

auth_basic string | off;
auth_basic_user_file file;

location /admin/ {
    alias /webapps/app1/data/;
    auth_basic "Admin Area";
    auth_basic_user_file /etc/nginx/.ngxpasswd;
}

注意:htpasswd命令由httpd-tools提供

3)ngx_http_stub_status_module模塊

用于輸出nginx的基于狀態(tài)信息

Active connections: 291 
server accepts handled requests
    16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106

Active connections: 活動狀態(tài)的連接數(shù)址晕;
accepts:已經(jīng)接受的客戶端請求的總數(shù);
handled:已經(jīng)處理完成的客戶端請求的總數(shù)顿锰;
requests:客戶端發(fā)來的總的請求數(shù)谨垃;
Reading:處于讀取客戶端請求報文首部的連接的連接數(shù);
Writing:處于向客戶端發(fā)送響應(yīng)報文過程中的連接數(shù)硼控;
Waiting:處于等待客戶端發(fā)出請求的空閑連接數(shù)刘陶;

stub_status
配置示例

location  /basic_status {
    stub_status;
}

4) ngx_http_log_module模塊

log_format name string ...;
    string可以使用nginx核心模塊及其它模塊內(nèi)嵌的變量;
                        
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access_log off;
                        
    訪問日志文件路徑牢撼,格式及相關(guān)的緩沖的配置匙隔;
        buffer=size
        flush=time 
                            
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
    open_log_file_cache off;
        緩存各日志文件相關(guān)的元數(shù)據(jù)信息;
                            
        max:緩存的最大文件描述符數(shù)量熏版;
        min_uses:在inactive指定的時長內(nèi)訪問大于等于此值方可被當(dāng)作活動項纷责;
        inactive:非活動時長;
        valid:驗正緩存中各緩存項是否為活動項的時間間隔撼短;

5) ngx_http_gzip_module模塊

gzip on | off;
    Enables or disables gzipping of responses.
                        
gzip_comp_level level;
    Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
                        
gzip_disable regex ...;
    Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
                        
gzip_min_length length;
    啟用壓縮功能的響應(yīng)報文大小閾值再膳; 
                        
gzip_buffers number size;
    支持實現(xiàn)壓縮功能時為其配置的緩沖區(qū)數(shù)量及每個緩存區(qū)的大小曲横;
                        
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
    nginx作為代理服務(wù)器接收到從被代理服務(wù)器發(fā)送的響應(yīng)報文后喂柒,在何種條件下啟用壓縮功能的;
        off:對代理的請求不啟用
        no-cache, no-store,private:表示從被代理服務(wù)器收到的響應(yīng)報文首部的Cache-Control的值為此三者中任何一個灾杰,則啟用壓縮功能蚊丐;
                            
gzip_types mime-type ...;
    壓縮過濾器,僅對此處設(shè)定的MIME類型的內(nèi)容啟用壓縮功能吭露;

------------------------------------分割線----------------------------

gzip  on;
gzip_comp_level 6;
gzip_min_length 64; 
gzip_proxied any;
gzip_types text/xml text/css  application/javascript;

6) ngx_http_ssl_module模塊

ssl on | off;
    Enables the HTTPS protocol for the given virtual server.
                        
ssl_certificate file;
    當(dāng)前虛擬主機使用PEM格式的證書文件吠撮;
                        
ssl_certificate_key file;
    當(dāng)前虛擬主機上與其證書匹配的私鑰文件;
                        
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
    支持ssl協(xié)議版本讲竿,默認(rèn)為后三個;
                        
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    builtin[:size]:使用OpenSSL內(nèi)建的緩存弄屡,此緩存為每worker進程私有题禀;
                        
    [shared:name:size]:在各worker之間使用一個共享的緩存;
                        
ssl_session_timeout time;
    客戶端一側(cè)的連接可以復(fù)用ssl session cache中緩存 的ssl參數(shù)的有效時長膀捷;

--------------------------------------分割線------------------------------

server {
    listen 443 ssl;
    server_name www.magedu.com;
    root /vhosts/ssl/htdocs;
    ssl on;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    ssl_session_cache shared:sslcache:20m;

7) ngx_http_rewrite_module模塊

將用戶請求的URI基于regex所描述的模式進行檢查迈嘹,而后完成替換;
            
rewrite regex replacement [flag]
    將用戶請求的URI基于regex所描述的模式進行檢查全庸,匹配到時將其替換為replacement指定的新的URI秀仲;
                
    注意:如果在同一級配置塊中存在多個rewrite規(guī)則,那么會自下而下逐個檢查壶笼;被某條件規(guī)則替換完成后神僵,會重新一輪的替換檢查,因此覆劈,隱含有循環(huán)機制保礼;[flag]所表示的標(biāo)志位用于控制此循環(huán)機制;
                
    如果replacement是以http://或https://開頭责语,則替換結(jié)果會直接以重向返回給客戶端炮障;
        301:永久重定向;
                    
    [flag]:
        last:重寫完成后停止對當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作坤候,而后對新的URI啟動新一輪重寫檢查胁赢;提前重啟新一輪循環(huán); 
        break:重寫完成后停止對當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作白筹,而后直接跳轉(zhuǎn)至重寫規(guī)則配置塊之后的其它配置智末;結(jié)束循環(huán);
        redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端遍蟋,由客戶端重新發(fā)起請求吹害;不能以http://或https://開頭;
        permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端虚青,由客戶端重新發(fā)起請求它呀;
                    
return
    return code [text];
    return code URL;
    return URL;
                
    Stops processing and returns the specified code to a client. 
                
rewrite_log on | off;
    是否開啟重寫日志;
                
if (condition) { ... }
    引入一個新的配置上下文 ;條件滿足時纵穿,執(zhí)行配置塊中的配置指令下隧;server, location;
                
    condition:
        比較操作符:
            ==:等于
            !=:不等于
            ~:模式匹配谓媒,區(qū)分字符大小寫淆院;
            ~*:模式匹配,不區(qū)分字符大小寫句惯;
            !~:模式不匹配土辩,區(qū)分字符大小寫;
            !~*:模式不匹配抢野,不區(qū)分字符大小寫拷淘;
        文件及目錄存在性判斷:
            -e, !-e
            -f, !-f
            -d, !-d
            -x, !-x
                        
set $variable value;
    用戶自定義變量 ;

8) ngx_http_referer_module模塊

valid_referers none | blocked | server_names | string ...;
    定義referer首部的合法可用值指孤;
                    
        none:請求報文首部沒有referer首部启涯;
        blocked:請求報文的referer首部沒有值;
        server_names:參數(shù)恃轩,其可以有值作為主機名或主機名模式结洼;
            arbitrary_string:直接字符串,但可使用*作通配符叉跛;
            regular expression:被指定的正則表達(dá)式模式匹配到的字符串松忍;要使用~打頭,例如 ~.*\.magedu\.com昧互;

配置示例:

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
                    
if($invalid_referer) {
    return http://www.magedu.com/invalid.jpg;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挽铁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敞掘,更是在濱河造成了極大的恐慌叽掘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玖雁,死亡現(xiàn)場離奇詭異更扁,居然都是意外死亡,警方通過查閱死者的電腦和手機赫冬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門浓镜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劲厌,你說我怎么就攤上這事膛薛。” “怎么了补鼻?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵哄啄,是天一觀的道長雅任。 經(jīng)常有香客問我,道長咨跌,這世上最難降的妖魔是什么沪么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮锌半,結(jié)果婚禮上禽车,老公的妹妹穿的比我還像新娘。我一直安慰自己刊殉,他們只是感情好殉摔,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冗澈,像睡著了一般钦勘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亚亲,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音腐缤,去河邊找鬼捌归。 笑死,一個胖子當(dāng)著我的面吹牛岭粤,可吹牛的內(nèi)容都是我干的惜索。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剃浇,長吁一口氣:“原來是場噩夢啊……” “哼巾兆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虎囚,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤角塑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淘讥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圃伶,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年蒲列,在試婚紗的時候發(fā)現(xiàn)自己被綠了窒朋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝗岖,死狀恐怖侥猩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抵赢,我是刑警寧澤欺劳,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布唧取,位于F島的核電站,受9級特大地震影響杰标,放射性物質(zhì)發(fā)生泄漏兵怯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一腔剂、第九天 我趴在偏房一處隱蔽的房頂上張望媒区。 院中可真熱鬧,春花似錦掸犬、人聲如沸袜漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宙攻。三九已至,卻和暖如春介褥,著一層夾襖步出監(jiān)牢的瞬間座掘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工柔滔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溢陪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓睛廊,卻偏偏與公主長得像形真,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子超全,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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

  • 一咆霜、簡述LVS調(diào)度方案及應(yīng)用場景 調(diào)度算法可分為靜態(tài)調(diào)度和動態(tài)調(diào)度 1、靜態(tài)調(diào)度即根據(jù)算法本身的結(jié)果來進行調(diào)度. ...
    佐岸的咖啡閱讀 765評論 0 0
  • 一嘶朱、簡述LVS調(diào)度方案及應(yīng)用場景 Lvs的調(diào)度算法可分為靜態(tài)調(diào)度和動態(tài)調(diào)度蛾坯。 - 靜態(tài)調(diào)度即根據(jù)算法本身的結(jié)果來進...
    N32_Diamond閱讀 426評論 0 0
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》,我們講述了瀏覽器端請求發(fā)起過程见咒,通過DNS域名解析服務(wù)器IP偿衰,并建...
    七寸知架構(gòu)閱讀 81,007評論 21 356
  • 【摘要】 面對大量用戶訪問、高并發(fā)請求改览,海量數(shù)據(jù)下翎,可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫宝当,存儲設(shè)備视事,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,561評論 0 24
  • 當(dāng)前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù)蚌吸,集群是將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù),這些...
    jiangmo閱讀 12,876評論 3 36