本文由秀依林楓提供友情贊助,首發于爛泥行天下。
今天我們來學習下有關nginx的負載均衡配置。nginx的負載均衡是通過nginx的upstream模塊和PRoxy_pass反向代理來實現的。
說明:有三臺服務器,前端的A服務器使用nginx進行負載均衡配置。后端是兩臺配置的相同服務器,以訪問a.ilanni.com這個域名為例。結構圖,如下:
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負載均衡的默認是使用輪詢方式進行分配的,而且默認的權重為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;
}
注意上圖中,標記出來的第一部分。其中upstream就是做負載均衡使用的。http://a.ilanni.com;就是我們要訪問的域名,通過proxy_pass反向代理到upstream下的服務器中。
第二部分就是我們要反向代理的域名,注意在此我們監聽的是80端口,而且這個server標簽中,我并沒有配置server_name。其實配置server_name也是可以的,不過最后的效果是一樣的,這個是經過測試的。
第三部分,在此我配置的就是一個虛擬主機。監聽的是8080端口,并且在此我也配置了server_name。這個主要是為了做對比使用的。
我們現在先啟動A服務器的nginx,并且訪問a.ilanni.com:8080。如下:
可以看到目前A服務器的nginx已經可以正常訪問了。注意我們在此訪問的是http://a.ilanni.com:8080。
現在開始配置B、C服務器的nginx,配置內容如下:
B、C服務器的nginx配置完畢后,我們現在來啟動各自的nginx服務并訪問,如下:
通過上圖,我們可以看到B、C服務器的nginx已經正常訪問了。那么我現在來訪問http://a.ilanni.com看看能不能達到我們所要的效果。如下:
可以看到我們現在訪問http://a.ilanni.com已經反向代理到upstream下的B服務器,并且現在顯示的是B服務器的內容。
再次刷新頁面,顯示如下:
刷新頁面后,你會發現這次顯示的是C服務器的內容。也說明http://a.ilanni.com已經反向代理到C服務器上。
你可以多次刷新頁面,會發現顯示的內容是B、C服務器交替出現。
為什么會是這樣呢?
其實在文章前面,我已經介紹了nginx的upstream負載均衡,在沒有其他配置的情況默認使用的策略是輪詢方式的,而且默認的權重為1。
也就是說:upstream a.ilanni.com {
server 192.168.1.248:8080;
server 192.168.1.249:8090;
}
中B、C服務器的默認權重都是一樣為1。那么在nginx輪詢時,所以B、C服務器會交替出現。
如果我們現在把B服務器的權重設置為5,C服務器還是使用默認看看實際情況。配置如下:
upstream a.ilanni.com {
server 192.168.1.248:8080 weight=5;
server 192.168.1.249:8090;
}
再次訪問http://a.ilanni.com,首先顯示的還是B服務器的內容。然后刷新,你會發現大約大約刷新了5次左右,才會顯示C服務器的內容。這就權重的作用,服務器的權重數值越高,被分配到客戶端的請求次數越多。
注意以上實驗,我們是在A、B、C服務器是在同一個局域網,對公網來說只是開放了A服務器的80端口。如果這三臺服務器全部是公網IP的話,那就是我們下篇文章要介紹的內容了,有關nginx反向代理的使用。
到此,有關nginx的負載均衡我們基本上介紹完畢后。下面在輔助介紹下,nginx的upstream目前支持以下幾種方式的分配:
1)、輪詢(默認) 每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2)、weight 指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。設置服務器的權重,權重數值越高,被分配到客戶端的請求次數越多,默認值為1。
3)、ip_hash 每個請求按訪問IP的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
4)、fair(第三方) 按后端服務器的響應時間來分配請求,響應時間短的優先分配。
5)、url_hash(第三方)按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
新聞熱點
疑難解答