Nginx作為負載均衡服務簡介
Nginx負載均衡
GSLB(全局負載均衡)
調度中心節點:一個全局的調度節點;
調度節點:一個局部調度節點;
應用服務中心節點:一個全局的應用服務調度節點;
應用服務:一個局部應用服務節點;
調度中心節點管理着調度節點;
應用服務中心節點管理着應用服務;
舉例:
第一步:張三請求局部調度節點,局部調度節點則返回服務地址給張三;
第二步:張三根據局部調度節點返回的服務地址,請求局部應用服務,局部應用服務則返回結果給張三。
SLB(負載均衡)
調度節點與服務節點處於一個邏輯單元里面,這樣對於部分服務的實時性、響應性是非常好的。
Nginx使用的就是SLB。
四層負載均衡和七層負載均衡
四層負載均衡
按照網絡OSI模型可以分為四層負載均衡和七層負載均衡;
四層負載均衡:在OSI模型里面的傳輸層,傳輸層能支持到tcp/ip協議,所以只需要轉發tcp/ip協議的包,就可以實現負載均衡。
優勢:性能非常好,只需要在最底層應用處理,而不需要進行一些復雜的邏輯,只需要包的轉發就行
七層負載均衡
七層負載均衡主要是在應用層使用,所以它可以完成很多應用層的協議請求,比如HTTP協議的負載均衡,它可以實現HTTP信息的改寫,頭信息的改寫,應用規則的控制。
Nginx就是典型的七層負載均衡SLB。
nginx 作為負載均衡服務配置
Nginx負載均衡模型圖
upstream server就相當於配置的虛擬服務池
upstream配置語法
- Syntax: upstream name { ... }
- Default: —
- Context: http
負載均衡案例配置
server1.conf
server { listen 8001; server_name localhost; #charset koi8-r; location / { root /opt/app/code1; index index.html index.htm; } }
server2.conf
server { listen 8002; server_name localhost; #charset koi8-r; location / { root /opt/app/code2; index index.html index.htm; } }
server3.conf
server { listen 8003; server_name localhost; #charset koi8-r; location / { root /opt/app/code2; index index.html index.htm; } }
upstream_test.conf
upstream imooc { server 192.168.1.112:8001; server 192.168.1.112:8002; server 192.168.1.112:8003; } server { listen 80; server_name www.zhangbiao.com; resolver 8.8.8.8; location / { proxy_pass http://imooc; proxy_redirect default; }
刷新一次
刷新二次
屬性三次
Upstream舉例
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.exmple.com:8080 backup; server backup2.example.com:8080 backup; }
Nginx作為負載均衡服務_backup狀態演示
upstream_test.conf
upstream imooc { server 192.168.1.112:8001 down; server 192.168.1.112:8002 backup; server 192.168.1.112:8003 max_fails=1 fail_timeout=10s; } server { listen 80; server_name localhost www.zhangbiao.com; access_log /var/log/nginx/test_proxy.access.log main; resolver 8.8.8.8; location / { proxy_pass http://imooc; include proxy_params; } }
backup 表示備用服務器,平時用不上,一旦其他服務器掛了,就會啟用備用服務器。
Nginx作為負載均衡服務_輪詢策略與加權輪詢
調度算法
weight 加權配置
upstream imooc {
server 192.168.1.112:8001;
server 192.168.1.112:8002;
server 192.168.1.112:8003 weight=5;
}
server {
listen 80;
server_name localhost www.zhangbiao.com;
access_log /var/log/nginx/test_proxy.access.log main;
resolver 8.8.8.8;
location / {
proxy_pass http://imooc;
include proxy_params;
}
}
7個請求會有5個請求會訪問192.168.1.112:8003服務,1個訪問192.168.1.112:8001服務,1個訪問192.168.1.112:8002服。
ip_hash配置
upstream imooc {
ip_hash;
server 192.168.1.112:8001;
server 192.168.1.112:8002;
server 192.168.1.112:8003;
}
server {
listen 80;
server_name localhost www.zhangbiao.com;
access_log /var/log/nginx/test_proxy.access.log main;
resolver 8.8.8.8;
location / {
proxy_pass http://imooc;
include proxy_params;
}
功能:
- 同一個IP每次都是請求到固定的后端服務器
url_hash配置 (一般使用這個)
upstream imooc {
hash $request_uri;
server 192.168.1.112:8001;
server 192.168.1.112:8002;
server 192.168.1.112:8003;
}
server {
listen 80;
server_name localhost www.zhangbiao.com;
access_log /var/log/nginx/test_proxy.access.log main;
resolver 8.8.8.8;
location / {
proxy_pass http://imooc;
include proxy_params;
}
功能:
- 按照url的hash 結果來分配請求,這樣是的來自同一位置的 IP 訪問到固定的后端服務。
ip1 訪問以下請求每次獲取的內容都是一樣的
http://192.168.1.112/index.html
ip2 訪問以下請求每次獲取的內容都是一樣的
http://192.168.1.112/index.html
ip2 訪問以下請求每次獲取的內容都是一樣的
http://192.168.1.112/index.html