Nginx-4 配置:负载均衡

引言

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

image.png

启动2个Netty服务

server 192.168.233.111:8080;
server 192.168.233.112:8081;

image

image

轮询(默认策略)

将客户端发起的请求,平均分配给每一台服务器

image.png

配置轮询

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

请求访问结果

第一次访问结果

image.png

第二次访问结果

image.png

权重

会将客户端的请求,根据服务器的权重值不同,分配不同的数量

image.png

配置权重

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 声明模块,location 引用声明的 test-server

注意:

  • upstream 不能存在下划线 - 否则会出现各种不可预期的问题。
  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

配置文件重新加载

如果在运行的过程中需要调整配置,可以使用如下两个命令重新加载配置文件

  • 检查配置文件
docker exec -it nginx service nginx check-reload
  • 重新加载配置文件
docker exec -it nginx service nginx reload

请求响应结果

第一次访问结果
image.png

第二次访问结果
image.png

第三次访问结果

image.png

IP Hash

基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个
image.png

配置权重

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 声明模块,location 引用声明的 test-server

注意:

  • 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

请求响应结果

第一次访问结果

image.png

第二次访问结果

image.png

第三次访问结果

image.png

附录

常见配置参数说明

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/; 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值