天天看點

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

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

        Nginx 是一個很強大的高性能Web和反向代理伺服器,它具有很多非常優越的特性,在高連接配接并發的情況下,Nginx是Apache伺服器不錯的替代品,Nginx在美國是做虛拟主機生意的老闆們經常選擇的軟體平台之一。能夠支援高達 50,000 個并發連接配接數的響應。

       在一些大型的項目中,Nginx經常是用作負載均衡的,Nginx将請求按照一定的規律分發給分布式的Web Server,這樣可以解決Web Server是項目性能瓶頸的問題,這樣便構成了LNMPA架構,即Linux+Nginx+MySQL+PHP+Apache,有同樣功能的還有LVS,但是各有優缺點,最好的是F5硬體,但是價格非常昂貴;同時Nginx也非常适合處理靜态頁面,檔案上傳與下載下傳的伺服器,在這些業務上,其他伺服器軟體是無法比拟的;其實作在有很多項目就直接用Nginx作Web

伺服器,Nginx做Web 伺服器在處理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;#監聽8080端口  
        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和8080端口,開發方法也是參見Nginx安裝方法那篇部落格,然後在浏覽器中進行通路測試,檢查配置是否成功,測試結果如下:

         4.192.168.1.18 Nginx伺服器反向代理與負載均衡配置:

######################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方法去網上找吧,很簡單,在hosts檔案中添加

         192.168.1.18 yii.nginx.com

        6.浏覽器端通路yii.nginx.com,多通路幾次,這樣我們就可以看到,會按照權重更換顯示80端口和8080端口的内容。

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

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

        1.輪詢,預設采取此方式,Nginx會按照請求時間的先後順序進行輪詢分發,若某台Web Server當機,Nginx自動将其摘掉。

        2.weight,權重,即輪詢的幾率,值越大,被分發的可能性越大,用于後端伺服器性能不均的情況。

        3.ip_hash,每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決共享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等均可以。

繼續閱讀