天天看點

nginx負載均衡

今天我們來學習下有關nginx的負載均衡配置。nginx的負載均衡是通過nginx的upstream子產品和proxy_pass反向代理來實作的。

說明:有三台伺服器,前端的a伺服器使用nginx進行負載均衡配置。後端是兩台配置的相同伺服器,以通路a.ilanni.com這個域名為例。結構圖,如下:

nginx負載均衡

a伺服器對外(公網)開放80端口,b、c伺服器就是兩台配置相同的伺服器。b伺服器開放8080端口,c伺服器開放8090端口。當用戶端通路a.ilanni.com域名時,a伺服器根據nginx的upstream子產品相應政策進行配置設定用戶端通路到b伺服器還是c伺服器。

注意b伺服器和c伺服器内容是相同的。但是在此,我們為了看到實驗效果,我在b、c伺服器配置了不同的内容。b伺服器的預設頁面現實的内容為:the server is web1_192.168.1.249:8080。c伺服器的預設頁面現實的内容為:the server is web2_192.168.1.249:8090。如下:

nginx負載均衡

nginx負載均衡的預設是使用輪詢方式進行配置設定的,而且預設的權重為1,并且權重越大被通路的幾率越大。

我們先配置a伺服器的nginx,如下:

cat /usr/local/nginx/conf/nginx.conf|grep -v ^#|grep -v ^$

upstream a.ilanni.com {

server 192.168.1.248:8080;

server 192.168.1.249:8090;

}

location / {

proxy_pass http://a.ilanni.com;

proxy_set_header host $host;

proxy_set_header x-real-ip $remote_addr;

proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

nginx負載均衡

第二部分就是我們要反向代理的域名,注意在此我們監聽的是80端口,而且這個server标簽中,我并沒有配置server_name。其實配置server_name也是可以的,不過最後的效果是一樣的,這個是經過測試的。

第三部分,在此我配置的就是一個虛拟主機。監聽的是8080端口,并且在此我也配置了server_name。這個主要是為了做對比使用的。

我們現在先啟動a伺服器的nginx,并且通路a.ilanni.com:8080。如下:

nginx負載均衡

現在開始配置b、c伺服器的nginx,配置内容如下:

nginx負載均衡
nginx負載均衡

b、c伺服器的nginx配置完畢後,我們現在來啟動各自的nginx服務并通路,如下:

nginx負載均衡

通過上圖,我們可以看到b、c伺服器的nginx已經正常通路了。那麼我現在來通路http://a.ilanni.com看看能不能達到我們所要的效果。如下:

nginx負載均衡

可以看到我們現在通路http://a.ilanni.com已經反向代理到upstream下的b伺服器,并且現在顯示的是b伺服器的内容。

再次重新整理頁面,顯示如下:

nginx負載均衡

重新整理頁面後,你會發現這次顯示的是c伺服器的内容。也說明http://a.ilanni.com已經反向代理到c伺服器上。

你可以多次重新整理頁面,會發現顯示的内容是b、c伺服器交替出現。

為什麼會是這樣呢?

其實在文章前面,我已經介紹了nginx的upstream負載均衡,在沒有其他配置的情況預設使用的政策是輪詢方式的,而且預設的權重為1。

也就是說:upstream a.ilanni.com {

中b、c伺服器的預設權重都是一樣為1。那麼在nginx輪詢時,是以b、c伺服器會交替出現。

如果我們現在把b伺服器的權重設定為5,c伺服器還是使用預設看看實際情況。配置如下:

server 192.168.1.248:8080 weight=5;

nginx負載均衡

<b>注意以上實驗,我們是在a、b、c伺服器是在同一個區域網路,對公網來說隻是開放了a伺服器的80端口。如果這三台伺服器全部是公網ip的話,那就是我們下篇文章要介紹的内容了,有關nginx反向代理的使用。</b>

到此,有關nginx的負載均衡我們基本上介紹完畢後。下面在輔助介紹下,nginx的upstream目前支援以下幾種方式的配置設定:

1)、輪詢(預設) 每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2)、weight 指定輪詢幾率,weight和通路比率成正比,用于後端伺服器性能不均的情況。設定伺服器的權重,權重數值越高,被配置設定到用戶端的請求次數越多,預設值為1。

3)、ip_hash 每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決session的問題。

4)、fair(第三方) 按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。

5)、url_hash(第三方)按通路url的hash結果來配置設定請求,使每個url定向到同一個後端伺服器,後端伺服器為緩存時比較有效。

繼續閱讀