Nginx多種負(fù)載均衡策略搭建
背景介紹
上篇介紹了利用Nginx反向代理實(shí)現(xiàn)負(fù)載均衡,本文詳細(xì)講述Nginx下的幾種負(fù)載均衡策略。
輪詢
輪詢,顧名思義,就是輪流請求,基于上篇文章的介紹,我們將負(fù)載均衡策略聚焦于default.conf文件的upstream。
upstream backend {
server web02:80;
server web03:80;
}
在瀏覽器中對localhost:8080連續(xù)發(fā)出請求,根據(jù)nginx請求日志可以看出web02與web03訪問的次數(shù)是相同的。
web01 | 172.24.0.1 - - [26/Jun/2019:10:03:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:10:03:06 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:10:03:07 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.3 - - [26/Jun/2019:10:03:07 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:10:05:25 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:10:05:25 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.3 - - [26/Jun/2019:10:05:26 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:10:05:26 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.3 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
加權(quán)輪詢
加權(quán)輪詢是指基于上文中的輪詢,加上一定的權(quán)重,使得某個(gè)服務(wù)器被轉(zhuǎn)發(fā)的次數(shù)更多一些,加權(quán)通過在IP后方拼接weight實(shí)現(xiàn)。
upstream backend {
server web02:80 weight=5;
server web03:80 weight=1;
}
weight值越大,所分配的請求就越多,根據(jù)nginx的請求日志可以看出web02被訪問了8次,web03被訪問了兩次。
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:13 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:13 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.3 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:18 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:18 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.3 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.3 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
ip_hash
如果一個(gè)客戶端的請求可能被轉(zhuǎn)發(fā)到任何一臺服務(wù)器,可能會(huì)導(dǎo)致每臺服務(wù)器都緩存了該客戶端的信息,比較浪費(fèi)資源,ip_hash作用就是通過客戶端IP的前三個(gè)部分計(jì)算出key,以便將同一個(gè)客戶端的請求轉(zhuǎn)發(fā)到指定的服務(wù)器中,配置的方法比較簡單,只需要在upstream上方加一行代碼即可。
upstream backend {
ip_hash;
server web02:80;
server web03:80;
}
重復(fù)請求了5次,通過日志看出請求一直被鎖定在了web03上。
web01 | 172.24.0.1 - - [27/Jun/2019:11:48:15 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.2 - - [27/Jun/2019:11:48:15 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01 | 172.24.0.1 - - [27/Jun/2019:11:48:22 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.2 - - [27/Jun/2019:11:48:22 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web03 | 172.24.0.2 - - [27/Jun/2019:11:48:23 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01 | 172.24.0.1 - - [27/Jun/2019:11:48:23 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.2 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01 | 172.24.0.1 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.2 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
url_hash
這種模式是將url進(jìn)行哈希,然后定位到具體的某一臺服務(wù)器,相同的url永遠(yuǎn)會(huì)被轉(zhuǎn)發(fā)到同一臺服務(wù)器上。
upstream backend {
hash $request_uri;
server web02:80;
server web03:80;
}
通過瀏覽器訪問兩次http://localhost:8080,通過日志可以看到轉(zhuǎn)發(fā)被固定在了web03。
web01 | 172.24.0.1 - - [27/Jun/2019:11:58:31 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.4 - - [27/Jun/2019:11:58:31 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03 | 172.24.0.4 - - [27/Jun/2019:11:58:38 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [27/Jun/2019:11:58:38 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
在鏈接后面拼接一些參數(shù),就可以看到轉(zhuǎn)發(fā)發(fā)生了變化,固定在了web02,隨著參數(shù)的變化,請求也會(huì)采用輪詢的方式轉(zhuǎn)發(fā)給服務(wù)器,但使用過的url再訪問就不會(huì)再變化了。
web02 | 172.24.0.4 - - [27/Jun/2019:11:59:54 +0000] "GET /?a=1 HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [27/Jun/2019:11:59:54 +0000] "GET /?a=1 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02 | 172.24.0.4 - - [27/Jun/2019:11:59:55 +0000] "GET /?a=1 HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01 | 172.24.0.1 - - [27/Jun/2019:11:59:55 +0000] "GET /?a=1 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

浙公網(wǎng)安備 33010602011771號