nginx负载均衡
一、以下是Nginx作为七层负载均衡常用的几种调度算法和适用的业务场景
负载均衡其意思就是分摊到多个操作单元上进行执行
nginx本身支持4种:轮询(round robin)
,加权轮询(weight round robin)
,ip_hash
,最小连接(least_conn)
第三方模块,支持2种:最快响应时间(fair)
,url_hash
1、轮询(round robin)(默认调度算法)
特点:每个请求按时间顺序逐一分配到不同的后端服务器处理。 适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时使用。
upstream bertram.com {
server 192.168.0.14:8080 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 max_fails=2 fail_timeout=10s;
}
2、加权轮询(weight round robin)
特点:指定轮询几率,weight值(权重)和访问比例成正比,用户请求按权重比例分配。
适用业务场景:用于后端服务器硬件性处理能力不平均的情形。
upstream bertram.com {
server 192.168.0.14:8080 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 weight=10 max_fails=2 fail_timeout=10s;
}
3、ip_hash
特点:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题。
适用业务场景:适用于需要账号登录的系统,会话连接保持的业务。
upstream bertram.com {
ip_hash;
server 192.168.0.14:8080 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 max_fails=2 fail_timeout=10s;
}
4、最少连接数 (least_conn)
特点:按nginx反向代理与后端服务器之间的连接数,连接数最少的优先分配。 适用业务场景:适用于客户端与后端服务器需要保持长连接的业务。
upstream bertram.com {
least_conn;
server 192.168.0.14:8080 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 max_fails=2 fail_timeout=10s;
}
5、fair(需编译安装第三方模块 ngx_http_upstream_fair_module)
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。 适用业务场景:对访问响应速度有一定要求的业务。
upstream bertram.com {
fair;
server 192.168.0.14:8080 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 max_fails=2 fail_timeout=10s;
}
6、url_hash(需编译安装第三方模块 ngx_http_upstream_hash_module)
特点:按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。 适用业务场景:适用于后端服务器为缓存服务器时比较有效。
upstream bertram.com {
server 192.168.0.14:8080 max_fails=2 fail_timeout=10s;
server 192.168.0.15:8080 max_fails=2 fail_timeout=10s;
hash $request_uri;
}
二、Nginx负载均衡
1、Nginx后端负载均衡
#这一块 负载均衡 需要我们自己添加,可以写多个后端服务 server localhost:8080;
upstream ruoyi_admin_server_group {
#ip_hash;
server localhost:8080;
server localhost:8090;
}
server {
#server模块, 监听的端口 localhost:80 访问
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#所有的请求都会进入location中,支持正则表达式
location / {
root /sino/dist;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#server_group 's name appeal twice,http://ruoyi_admin_server_group/ 拼接以后就是http://localhost:8080/
#转发后端站点地址,一般用于做软负载,轮询后端服务器
#如果后端只有一个 不需要upstream ruoyi_admin_server_group, 只此 proxy_pass http://localhost:8080/; 即可
proxy_pass http://ruoyi_admin_server_group/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
2、Nginx前端负载均衡
upstream front {
server localhost:8017 max_fails=2 fail_timeout=10s;
server localhost:8018 max_fails=2 fail_timeout=10s;
}
server {
listen 8016;
server_name localhost;
location /{
proxy_pass http://front;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 下面两个只是展示前端的两个服务,实际应用都会指定到不同的服务器
server {
listen 8017;
server_name localhost;
location / {
root /opt/nginx/html/front1;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 8018;
server_name localhost;
location / {
root /opt/nginx/html/front2;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}