一毫胜、簡述LVS調(diào)度方案及應(yīng)用場景
調(diào)度算法可分為靜態(tài)調(diào)度和動態(tài)調(diào)度
1、靜態(tài)調(diào)度即根據(jù)算法本身的結(jié)果來進(jìn)行調(diào)度.
1.1荐吉、輪詢調(diào)度算法(RR)口渔,輪詢算法適用于所有服務(wù)器的處理性能相近的應(yīng)用場景缺脉,因?yàn)檩喸兯惴ㄏ鄬唵危湔{(diào)度方式是不管服務(wù)器當(dāng)前的連接數(shù)和響應(yīng)速度如何的勤揩。因此當(dāng)后端服務(wù)器的處理性能殘次不齊陨亡,請求服務(wù)的時間變化較大時深员,輪詢算法很容易導(dǎo)致服務(wù)器間的負(fù)載不均衡。因此輪詢算法只適用于后端服務(wù)器性能相近遮糖,請求時間變化不大的場景使用欲账。
1.2芭概、加權(quán)輪詢調(diào)度算法(WRR)可以理解為輪詢算法的進(jìn)階版。通過設(shè)置權(quán)重來表示后端服務(wù)器的處理型男踢故,權(quán)重越大表示服務(wù)器能的處理能力越強(qiáng)殿较。但是當(dāng)請求時間變化很大時,加權(quán)輪詢算法依然會導(dǎo)致服務(wù)器間的負(fù)載不平滑劳闹。
1.3洽瞬、目標(biāo)地址哈希調(diào)度算法(DH)是指針對通過計(jì)算目前地址的散列(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ù)器,從而實(shí)現(xiàn)會話綁定后添。
2遇西、動態(tài)調(diào)度算法即指結(jié)合算法及當(dāng)前每個后端服務(wù)器的負(fù)載狀態(tài)進(jìn)行計(jì)算調(diào)整選出最優(yōu)的后端服務(wù)器進(jìn)行分配負(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ìn)版弯院,根據(jù)算法(active+1)*256/weight的結(jié)果,將請求分配給計(jì)算結(jié)果最小的服務(wù)器泪掀。
2.4听绳、從不排隊(duì)調(diào)度(NQ),增強(qiáng)改進(jìn)的sed算法异赫,即在sed算法結(jié)果之后增加了輪詢的機(jī)制椅挣。如果有臺real Server的連接數(shù)=0直接分配,不需要再進(jìn)行sed運(yùn)算,而是直接分配請求連接到指定的服務(wù)器塔拳。因此這種算法就會盡量不然請求出現(xiàn)排隊(duì)的情況鼠证,即避免了某個節(jié)點(diǎn)非常繁忙而其他節(jié)點(diǎn)相對空閑的情況。避免了權(quán)重小的節(jié)點(diǎn)不會出現(xiàn)沒有請求被調(diào)度的情況靠抑。
2.5、基于局部性的最少連接(LBLC),基于局部性的最少連接算法是針對請求報文的目標(biāo)IP地址的負(fù)載均衡調(diào)度颂碧,主要用于Cache集群系統(tǒng)荠列,因?yàn)镃ache集群中客戶請求報文的目標(biāo)IP地址是變化的,這里假設(shè)任何后端服務(wù)器都可以處理任何請求载城,算法的設(shè)計(jì)目標(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模塊:
實(shí)現(xiàn)基于ip的訪問控制功能
- 26.allow address|CIDR|unix:|all
- 27.deny address|CIDR|unix:|all
- http,server,location,limit_except
2)、 ngx_http_auth_basic_module模塊
實(shí)現(xiàn)基于用戶的訪問控制,使用basic機(jī)制進(jìn)行用戶認(rèn)證
- 28.auth_basic string|off
- 29.auth_basic_user_file file
location /admin/ {
alias /webapps/app1/data/;
auth_basic "Admin Area";
auth_basic_use_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
參數(shù)選項(xiàng) | 解釋說明 |
---|---|
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 {
syub_status;
}
4)率拒、ngx_http_log_module模塊
- log_format name string...
- string可以使用nginx核心模塊及其他模塊內(nèi)嵌的變量
- 課外作業(yè): 為nginx定義使用類似于httpd的combined格式的訪問日志
- 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_use: 在inactive指定的時長內(nèi)訪問大于等于此值方可被當(dāng)做活動項(xiàng)
- inactive: 非活動時長
- valid: 驗(yàn)證緩存中各緩存項(xiàng)是否為活動項(xiàng)的時間間隔
5)、 ngx_http_gzip_module模塊
- 1.gzip on|off
- 2.gzip_comp_level level
- 3.gzip_disable regex....
- 4.gzip_min_length length
- 啟用壓縮功能的響應(yīng)報文大小闕值
- 5.gzip_buffers number size
- 支持實(shí)現(xiàn)壓縮功能時為其配置的緩沖區(qū)數(shù)量及每個緩存區(qū)的大小
- 6.gzip_proxied off|expired|no-cache|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的值為此三者中任何一個,則啟用壓縮功能
- 7.gzip_types mime-type...
- 壓縮過濾器,僅對此處設(shè)定的MIME類型的內(nèi)容啟用壓縮功能
6)禁荒、 ngx_http_ssl_module模塊
- 1.ssl on|off
- 開啟或關(guān)閉ssl功能
- 2猬膨、ssl_certificate file
- 當(dāng)前虛擬主機(jī)使用PEM格式的證書文件
- 3、ssl_certificate_key file
- 當(dāng)前虛擬主機(jī)上與其證書匹配的私鑰文件
- 4呛伴、ssl_protocols [SSLv2][SSLv3][TLSv1][TLSv1.1][TLSv1.2]
- 支持ssl協(xié)議版本,默認(rèn)為后三個
- 5勃痴、ssl_session_cache off|none|[builtin[:size]][shared:name:size]
- builtin[:size]: 使用OpenSSL內(nèi)建的緩存,此緩存為每worker進(jìn)程私有
- [shared:name:size]: 在各worker之間使用一個共享的緩存
- 6、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所描述的模式進(jìn)行檢查,而后完成替換
- 1沛申、rewrite regex replacement [flag]
- 將用戶請求的URI基于regex所描述的模式進(jìn)行檢查,匹配到時將其替換為replacement指定的新的URI
- 注意: 如果在同一級配置塊中存在多個rewrite規(guī)則,那么會自上而下逐個檢查;被某條件規(guī)則替換完成后,會重新一輪的替換檢查,因此,隱含有循環(huán)機(jī)制;[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制;
- 如果replacement是以http://或https://開頭,則替換結(jié)果會直接以重向返回給客戶端
- 301: 永久重定向
- [flag]:
|參數(shù)選項(xiàng)|解釋說明|
| :-------- | :--------|
|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ā)起請求|
- 2、return
- return conde [text];
- return code URL;
- return URL;
- 3姐军、rewrite_log on|off
- 是否開啟重寫日志
- 4铁材、if(condition){...}
- 引入一個新的配置上寫文;條件滿足時,執(zhí)行配置塊中的配置指令;server,location
- condition:
| 比較操作符 | 解釋說明 |
| :-------- | --------|
|==| 等于|
|!=|不等于|
|~|模式匹配,區(qū)分字符大小寫|
|~*|模式匹配,不區(qū)分字符大小寫|
|!~|模式不匹配,區(qū)分字符大小寫|
|!~*|模式不匹配,不區(qū)分字符大小寫|
|文件及目錄存在性判斷|解釋說明|
| :-------- | --------|
|-e|!-e|
|-f|!-f|
|-d|!-d|
|-x|!-x|
- 5、set $variable value
- 用戶自定義變量
8)奕锌、 ngx_http_referer_module模塊
- 1衫贬、valid_referers none|blocked|server_names|string...;
- 定義referer首部的合法可用值
- none:請求報文首部沒有referer首部
- blocked: 請求報文的referer首部沒有值
- server_names: 參數(shù),其可以有值作為主機(jī)名或主機(jī)名模式
- arbitrary_string:直接字符串,但可使用*作通配符
- regular expreseeion:被指定的正則表達(dá)式模式匹配到的字符串;要使用~打頭,例如 ~.*\\.magedu\\.com;
- 配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
if($invalid_referer){
return 403;
}