天天看點

Nginx負載均衡配置執行個體詳解

負載均衡是我們大流量網站要做的一個東西,下面我來給大家介紹在Nginx伺服器上進行負載均衡配置方法,希望對有需要的同學有所幫助哦。

負載均衡

先來簡單了解一下什麼是負載均衡,單從字面上的意思來了解就可以解釋N台伺服器平均分擔負載,不會因為某台伺服器負載高當機而某台伺服器閑置的情況。那麼負載均衡的前提就是要有多台伺服器才能實作,也就是兩台以上即可。

測試環境

由于沒有伺服器,是以本次測試直接host指定域名,然後在VMware裡安裝了三台CentOS。

測試域名  :a.com

A伺服器IP :192.168.5.149 (主)

B伺服器IP :192.168.5.27

C伺服器IP :192.168.5.126

部署思路

A伺服器做為主伺服器,域名直接解析到A伺服器(192.168.5.149)上,由A伺服器負載均衡到B伺服器(192.168.5.27)與C伺服器(192.168.5.126)上。

域名解析

由于不是真實環境,域名就随便使用一個a.com用作測試,是以a.com的解析隻能在hosts檔案設定。

打開:C:WindowsSystem32driversetchosts

在末尾添加

192.168.5.149    a.com

儲存退出,然後啟動指令模式ping下看看是否已設定成功

從截圖上看已成功将a.com解析到192.168.5.149IP

打開nginx.conf,檔案位置在nginx安裝目錄的conf目錄下。

在http段加入以下代碼

      server  192.168.5.126:80; 

      server  192.168.5.27:80; 

server{ 

    listen 80; 

    server_name a.com; 

    location / { 

        proxy_pass         http://a.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

B、C伺服器nginx.conf設定

打開nginx.confi,在http段加入以下代碼

    index index.html; 

    root /data0/htdocs/www; 

測試

當通路a.com的時候,為了區分是轉向哪台伺服器處理我分别在B、C伺服器下寫一個不同内容的index.html檔案,以作區分。

打開浏覽器通路a.com結果,重新整理會發現所有的請求均分别被主伺服器(192.168.5.149)配置設定到B伺服器(192.168.5.27)與C伺服器(192.168.5.126)上,實作了負載均衡效果。

B伺服器處理頁面

C伺服器處理頁面

假如其中一台伺服器當機會怎樣?

當某台伺服器當機了,是否會影響通路呢?

我們先來看看執行個體,根據以上例子,假設C伺服器192.168.5.126這台機子當機了(由于無法模拟當機,是以我就把C伺服器關機)然後再來通路看看。

通路結果:

我們發現,雖然C伺服器(192.168.5.126)當機了,但不影響網站通路。這樣,就不會擔心在負載均衡模式下因為某台機子當機而拖累整個站點了。

如果b.com也要設定負載均衡怎麼辦?

很簡單,跟a.com設定一樣。如下:

假設b.com的主伺服器IP是192.168.5.149,負載均衡到192.168.5.150和192.168.5.151機器上

現将域名b.com解析到192.168.5.149IP上。

在主伺服器(192.168.5.149)的nginx.conf加入以下代碼:

upstream b.com { 

      server  192.168.5.150:80; 

      server  192.168.5.151:80; 

    server_name b.com; 

        proxy_pass         http://b.com; 

在192.168.5.150與192.168.5.151機器上設定nginx,打開nginx.conf在末尾添加以下代碼:

完成以後步驟後即可實作b.com的負載均衡配置。

主伺服器不能提供服務嗎?

以上例子中,我們都是應用到了主伺服器負載均衡到其它伺服器上,那麼主伺服器本身能不能也加在伺服器清單中,這樣就不會白白浪費拿一台伺服器純當做轉發功能,而是也參與到提供服務中來。

如以上案例三台伺服器:

我們把域名解析到A伺服器,然後由A伺服器轉發到B伺服器與C伺服器,那麼A伺服器隻做一個轉發功能,現在我們讓A伺服器也提供站點服務。

我們先來分析一下,如果添加主伺服器到upstream中,那麼可能會有以下兩種情況發生:

1、主伺服器轉發到了其它IP上,其它IP伺服器正常處理;

2、主伺服器轉發到了自己IP上,然後又進到主伺服器配置設定IP那裡,假如一直配置設定到本機,則會造成一個死循環。

怎麼解決這個問題呢?因為80端口已經用來監聽負載均衡的處理,那麼本伺服器上就不能再使用80端口來處理a.com的通路請求,得用一個新的。于是我們把主伺服器的nginx.conf加入以下一段代碼:

    listen 8080; 

重新開機nginx,在浏覽器輸入a.com:8080試試看能不能通路。結果可以正常通路

既然能正常通路,那麼我們就可以把主伺服器添加到upstream中,但是端口要改一下,如下代碼:

upstream a.com { 

      server  127.0.0.1:8080; 

由于這裡可以添加主伺服器IP192.168.5.149或者127.0.0.1均可以,都表示通路自己。

重新開機Nginx,然後再來通路a.com看看會不會配置設定到主伺服器上。

主伺服器也能正常加入服務了。

最後

二、多台伺服器提供服務,但域名隻解析到主伺服器,而真正的伺服器IP不會被ping下即可獲得,增加一定安全性。

三、upstream裡的IP不一定是内網,外網IP也可以。不過經典的案例是,區域網路中某台IP暴露在外網下,域名直接解析到此IP。然後又這台主伺服器轉發到内網伺服器IP中。

四、某台伺服器當機、不會影響網站正常運作,Nginx不會把請求轉發到已當機的IP上

Nginx負載均衡配置執行個體詳解

注:轉載需注明出處及作者。