引言
**
当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 Nginx 做反向代理。并且多台服务器可以根据策略分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。Nginx为我们提供了几种种负载均衡策略:轮询、权重、ip_hash、最少连接数
启动2个服务
server 192.168.233.111:8080; server 192.168.233.112:8081;


轮询(默认策略)
配置轮询
vi /usr/local/docker/docker-nginx/nginx/conf.d/default.conf
upstream test-server{server 192.168.233.111:8080;server 192.168.233.112:8081;}server {listen 80;listen [::]:80;server_name localhost;location / {proxy_pass http://test-server/;}}
备注:使用 upstream 声明模块,location 引用声明的 test-server 注意:
- upstream
不能存在下划线 -否则会出现各种不可预期的问题。- 在轮询中,如果服务器down掉了,会自动剔除该服务器。
- 缺省配置就是轮询策略。
- 此策略适合服务器配置相当,无状态且短平快的服务使用。
配置文件重新加载
如果在运行的过程中需要调整配置,可以使用如下两个命令重新加载配置文件
检查配置文件
docker exec -it nginx service nginx check-reload
重新加载配置文件
docker exec -it nginx service nginx reload
请求访问结果
权重
配置权重
vi /usr/local/docker/docker-nginx/nginx/conf.d/default.conf
upstream test-server{server 192.168.233.111:8080 weight=1;server 192.168.233.112:8081 weight=2;}server {listen 80;listen [::]:80;server_name localhost;location / {proxy_pass http://test-server/;}}
备注:
- 轮询的基础上使用
weight关键字,weight和访问几率成正比,也就是说访问3次2次会落在8081上注意:
- upstream
不能存在下划线 -否则会出现各种不可预期的问题。- 权重越高分配到需要处理的请求越多。
- 此策略可以与least_conn和ip_hash结合使用。
- 此策略比较适合服务器的硬件配置差别比较大的情况。
配置文件重新加载
如果在运行的过程中需要调整配置,可以使用如下两个命令重新加载配置文件
检查配置文件
docker exec -it nginx service nginx check-reload
重新加载配置文件
docker exec -it nginx service nginx reload
请求响应结果
IP Hash
基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个
配置权重
vi /usr/local/docker/docker-nginx/nginx/conf.d/default.conf
upstream test-server{ip_hash;server 192.168.233.111:8080;server 192.168.233.112:8081;}server {listen 80;listen [::]:80;server_name localhost;location / {proxy_pass http://test-server/;}}
备注:
- 在upstream模块中,添加
ip_hash关键字,同一个IP地址请求,在服务器不出问题的情况下,会一直落到同一个服务器上注意:
- upstream
不能存在下划线 -否则会出现各种不可预期的问题。- 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
- ip_hash不能与backup同时使用。
- 此策略适合有状态服务,比如session。
- 当有服务器需要剔除,必须手动down掉。
配置文件重新加载
如果在运行的过程中需要调整配置,可以使用如下两个命令重新加载配置文件
检查配置文件
docker exec -it nginx service nginx check-reload
重新加载配置文件
docker exec -it nginx service nginx reload
请求响应结果
附录
配置说明
| upstream | 用于声明函数体 |
|---|---|
| weight | 根据权重分配请求,默认的权重是1,通过关键字指定权重值weight和访问几率成正比 |
| ip_hash | 用于标记ip_hash,根据请求iphash到指定的服务器 |
| least_conn | 最小连接数 |
| fail_timeout | 定义失败后的重发间隔时间,与max_fails结合使用。 |
| max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
| fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
| backup | 标记该服务器为备用服务器。当主服务挂掉,请求会被发送到此配置节点。 |
| down | 标记服务器永久停机了。 |
# 配置说明,根据自己的需要配置。此块仅作为关键字配置方式说明,非实际应用说明upstream test-server{ip_hash; # 根据请求IP HASH策略least_conn; # 最小连接数server 192.168.233.111:8080 weight=2 ; # 轮询权重配置server 192.168.233.111:8080 max_fails=5 fail_timeout=10 ; # 最大失败5次 每次间隔10秒server 192.168.233.111:8080 fail_time=10 ; # 停机时间 10秒server 192.168.233.111:8080 backup; # 备用节点server 192.168.233.111:8080 down; # 宕机节点}server {listen 80;listen [::]:80;server_name localhost;location / {proxy_pass http://test-server/;}}



