1. 程式人生 > >【Nginx實戰】(一)——Nginx要點內容總結

【Nginx實戰】(一)——Nginx要點內容總結

這裡寫圖片描述

解決問題

單臺伺服器已經無法承擔大量使用者的併發訪問,必須採用多臺伺服器協同工作,以提高計算機系統的處理能力和計算強度(叢集),滿足當前業務量的需求。如何完成同樣功能的多個網路裝置之間實現合理的業務量分配——負載均衡。

負載均衡策略/演算法

  • 輪詢:依次分發到每臺應用伺服器上,所以每臺處理請求數相同
  • 加權輪詢:按照配置的權重將請求分發,高效能的伺服器分配更多請求。
  • 隨機:隨機分配
  • 加權隨機:
  • 最少連線:記錄每個應用伺服器正在處理的連線數,將新的請求分發到最少連線的伺服器上。
  • 加權最少連線
  • 源地址雜湊:根據來源的IP地址進行Hash計算得到應用伺服器,這樣來自同一個IP地址的請求總在同一個伺服器上處理。該請求的上下文資訊可以儲存在這臺伺服器上

負載均衡的實現方法

步驟

1.根據負載均衡演算法和Web伺服器列表計算得到叢集中一臺Web伺服器的地址。
2.將請求資料傳送到該地址對應的Web伺服器上。

方案

【1】.網頁上提供不同線路,不同伺服器連線的方式

【2】.DNS輪詢

對同一主機名新增多條A記錄,DNS伺服器將解析請求按照A記錄的順序,隨機分配到不同的IP。
缺點:
可靠性不高,DNS輪詢的伺服器發生故障,不會及時響應,繼續接收請求。即使在記錄中去掉,也會有快取。
負載分配不均衡,簡單輪詢,不能做到效能好的多分配請求;本地DNS快取已解析的域名到IP的對映,使一段時間內一直訪問同一臺。
場景:可靠性要求不高的伺服器叢集。圖片伺服器叢集等。

【3】.四/七層負載均衡裝置(硬體和軟體)

開放系統互聯模型(OSI):用於不同機型,作業系統或公司的網路體系結構能夠互連。

這裡寫圖片描述
硬體四/七層負載均衡交換機: F5
軟體四層負載均衡:LVS (Linux Virtual Server)

採用IP負載均衡技術和基於內容請求分發技術

軟體七層負載均衡

大多基於HTTP反向代理方式,Nginx
Nginx可以按輪詢、IP雜湊、URL雜湊、權重等多種方式對後端伺服器做負載均衡,還支援後端伺服器的健康檢查。

【4】.多線多地區智慧DNS解析和混合負載均衡*
“線”:網通、電信……

應用場景

1、http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器
2、虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。

修改/usr/local/nginx/conf/nginx.conf檔案,新增兩個虛擬主機,如下:
#配置虛擬主機aaa.test.com 
server {
        #監聽的ip和埠,配置本機ip和埠
        listen 192.168.101.3:80;        
        #虛擬主機名稱是aaa.test.com,請求域名aaa.test.com的url將由此server配置解析
        server_name aaa.test.com;    
        #所有的請求都以/開始,所有的請求都可以匹配此location
        location / {
        #使用root指令指定虛擬主機目錄即網頁存放目錄
        #比如訪問http://ip/test.html將找到/usr/local/aaa_html/test.html
        #比如訪問http://ip/item/test.html將找到/usr/local/aaa_html/item/test.html
                root /usr/local/aaa_html;   
                #指定歡迎頁面,按從左到右順序查詢
                index index.html index.htm; 
        }
    }
#配置虛擬主機bbb.test.com
    server {
        listen 192.168.101.3:80;
        server_name bbb.test.com;
        location / {
                root /usr/local/bbb_html;
                index index.html index.htm;
        }
    }

3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用nginx做反向代理。並且多臺伺服器可以平均分擔負載,不會因為某臺伺服器負載高宕機而某臺伺服器閒置的情況。

正向代理VS反向代理

反向代理是指:以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給Internet上請求連結的客戶端。

正向代理:代理伺服器代理內部網路對Internet的連線請求,客戶機必須指定代理伺服器,並將本來要直接傳送到Web伺服器上的http請求傳送到代理伺服器中。因為請求哪個Web伺服器是不確定的,而且這些Web伺服器並沒有配置這個代理伺服器,所以不支援外部對內部網路的訪問請求。

這裡寫圖片描述

這裡寫圖片描述

反向代理VS負載均衡

反向代理,是把一些靜態資源儲存在伺服器上,當用戶有請求的時候,就直接返回反向代理伺服器上的資源給使用者,而如果反向代理伺服器上沒有的資源,就轉發給後面的負載均衡伺服器,負載均衡伺服器再將請求分發給後端的web伺服器。 區別就是:反向代理伺服器是需要儲存資源的,讓使用者更快速的接收到資源 負載均衡就是,為了保證後端web伺服器的高可用,高併發,是不需要要儲存資源,只需要轉發使用者的請求。

實踐問題

session共享

nginx對tomcat做負載,怎麼解決session共享的問題?——tomcat-redis-session-manager-master

nginx負載均衡和反向代理配置

Upstream模組中的Server指令用於指定後端伺服器的名稱和引數。可以是域名,IP或埠號。
server{……}虛擬主機內,通過proxy_pass和fastgi_pass指令設定進行反向代理的upstream伺服器叢集。
proxy_set_header指令用於在向反向代理的後端Web伺服器發起請求時新增指定的Header頭資訊。
proxy_set_header Host 設定域名

nginx雙機高可用

防止一臺nginx宕掉,加一臺備用機。
方案一:正常情況下只有一臺用於負載均衡,另一臺空閒。可以用keepalive軟體實現一臺出問題時切換到另一臺。
方案二:兩臺都用於負載均衡。