Nginx負載均衡:分散式/熱備Web Server的搭建

weixin_34162629發表於2016-01-22

       Nginx是一款輕量級的Web server/反向代理server及電子郵件(IMAP/POP3)代理server。並在一個BSD-like 協議下發行。由俄羅斯的程式設計師Igor Sysoev所開發。供俄國大型的入口站點及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,中國大陸使用nginx站點使用者有:新浪、網易、騰訊等。

      

        Nginx 是一個非常強大的高效能Web和反向代理server,它具有非常多非常優越的特性,在高連線併發的情況下,Nginx是Apacheserver不錯的替代品,Nginx在美國是做虛擬主機生意的老闆們常常選擇的軟體平臺之中的一個。可以支援高達 50,000 個併發連線數的響應。

       在一些大型的專案中,Nginx常常是用作負載均衡的,Nginx將請求依照一定的規律分發給分散式的Web Server,這樣能夠解決Web Server是專案效能瓶頸的問題。這樣便構成了LNMPA架構,即Linux+Nginx+Mysql+PHP+Apache,有相同功能的還有LVS,可是各有優缺點,最好的是F5硬體,可是價格很昂貴;同一時候Nginx也很適合處理靜態頁面。檔案上傳與下載的server,在這些業務上。其它server軟體是無法比擬的。事實上如今有許多專案就直接用Nginx作Web server,Nginx做Web server在處理PHP業務邏輯上能夠沒有Apache那麼強大,假如單獨用Nginx不能滿足您專案的須要,那就把業務分離開,Nginx做負載均衡,處理靜態頁。負責檔案上傳下載,PHP業務邏輯交給Apache。


        Nginx最好安裝在Linux系統上,由於在Linux下能夠讓Nginx達到預期的效能。的安裝方法能夠參見:

        http://blog.csdn.net/jhq0113/article/details/43812895


         反向代理與負載均衡配置:

         Web Server1:       192.168.1.16:80              Nginx

         Web Server2:       192.168.1.16:8080          Nginx

        臨  時  域  名:      yii.nginx.com           

         Nginx Server:        192.168.1.18:80            


        本地僅僅有兩臺機器,所以Web Server就都放在192.168.1.16上了,到真實環境下,配置類似,真實環境下僅僅是Web Server的IP不同。PHP程式同樣,這裡為了演示區分。Web Server配置不同的PHP程式。


        1.在192.168.1.16 Nginx配置

user  www;           #執行使用者
worker_processes  1; #工作程式數量。最好是CPU核心數量

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;            #編碼,最好指定
    sendfile        on;
    keepalive_timeout  65;

    #######################myphp8080.com配置#########################
    server{
        listen       8080;#監聽8080port
        server_name  myphp8080.com;
        root /home/data/web/php/myphp8080.com;  #web資料夾
        location / {
             index index.php index.html index.htm;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

#######################myphp80.com配置#########################
    server {
        listen       80;
        server_name myphp80.com
        root /home/data/web/php/myphp80.com; 
        location / {  
           index index.php index.html index.htm; 
        } 
        location ~ \.php$ { 
             fastcgi_pass 127.0.0.1:9000; 
             fastcgi_index index.php; 
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
             include fastcgi_params; 
        } 
     }

 } 


    2.192.168.1.16 在web資料夾下分別建立myphp80.com和myphp8080.com資料夾,各自資料夾分別建立index.php檔案,php程式碼分別為:

      myphp80.com資料夾中index.php程式碼:

<?php
   echo json_encode(['type'=>'200','data'=>'80']);
?

>


       myphp8080資料夾中index.php程式碼:

<?php
   echo json_encode(['type'=>'200','data'=>'8080']);
?

>


       將兩個資料夾許可權交給www組www使用者:

       [root@jhq0113 php]# chown -R www:www myphp80.com/

       [root@jhq0113 php]# chown -R www:www myphp8080.com/

     

       然後。重新啟動Nginx服務

       [root@jhq0113 php]# service nginx restart


      

       3.防火牆開放80和8080port,開發方法也是參見Nginx安裝方法那篇部落格。然後在瀏覽器中進行訪問測試,檢查配置是否成功。測試結果例如以下:

                                   


         4.192.168.1.18 Nginxserver反向代理與負載均衡配置:

######################yii.nginx.com反向代理負載均衡#########################
    #負載均衡配置,以權重方式分發
    upstream yii.nginx.com {
       server 192.168.1.16:80 weight=5;
       server 192.168.1.16:8080 weight=5;
    }

   #反向代理配置
   server {
     listen       80;
     server_name  yii.nginx.com;
     charset utf-8;
     location /{
        proxy_pass http://yii.nginx.com;
     }
  }


        重新啟動Nginx服務

        [root@jhq0229 php]# service nginx restart


        5.本地域名,瀏覽器端須要配置hosts。配置hosts方法去網上找吧,非常easy,在hosts檔案里加入

         192.168.1.18 yii.nginx.com


        6.瀏覽器端訪問yii.nginx.com,多訪問幾次。這樣我們就能夠看到,會依照權重更換顯示80port和8080port的內容。


        至此。Nginx負載均衡、反向代理配置完成。


        Nginx負載均衡的分發方式有4種:

        1.輪詢。預設採取此方式,Nginx會依照請求時間的先後順序進行輪詢分發,若某臺Web Server當機,Nginx自己主動將其摘掉。

        2.weight,權重,即輪詢的機率。值越大,被分發的可能性越大,用於後端server效能不均的情況。

        3.ip_hash,每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端server,能夠解決共享session的問題。

        4.自己定義規則


       舉例:

upstream myphp.com {   
     server 192.168.1.16:80 down;
     server 192.168.1.18:80 weight=2;
     server 192.168.1.13:80;
     server 192.168.1.12:80 backup;
}

      配置具體解釋:

         down 表示當前的Web Server臨時不參與負載
         weight  默覺得1.weight越大。負載的權重就越大。
         backup: 其他全部的非backup Server down或者忙的時候。請求backup機器。

所以這臺機器壓力會最輕。

     

      backup是利用nginx的熱備功能,這也是最典型的應用帶來的重要優點之中的一個,當非backup Server可以非常好的為Client提供服務的時候,backup Server不正確外界提供服務,此時backup Server處於冷狀態;當全部非backup Server不能非常好的為Client提供服務的時候,backup Server為Client提供服務,做到了熱備,某臺或者全部非backup Web Server當機不會影響整個Web專案的訪問功能,Web專案仍然能夠為Client提供服務


       Nginx做負載均衡。對Web Server的作業系統和語言環境沒有特殊要求。Web Server的作業系統能夠是Linux也能夠是Windows Server,Web程式是Java、PHP、Asp.Net等均能夠。


相關文章