国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Nginx > 正文

Nginx負(fù)載均衡詳細(xì)介紹

2024-08-30 12:28:14
字體:
供稿:網(wǎng)友

如果只有一臺(tái)服務(wù)器時(shí),這個(gè)服務(wù)器掛了,那么對(duì)于網(wǎng)站來說是個(gè)災(zāi)難.因此,這時(shí)候的負(fù)載均衡就會(huì)大顯身手了,它會(huì)自動(dòng)剔除掛掉的服務(wù)器.

下面簡單的介紹下我使用Nginx做負(fù)載的體會(huì)

下載---安裝Nginx這些不介紹了,前篇有介紹.

windows和Linux下配置Nginx負(fù)載的寫法一樣,故不分開介紹.

Nginx負(fù)載均衡一些基礎(chǔ)知識(shí):

nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(默認(rèn))
每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
2)、weight
指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
2)、ip_hash
每個(gè)請求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。
3)、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。
4)、url_hash(第三方)

 

配置:

在http節(jié)點(diǎn)里添加:

#定義負(fù)載均衡設(shè)備的 Ip及設(shè)備狀態(tài)
upstream myServer {

server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}

在需要使用負(fù)載的Server節(jié)點(diǎn)下添加

proxy_pass http://myServer;

upstream 每個(gè)設(shè)備的狀態(tài):

down 表示單前的server暫時(shí)不參與負(fù)載
weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。
max_fails :允許請求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤
fail_timeout:max_fails 次失敗后,暫停的時(shí)間。
backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。

Nginx還支持多組的負(fù)載均衡,可以配置多個(gè)upstream 來服務(wù)于不同的Server.

配置負(fù)載均衡比較簡單,但是最關(guān)鍵的一個(gè)問題是怎么實(shí)現(xiàn)多臺(tái)服務(wù)器之間session的共享

下面有幾種方法(以下內(nèi)容來源于網(wǎng)絡(luò),第四種方法沒有實(shí)踐.)

1) 不使用session,換作cookie

能把session改成cookie,就能避開session的一些弊端,在從前看的一本J2EE的書上,也指明在集群系統(tǒng)中不能用session,否則惹出禍端來就不好辦。如果系統(tǒng)不復(fù)雜,就優(yōu)先考慮能否將session去掉,改動(dòng)起來非常麻煩的話,再用下面的辦法。

2) 應(yīng)用服務(wù)器自行實(shí)現(xiàn)共享

asp.net可以用數(shù)據(jù)庫或memcached來保存session,從而在asp.net本身建立了一個(gè)session集群,用這樣的方式可以令 session保證穩(wěn)定,即使某個(gè)節(jié)點(diǎn)有故障,session也不會(huì)丟失,適用于較為嚴(yán)格但請求量不高的場合。但是它的效率是不會(huì)很高的,不適用于對(duì)效率 要求高的場合。

以上兩個(gè)辦法都跟nginx沒什么關(guān)系,下面來說說用nginx該如何處理:

3) ip_hash

nginx中的ip_hash技術(shù)能夠?qū)⒛硞€(gè)ip的請求定向到同一臺(tái)后端,這樣一來這個(gè)ip下的某個(gè)客戶端和某個(gè)后端就能建立起穩(wěn)固的session,ip_hash是在upstream配置中定義的:

upstream backend {
server 127.0.0.1:8080 ;
server 127.0.0.1:9090 ;
ip_hash;
}

ip_hash是容易理解的,但是因?yàn)閮H僅能用ip這個(gè)因子來分配后端,因此ip_hash是有缺陷的,不能在一些情況下使用:

1/ nginx不是最前端的服務(wù)器。ip_hash要求nginx一定是最前端的服務(wù)器,否則nginx得不到正確ip,就不能根據(jù)ip作hash。譬如使用的是squid為最前端,那么nginx取ip時(shí)只能得到squid的服務(wù)器ip地址,用這個(gè)地址來作分流是肯定錯(cuò)亂的。

2/ nginx的后端還有其它方式的負(fù)載均衡。假如nginx后端又有其它負(fù)載均衡,將請求又通過另外的方式分流了,那么某個(gè)客戶端的請求肯定不能定位到同一臺(tái)session應(yīng)用服務(wù)器上。這么算起來,nginx后端只能直接指向應(yīng)用服務(wù)器,或者再搭一個(gè)squid,然后指向應(yīng)用服務(wù)器。最好的辦法是用location作一次分流,將需要session的部分請求通過ip_hash分流,剩下的走其它后端去。

4) upstream_hash

為了解決ip_hash的一些問題,可以使用upstream_hash這個(gè)第三方模塊,這個(gè)模塊多數(shù)情況下是用作url_hash的,但是并不妨礙將它用來做session共享:

假如前端是squid,他會(huì)將ip加入x_forwarded_for這個(gè)http_header里,用upstream_hash可以用這個(gè)頭做因子,將請求定向到指定的后端:

可見這篇文檔:http://www.sudone.com/nginx/nginx_url_hash.html

在文檔中是使用$request_uri做因子,稍微改一下:

hash $http_x_forwarded_for;

這樣就改成了利用x_forwarded_for這個(gè)頭作因子,在nginx新版本中可支持讀取cookie值,所以也可以改成:

hash $cookie_jsessionid;

假如在php中配置的session為無cookie方式,配合nginx自己的一個(gè)userid_module模塊就可以用nginx自發(fā)一個(gè)cookie,可參見userid模塊的英文文檔:
http://wiki.nginx.org/NginxHttpUserIdModule
另可用姚偉斌編寫的模塊upstream_jvm_route:http://code.google.com/p/nginx-upstream-jvm-route/

PS:繼續(xù)求救,為什么部署在Nginx 服務(wù)器上的頁面樣式會(huì)顯示不對(duì)呢?

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 隆安县| 眉山市| 双辽市| 扎赉特旗| 丰镇市| 吴堡县| 玛纳斯县| 昌都县| 甘南县| 崇阳县| 廊坊市| 泸定县| 武强县| 巩义市| 绥德县| 农安县| 资源县| 兴化市| 泰来县| SHOW| 靖江市| 庆云县| 封丘县| 游戏| 丹寨县| 重庆市| 安庆市| 且末县| 彭山县| 海南省| 枣阳市| 泸水县| 自治县| 甘谷县| 清河县| 涿州市| 五大连池市| 博白县| 泸西县| 桐城市| 富宁县|