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

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

Nginx 負(fù)載均衡配置和策略

2024-06-28 15:59:56
字體:
供稿:網(wǎng)友

Nginx 的 HttpUpstreamModule 提供對后端(backend)服務(wù)器的簡單負(fù)載均衡。一個最簡單的 upstream 寫法如下:

upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com;}server { location / { PRoxy_pass http://backend; }}

1、后端服務(wù)器

通過 upstream 可以設(shè)定后端服務(wù)器,指定的方式可以是 ip 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析為多個地址,則這些地址都作為 backend。下面舉例說明:

upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3;}

第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。

2、負(fù)載均衡策略

Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權(quán)重 3 種方式。

默認(rèn)情況下,Nginx 會為你提供輪詢作為負(fù)載均衡策略。但是這并不一定能夠讓你滿意。比如,某一時段內(nèi)的一連串訪問都是由同一個用戶 Michael 發(fā)起的,那么第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然后是 backend1、backend2、backend3…… 在大多數(shù)應(yīng)用場景中,這樣并不高效。當(dāng)然,也正因如此,Nginx 為你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個后端服務(wù)器。具體的使用方式如下:

一個問題,用戶登陸后兩臺服務(wù)器的session不能共享,我研究了一下,發(fā)現(xiàn)有四個解決方案,1、session放入cookie中,2、session放入數(shù)據(jù)庫中,3、session使用memcache技術(shù)放入內(nèi)存中。這幾個一看就不是合適,不安全,I/O慢,內(nèi)存溢出。所以我覺得第四種方式比較合適,就是在nginx.conf中配置一個ip_hash,原理是ip_hash技術(shù)能夠?qū)⒛硞€ip的請求定向到同一臺后端,這樣一來這個ip下的某個客戶端和某個后端就能建立起穩(wěn)固的session。

upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com;}

這種策略中,用于進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是范圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼表示子網(wǎng),第四段號碼為本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達(dá)同一個 backend。當(dāng)然,如果所 hash 到的 backend 當(dāng)前不可用,則請求會被轉(zhuǎn)移到其他 backend。

再介紹一個和 ip_hash 配合使用的關(guān)鍵字:down。當(dāng)某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標(biāo)示出來,并且這樣被標(biāo)示的 server 就不會接受請求去處理。具體如下:

upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3;}

還可以使用指定權(quán)重(weight)的方式,如下:

upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4;}

默認(rèn)情況下 weight 為 1,對于上面的例子,第一個 server 的權(quán)重取默認(rèn)值 1,第二個是 4,所以相當(dāng)于第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此沖突的策略。

3、重試策略

可以為每個 backend 指定最大的重試次數(shù),和重試時間間隔。所使用的關(guān)鍵字是 max_fails 和 fail_timeout。如下所示:

upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s;}

在上例中,最大失敗次數(shù)為 3,也就是最多進行 3 次嘗試,且超時時間為 30秒。max_fails 的默認(rèn)值為 1,fail_timeout 的默認(rèn)值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應(yīng)時間。

有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數(shù)可能不會起作用。導(dǎo)致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:

upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s;}

4、備機策略

從 Nginx 的 0.6.7 版本開始,可以使用“backup”關(guān)鍵字。當(dāng)所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標(biāo)注的備機。必須要注意的是,backup 不能和 ip_hash 關(guān)鍵字一起使用。舉例如下:

upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊金霍洛旗| 陵水| 东台市| 综艺| 延川县| 工布江达县| 大宁县| 朔州市| 汽车| 海口市| 贡山| 遂溪县| 广河县| 潞城市| 金寨县| 柘城县| 六枝特区| 克什克腾旗| 额尔古纳市| 礼泉县| 开平市| 西盟| 井研县| 灵川县| 中江县| 盐山县| 邵阳县| 扎赉特旗| 逊克县| 山丹县| 炉霍县| 萍乡市| 齐河县| 桂林市| 景泰县| 濉溪县| 清丰县| 香河县| 罗江县| 凌源市| 南和县|