首頁»服務器»Nginx入門到實戰(3)負載均衡和緩存服務

Nginx入門到實戰(3)負載均衡和緩存服務

來源:海島 發布時間:2019-07-02 閱讀次數:

一、負載均衡

負載均衡的實現方法就是我們上章介紹的反向代理 。將客戶的請求通過 nginx 分發(反向代理)到一組多臺不同的服務器上

這一組服務器我們稱為 服務池(upstream server),池內的每一個服務器稱為一個 單元,服務池內將對每一個單元進行請求輪訓,實現負載均衡

#配置
語法:upstream name ...
默認:——
位置:http
upstream #自定義組名 {
    server x1.baidu.com;    #可以是域名
    server x2.baidu.com;    
    #server x3.baidu.com    
                            #down         不參與負載均衡
                            #weight=5;    權重,越高分配越多  
                            #backup;      預留的備份服務器
                            #max_fails    允許失敗的次數
                            #fail_timeout 超過失敗次數后,服務暫停時間
                            #max_coons    限制最大的接受的連接數
                            #根據服務器性能不同,配置適合的參數
    
    #server 106.xx.xx.xxx;        可以是ip
    #server 106.xx.xx.xxx:8080;   可以帶端口號
    #server unix:/tmp/xxx;        支出socket方式
}

假設我們有三臺服務器,并且假設它們的IP地址,前端負載均衡服務器A(127.0.0.1),后臺服務器B(127.0.0.2),后臺服務器C(127.0.0.3)

新建文件 proxy.conf,內容如下,上一章介紹的反向代理配置

proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
#服務器A的配置
http {
    ...
    upstream xxx {
        server 127.0.0.2;
        server 127.0.0.3;
    }
    server {
        liseten 80;
        server_name localhost;
        location / {
            proxy_pass http://xxx     #upstream 對應自定義名稱
            include proxy.conf;  
        }
    }
}
#服務器B、服務器C的配置
server {
    liseten 80;
    server_name localhost;
    location / {
         index  index.html
    }
}

調度算法

  • 輪訓:按時間順序逐一分配到不同的后端服務器
  • 加權輪訓:weight值越大,分配到的幾率越高
  • ip_hash:每個請求按訪問IP的hash結果分配,這樣來自同一個IP固定訪問一個后端服務器
  • least_conn:最少鏈接數,哪個機器連接數少就分發給誰
  • url_hash:按照訪問的URL的hash結果來分配請求,每一個URL定向到同一個后端服務器
  • hash關鍵數值:hash自定義key

ip_hash 配置

  upstream xxx {
        ip_hash;
        server 127.0.0.2;
        server 127.0.0.3;
  }

ip_hash存在缺陷,當前端服務器再多一層時,將獲取不到用戶的正確IP,獲取的將是前一個前端服務器的IP,因此 nginx1.7.2版本推出了 url_hash

url_hash 配置

  upstream xxx {
        hash $request_uri;
        server 127.0.0.2;
        server 127.0.0.3;
  }

二、緩存服務

1. 緩存類型

  • 服務端緩存:緩存存儲在后端服務器,如redis,memcache
  • 代理緩存:緩存存儲在代理服務器或者中間件上,它的內容是從后端服務器獲取的,但是保存在自己本地
  • 客戶端緩存:緩存在瀏覽器內的

2. nginx 代理緩存
客戶端請求nginx,nginx查看本地是否有緩存數據,若有直接返回給客戶端,若沒有再去后端服務器請求

http {          
    proxy_cache_path    /var/www/cache #緩存地址
                        levels=1:2 #目錄分級
                        keys_zone=test_cache:10m #開啟的keys空間名字:空間大小(1m可以存放8000個key)
                        max_size=10g #目錄最大大小(超過時,不常用的將被刪除)
                        inactive=60m #60分鐘內沒有被訪問的緩存將清理
                        use_temp_path=pff; #是否開啟存放臨時文件目錄,關閉默認存儲在緩存地址 
                                         
    server {
        ...
        location / {
            proxy_cache test_cache;    #開啟緩存對應的名稱,在keys_zone命名好
            proxy_cache_valid 200 304 12h;    #狀態碼為200 304的緩存12小時
            proxy_cache_valid any 10m;    #其他狀態緩存10小時
            proxy_cache_key $host$uri$is_args$args;    #設置key值
            add_header Nginx-Cache "$upstream_cache_status";
        }     
    }                    
}

當有個特定請求我們不需要緩存的時候,在上面配置的內容中加入以下配置

server {
    ...
    if ($request_uri ~ ^/(login|register) ) {    #當請求地址有login或register時
        set $nocache = 1;    #設置一個自定義變量為true
    }  
    location / {
        proxy_no_cache $nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authoriztion;
    }
}

3. 分片請求

早期版本 nginx 對大文件的分片請求不支持緩存,1.9版本后slice模塊實現了這個功能
前端發起請求,nginx去獲取這個請求文件的大小,若超過我們的定義slice的大小,會進行切片,分割成多個小的請求去請求后端,到前端就成為一個一個獨立的緩存文件

優勢:每個子請求收到的數據都會形成獨立文件,一個請求中斷了,其他請求不受影響,原本情況請求中斷,再次請求文件將從頭開始,而開啟分片請求,就接下去獲取未請求的小文件

劣勢:當文件很大或者slice很小時,可能會導致文件描述符耗盡等情況

 語法:   slice size;    #當大文件請求時,設置size為每個小文件的大小
 默認:   slice 0;
 位置:   http/server/location
QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
李逵劈鱼9900炮 湖南快乐十分开奖结果查询结果 北京时时彩走势分析 下载快3新版 大红鹰心水论论坛 外围pk10技巧 顶级的官方网站 微乐福建麻将 内蒙古快三专家预测一 香港特供资料站生肖玄机 老时时开奖历史结果