Nginx负载均衡

基本结构

负载均衡服务器由多台机器组成,以一台为例,其他机器使用相同部署信息。


基本结构图

主要作用

  • 根据负载均衡策略和算法,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
  • 通过心跳检测的方式,判断应用服务器是否可用,自动将请求转发到可用的应用服务器上。
  • 故障应用服务器恢复工作后,自动添加到可用应用服务器中。

搭建两台web服务器

192.168.192.10:8080
192.168.192.11:8080

为验证负载均衡的效果,可以把web服务器的主页写入不同内容,也可以通过查看日志验证。

配置负载均衡服务器

upstream balance {  # balance是自定义名称,与proxy_pass 保持一致
 server 192.168.192.10:8080; # 转发请求的目的主机,分发策略也在此处配置
 server 192.168.192.11:8080;
}
server {
        listen 80; # 访问负载均衡服务器的配置信息
        server_name bl.com; # 用户访问的域名
        location / { # 根据proxy_pass读取转发信息
                proxy_pass http://balance;
                #root html;
                #index index.html index.htm;
        }
}

浏览器访问

http://bl.com

# 两台机器的内容会交换显示,查看日志分别有来自于负载均衡服务器的请求信息

负载均衡分发策略

轮询 (默认)

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

upstream myserver {
 server 192.168.17.129:8080 fail_timeout=20s max_fails=3;
 server 192.168.17.129:8081 backup; # backup标记该服务器为备用服务器
 server 192.168.17.129:8082 down; # 永久停机
}

参数说明:
fail_timeout和max_fails结合使用,在20s内在该服务器请求失败了3次,认为该机器停机。
fail_timeout 默认10s。
backup:备用机,当主服务器停止时,请求会被发送到该服务器。
down:服务器永久停机。

适用场景
此策略适合服务器配置相当,无状态且短平快的服务使用。

权重

weight 代表权重默认为 1,权重越高被分配的客户端越多

    upstream myserver {
     server 192.168.17.129:8080 weight 3; # 8080与8081按照3:1的比例分配访问频次
     server 192.168.17.129:8081;
    }

可以与轮询、least_conn和ip_hash结合使用。

适用场景
此策略比较适合服务器的硬件配置差别比较大的情况。

ip哈希

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

    upstream myserver {
     ip_hash;    #保证每个访客固定访问一个后端服务器
     server 192.168.17.129:8080 weight 3; 
     server 192.168.17.129:8081;
    }

在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
ip_hash不能与backup同时使用。
此策略适合有状态服务,比如session。
当有服务器需要剔除,必须手动down掉。

适用场景
相同的客户端的请求一直发送到相同的服务器,以保证session会话。

least_conn

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

    upstream myserver {
     least_conn;    #把请求转发给连接数较少的后端服务器
     server 192.168.17.129:8080 weight 3; 
     server 192.168.17.129:8081;
    }

适用场景
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

第三方策略

需要安装第三方插件
fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream myserver {
     fair;    #实现响应时间短的优先分配
     server 192.168.17.129:8080 weight 3; 
     server 192.168.17.129:8081;
    }

url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

upstream myserver {
 hash $request_uri;    #实现每个url定向到同一个后端服务器
 server 192.168.17.129:8080 weight 3; 
 server 192.168.17.129:8081;
}

你可能感兴趣的:(Nginx负载均衡)