Nginx负载均衡

负载均衡:将客户端的请求通过调度单元分摊到多个操作单元上进行执行,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优。

配置方法:

需要结合proxy_passupstram server

upstream配置

# 只能配置在http层,大括号中有多个参数
upstream name {...}

server参数

  • down:当前的server暂时不参与负载均衡
  • backup:预留的备份服务器
  • max_fails:允许请求失败的次数
  • fail_timeout:经过max_fails失败后,服务暂停的时间,默认10秒
  • max_conns:限制最大的接收的连接数
  • weight:表示权重,默认是1,多个server轮询访问
upstream backend{

        # 对应每一个开启的服务,可以是ip,域名,socket
        # weight 表示权重,默认情况下是1,进行轮询访问
        server backend1.example.com weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;

        # backup表示是备用节点
        server backup1.example.com:8080 backup;
        server backup2.example.com:8080 backup;
}

Nginx调度算法

  • 轮询:按时间顺序逐一分配到不同的后端服务器
  • 加权轮询:weight值越大,分配到的访问几率越高
  • ip_hash:每个请求按ip的hash结果分配,这样来自同一个IP的固定访问一个后端服务器(这种方法走代理的话会导致都在一台服务器)
  • least_conn:最少连接数,哪个机器连接数少就分发
  • url_hash:按照访问的URL的hash结果分配请求,每个URL定向到同一个后端服务器
  • hash:hash自定义的key

设置调度算法:

upstream name{
        # 设置调度算法,默认是轮询,如果是加权轮询,直接在server后加weight就好
        ip_hash;
        # 如果是hash,可以自定义key,可以根据请求地址等,如:
        hash $request_uri;
        server ...;
}

配置完upstream后,需要利用proxy_pass进行配置

location / {
        # name对应上面的upstream的name
        proxy_pass http://name
        # 出现指定错误时跳过这个服务器使用下一个
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        # 导入其他proxy的配置
        include proxy_params;
}