【笔记】Nginx负载均衡

前言

为了提升后台服务器的处理能力,可以增加服务器.实现负载均衡的策略。

准备工作

  • 开启两个不同端口的服务

Tomcat

  • 在Tomcat服务器创建/edu/a.html网页文件

Apache

  • 在Apache服务器创建/edu/a.html网页文件

  • 修改配置文件,将端口号改为8081

启动

  • 启动TomcatApache并查看端口占用情况

  • 启动Nginx并查看端口占用情况

修改配置文件

http 块

  • 添加一个upstream块,自定义名称
/usr/local/etc/nginx/nginx.conf
1
2
3
4
upstream myserver {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}

server 块

/usr/local/etc/nginx/nginx.conf
1
2
listen 80;
server_name 127.0.0.1;

location 块

  • 增加proxy_pass,值为刚创建的upstream块名,增加proxy_connect_timeout,超时时间
/usr/local/etc/nginx/nginx.conf
1
2
3
4
5
location / {
...
proxy_pass http://myserver;
proxy_connect_timeout 10;
}

Nginx分配服务器策略

轮询(默认)

  • 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

权重

  • weight代表权重,默认为1,权重越高被分配的客户端越多
/usr/local/etc/nginx/nginx.conf
1
2
3
4
upstream server_pool {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}

ip_hash

  • 每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决seccion问题
/usr/local/etc/nginx/nginx.conf
1
2
3
4
5
upstream server_pool {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}

风险

  • 由于IP进行hash计算,则可能出现多个用户同时绑定一台服务器的效果,导致负载不均衡
  • 如果绑定同一台服务器,如果这台服务器宕机,则直接影响用户使用

fair(第三方)

  • 按后端服务器的响应时间来分配请求,响应时间短的优先分配
/usr/local/etc/nginx/nginx.conf
1
2
3
4
5
upstream server_pool {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
fair;
}

其他属性

配置关闭服务器

down:关闭服务器

/usr/local/etc/nginx/nginx.conf
1
2
3
4
upstream server_pool {
server 127.0.0.1:8080 down;
server 127.0.0.1:8081;
}

配置备用机

  • 正常情况下,该服务器不会为用户提供服务。但是当服务器宕机,或者服务器正忙时,才会访问该服务器。

bachup:表示备用机

/usr/local/etc/nginx/nginx.conf
1
2
3
4
upstream server_pool {
server 127.0.0.1:8080 backup;
server 127.0.0.1:8081;
}

配置高可用

  • 当服务器发生故障时,通过某种机制可以自动的实现故障的迁移,从而使得用户不受任何的影响。

max_fails:最大失败次数
fail_timeout:如果访问不通,60s之内,不会再次访问故障机

/usr/local/etc/nginx/nginx.conf
1
2
3
4
upstream server_pool {
server 127.0.0.1:8080 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8081;
}

完成

  • 截图纪念

参考文献

哔哩哔哩——尚硅谷官方