原文地址:http://www./?p=7631 今天我們來(lái)學(xué)習(xí)下有關(guān)nginx的負(fù)載均衡配置,。nginx的負(fù)載均衡是通過(guò)nginx的upstream模塊和proxy_pass反向代理來(lái)實(shí)現(xiàn)的,。 說(shuō)明:有三臺(tái)服務(wù)器,前端的A服務(wù)器使用nginx進(jìn)行負(fù)載均衡配置,。后端是兩臺(tái)配置的相同服務(wù)器,,以訪問(wèn)a.這個(gè)域名為例,。結(jié)構(gòu)圖,如下: A服務(wù)器對(duì)外(公網(wǎng))開(kāi)放80端口,,B,、C服務(wù)器就是兩臺(tái)配置相同的服務(wù)器。B服務(wù)器開(kāi)放8080端口,,C服務(wù)器開(kāi)放8090端口,。當(dāng)客戶端訪問(wèn)a.域名時(shí),A服務(wù)器根據(jù)nginx的upstream模塊相應(yīng)策略進(jìn)行分配客戶端訪問(wèn)到B服務(wù)器還是C服務(wù)器,。 注意B服務(wù)器和C服務(wù)器內(nèi)容是相同的,。但是在此,我們?yōu)榱丝吹綄?shí)驗(yàn)效果,,我在B,、C服務(wù)器配置了不同的內(nèi)容。B服務(wù)器的默認(rèn)頁(yè)面現(xiàn)實(shí)的內(nèi)容為:The Server is web1_192.168.1.249:8080,。C服務(wù)器的默認(rèn)頁(yè)面現(xiàn)實(shí)的內(nèi)容為:The Server is web2_192.168.1.249:8090,。如下: nginx負(fù)載均衡的默認(rèn)是使用輪詢方式進(jìn)行分配的,而且默認(rèn)的權(quán)重為1,并且權(quán)重越大被訪問(wèn)的幾率越大,。 我們先配置A服務(wù)器的nginx,,如下: cat /usr/local/nginx/conf/nginx.conf|grep -v ^#|grep -v ^$ upstream a. { server 192.168.1.248:8080; server 192.168.1.249:8090; } location / { proxy_pass http://a.; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 注意上圖中,標(biāo)記出來(lái)的第一部分,。其中upstream就是做負(fù)載均衡使用的,。http://a.;就是我們要訪問(wèn)的域名,通過(guò)proxy_pass反向代理到upstream下的服務(wù)器中,。 第二部分就是我們要反向代理的域名,注意在此我們監(jiān)聽(tīng)的是80端口,,而且這個(gè)server標(biāo)簽中,,我并沒(méi)有配置server_name。其實(shí)配置server_name也是可以的,,不過(guò)最后的效果是一樣的,,這個(gè)是經(jīng)過(guò)測(cè)試的。 第三部分,,在此我配置的就是一個(gè)虛擬主機(jī),。監(jiān)聽(tīng)的是8080端口,并且在此我也配置了server_name,。這個(gè)主要是為了做對(duì)比使用的,。 我們現(xiàn)在先啟動(dòng)A服務(wù)器的nginx,并且訪問(wèn)a.:8080,。如下: 可以看到目前A服務(wù)器的nginx已經(jīng)可以正常訪問(wèn)了,。注意我們?cè)诖嗽L問(wèn)的是http://a.:8080。 現(xiàn)在開(kāi)始配置B,、C服務(wù)器的nginx,,配置內(nèi)容如下: B、C服務(wù)器的nginx配置完畢后,,我們現(xiàn)在來(lái)啟動(dòng)各自的nginx服務(wù)并訪問(wèn),,如下: 通過(guò)上圖,我們可以看到B,、C服務(wù)器的nginx已經(jīng)正常訪問(wèn)了,。那么我現(xiàn)在來(lái)訪問(wèn)http://a.看看能不能達(dá)到我們所要的效果。如下: 可以看到我們現(xiàn)在訪問(wèn)http://a.已經(jīng)反向代理到upstream下的B服務(wù)器,,并且現(xiàn)在顯示的是B服務(wù)器的內(nèi)容,。 再次刷新頁(yè)面,顯示如下: 刷新頁(yè)面后,,你會(huì)發(fā)現(xiàn)這次顯示的是C服務(wù)器的內(nèi)容,。也說(shuō)明http://a.已經(jīng)反向代理到C服務(wù)器上。 你可以多次刷新頁(yè)面,會(huì)發(fā)現(xiàn)顯示的內(nèi)容是B,、C服務(wù)器交替出現(xiàn),。 為什么會(huì)是這樣呢? 其實(shí)在文章前面,,我已經(jīng)介紹了nginx的upstream負(fù)載均衡,,在沒(méi)有其他配置的情況默認(rèn)使用的策略是輪詢方式的,而且默認(rèn)的權(quán)重為1,。 也就是說(shuō):upstream a. { server 192.168.1.248:8080; server 192.168.1.249:8090; } 中B,、C服務(wù)器的默認(rèn)權(quán)重都是一樣為1。那么在nginx輪詢時(shí),,所以B,、C服務(wù)器會(huì)交替出現(xiàn)。 如果我們現(xiàn)在把B服務(wù)器的權(quán)重設(shè)置為5,,C服務(wù)器還是使用默認(rèn)看看實(shí)際情況,。配置如下: upstream a. { server 192.168.1.248:8080 weight=5; server 192.168.1.249:8090; } 再次訪問(wèn)http://a.,首先顯示的還是B服務(wù)器的內(nèi)容,。然后刷新,,你會(huì)發(fā)現(xiàn)大約大約刷新了5次左右,才會(huì)顯示C服務(wù)器的內(nèi)容,。這就權(quán)重的作用,,服務(wù)器的權(quán)重?cái)?shù)值越高,被分配到客戶端的請(qǐng)求次數(shù)越多,。 注意以上實(shí)驗(yàn),,我們是在A、B,、C服務(wù)器是在同一個(gè)局域網(wǎng),,對(duì)公網(wǎng)來(lái)說(shuō)只是開(kāi)放了A服務(wù)器的80端口。如果這三臺(tái)服務(wù)器全部是公網(wǎng)IP的話,,那就是我們下篇文章要介紹的內(nèi)容了,,有關(guān)nginx反向代理的使用。 到此,,有關(guān)nginx的負(fù)載均衡我們基本上介紹完畢后,。下面在輔助介紹下,nginx的upstream目前支持以下幾種方式的分配: 1),、輪詢(默認(rèn)) 每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,,如果后端服務(wù)器down掉,能自動(dòng)剔除,。 2),、weight 指定輪詢幾率,,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況,。設(shè)置服務(wù)器的權(quán)重,,權(quán)重?cái)?shù)值越高,被分配到客戶端的請(qǐng)求次數(shù)越多,,默認(rèn)值為1,。 3)、ip_hash 每個(gè)請(qǐng)求按訪問(wèn)IP的hash結(jié)果分配,,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,,可以解決session的問(wèn)題。 4),、fair(第三方) 按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,,響應(yīng)時(shí)間短的優(yōu)先分配。 5),、url_hash(第三方)按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,,后端服務(wù)器為緩存時(shí)比較有效,。 |
|
來(lái)自: JhouShuai > 《LINUX 服務(wù)器運(yùn)維》