1. 程式人生 > >大三筆記(nginx負載均衡介紹與ip_hash指令)

大三筆記(nginx負載均衡介紹與ip_hash指令)

一、反向代理

正向代理:

客戶端要獲取的資源就在伺服器上,客戶端請求的資源路徑就是最終響應資源的伺服器路徑,這就是正向代理。正向代理的特點:就是我們明確知道要訪問哪個網站地址。

反向代理:

 

客戶端想獲取伺服器叢集中(服務1,服務2,服務3 他們的資源相同)中的資源,但是客戶端無法與該伺服器叢集建立連線,但我們可以與另一臺伺服器(代理伺服器)建立連線且該伺服器能獲取伺服器叢集中的資源。這個時候客戶端就可以通過請求代理伺服器,獲取想要的資源,但客戶端並不知道給他資源的是哪個伺服器。這種方式就是反向代理。

二、負載均衡

  當一臺伺服器的單位時間內的訪問量越大的時候,伺服器的壓力會越大。當一臺伺服器壓力大得超過自身的承受能力的時候,伺服器會崩潰。為了避免伺服器崩潰,讓使用者有更好地體驗,我們通常通過負載均衡的方式來分擔伺服器的壓力。那麼什麼是負載均衡呢?我們通過建立很多個伺服器,把這些伺服器組成一個伺服器叢集,然後,當用戶訪問我們網站的時候,先訪問一箇中間伺服器,再讓這個中間伺服器在伺服器叢集中選擇一個壓力較小的伺服器,然後將該訪問請求引入該選擇的伺服器。這樣,使用者的每次訪問,都會保證伺服器叢集中的每個伺服器的壓力趨於平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況。負載均衡就是採用反向代理的思想。

三、Nginx中負載均衡的實現

Nginx是一款可以通過反向代理實現負載均衡的伺服器,使用Nginx服務實現負載均衡的時候,使用者的訪問首先會訪問到Nginx伺服器,然後Nginx伺服器再從伺服器叢集表中選擇壓力較小的伺服器,然後將該訪問請求引向該伺服器。若伺服器叢集中的某個伺服器崩潰,那麼從待選伺服器列表中將該伺服器刪除,也就是說一個伺服器假如崩潰了,那麼Nginx就肯定不會將訪問請求引入該伺服器了。

1、建立fzjh.conf配置檔案

  在/usr/local/nginx/conf下建立fzjh.conf檔案,檔案內容如下:

 

user  nobody;
worker_processes  2;
events {
    worker_connections  1024;
}
http{
   #=upstream設定負載均衡的待選伺服器列表,在執行中如果有伺服器崩潰那該伺服器就會在該列表中移除
    upstream mypro{
        server 219.133.55.36;#中國全球資訊網
        server 115.239.210.27;#百度的ip
    }
    server{
        listen 8080;
        #====== 對ngnix更目錄做負載均衡===
        location / {
           #==選擇要代理的伺服器要與upstream對應==========
            proxy_pass http://mypro;
        }
    }
}

 

2、載入fzjh.conf配置檔案

 執行命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

3、測試是否成功  

  在這裡我們的負載均衡待選伺服器列表是百度和中國全球資訊網,也就說我們訪問我的主機名+8080 就可以進行測試,如果頁面在百度與中國全球資訊網中切換,就表示成功。

 

四、Upstream模組詳解

 
Upstream模組:該模組是Nginx伺服器的一個重要模組。Upstream模組實現在輪詢和客戶端ip之間實現後端的負載均衡。常用的指令有ip_hash指令、server指令和upstream指令等。該模組主要進行輪詢演算法。upstream指令主要是用於設定一組可以在proxy_pass和fastcgi_pass指令中使用額代理伺服器,預設負載均衡方式為輪詢。

 ip_hash指令:在負載均衡系統中,假如使用者在某臺伺服器上登入,那麼如果該使用者第二次請求的時候,因為我們是負載均衡系統,每次請求都會重新定位到伺服器叢集中的一個伺服器,那麼此時如果將已經登入伺服器A的使用者再定位到其他伺服器,顯然不妥。故而,我們可以採用ip_hash指令解決這個問題,如果客戶端請求已經訪問了伺服器A並登入,那麼第二次請求的時候,會將該請求通過雜湊演算法自動定位到該後端伺服器中。簡單說ip_hash指令可以實現當用戶使用同一瀏覽器在A伺服器登入後,那他後續的所有請求都在同一伺服器中進行,Nginx代理伺服器不會將他的請求分配到其他伺服器上,以此規避使用者登入資訊在不同伺服器間流轉的問題,從而保證使用者只需登入一次。

ip_hash的使用:在fzjh.conf配置檔案中開啟該功能

server指令: 主要用於指定伺服器的名稱和引數。

使用:在fzjh.conf配置檔案中開啟該功能

 注意:在實際開發中weight不要與ip_hash同時使用

(iP_hash維持了session的可用性)

 

 

負載均衡不同實現方式的優缺點:假如使用硬體的方式實現負載均衡,那麼中間的轉發機構就是硬體,這個時候執行的效率非常高,但是對應的成本也非常高。如果我們採用軟體的方式來實現負載均衡,那麼中間的轉發機構就是軟體,這個時候,執行效率不如硬體,但是成本相對來說低得多。而使用Nginx伺服器實現負載均衡,那麼就是通過軟體的方式來實現負載均衡,並且Nginx本身支援高併發等。故而使用Nginx伺服器實現負載均衡,能大大節約企業的成本,並且由於Nginx是伺服器軟體,其執行效率也是非常高。

 

轉自:http://www.cnblogs.com/jalja/p/6117881.html