Nginx入門到實戰(3)負載均衡和快取服務
一、負載均衡
負載均衡的實現方法就是我們上章介紹的反向代理 。將客戶的請求通過 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
相關文章
- Nginx服務系列——負載均衡Nginx負載
- nginx實現兩臺服務負載均衡Nginx負載
- Nginx入門(2)反向代理和負載均衡Nginx負載
- 負載均衡服務之HAProxy基礎入門負載
- 【Nginx】Windows平臺下配置Nginx服務實現負載均衡NginxWindows負載
- nginx反向代理和負載均衡策略實戰案例Nginx負載
- nginx配置web服務|反向代理|負載均衡NginxWeb負載
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- 循序漸進nginx(二):反向代理、負載均衡、快取服務、靜態資源訪問Nginx負載快取
- 代理與反向代理、負載均衡和快取負載快取
- nginx實現負載均衡Nginx負載
- NGINX 負載均衡Nginx負載
- 【Nginx】負載均衡Nginx負載
- nginx負載均衡Nginx負載
- Nginx 負載均衡的Cache快取批量清理的操作記錄Nginx負載快取
- Nginx作為動靜分離、快取與負載均衡初探Nginx快取負載
- Nginx + IIS 實現負載均衡Nginx負載
- 【Nginx】Nginx反向代理和負載均衡部署Nginx負載
- 負載均衡技術(二)———常用負載均衡服務介紹負載
- .Net微服務實戰之負載均衡(上)微服務負載
- .Net微服務實戰之負載均衡(下)微服務負載
- 3分鐘帶你瞭解負載均衡服務負載
- 負載均衡-構建CDN服務負載
- SAP 應用服務負載均衡的實現負載
- Nginx負載均衡模式Nginx負載模式
- Nginx--負載均衡Nginx負載
- nginx 負載均衡搭建Nginx負載
- Nginx負載均衡策略Nginx負載
- 解析 Nginx 負載均衡Nginx負載
- 基於Docker + Consul + Nginx + Consul-template的服務負載均衡實現DockerNginx負載
- 一臺伺服器實現nginx代理負載均衡同時使用web服務伺服器Nginx負載Web
- Nginx+tomcat實現叢集和負載均衡NginxTomcat負載
- Kubernetes:服務與負載均衡負載
- 簡單實踐搭建 nginx 負載均衡Nginx負載
- Nginx如何實現四層負載均衡?Nginx負載
- nginx+tomcat實現負載均衡NginxTomcat負載
- Nginx實現簡單的負載均衡Nginx負載
- Nginx負載均衡詳解Nginx負載