MENU

nginx upsteam 分配方式

June 13, 2018 • Read: 9410 • Nginx

基于域名

upstream apache_cluster{
        dynamic_resolve fallback=stale fail_timeout=3s;
        server  1-1.host :8080
}
upstream 负载均衡

轮询

upstream apache_cluster{
        server 10.0.0.1:8080 ;
        server 10.0.0.2:8080 ;
}

weight 权重

用于后端服务器优劣的场景

upstream apache_cluster{
        server 10.0.0.1:8080  weight=2;
        server 10.0.0.2:8080  weight=3;
        server 10.0.0.2:8080  weight=5;
}

ip_hash

每个访客会固定访问一个后端服务器,可以解决 session 一致问题

 upstream backend {
            ip_hash;
            server 10.0.0.1:8080 ;
            server 10.0.0.2:8080 ;
        }

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash(第三方)

使每个 url 定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。

状态检测

upstream apache_cluster{
        server 10.0.0.1:8080 max_fails=3 fail_timeout=30;
        server 10.0.0.2:8080 max_fails=3 fail_timeout=30;
}

1.max_fails 和 fail_timeout 一般会关联使用
2.max_fails 默认1, 当超过最大次数时,返回 proxy_next_upstream 模块定义的错误,
3.fail_timeout:max_fails 次失败后暂停的时间

  1. 设置为 0,则表示取消这项检查; 当 upstream 中只有一个 server 时,max_fails 和 fail_timeout 参数可能不会起作用

backup

backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。

upstream apache_cluster{
        server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
        server 10.0.0.2:8080 backup;
}

 keepalive

keepalive tomcat 官方默认推荐最大值是 200

nginx_upstream_check_module

淘宝技术团队开发的 nginx 模快, 检测后方 realserver 的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器。

upstream linuxyan { 
  server 192.168.0.21:80;
  server 192.168.0.22:80;
  check interval=3000 rise=2 fall=5 timeout=1000;
}

模块地址:https://github.com/yaoweibin/nginx_upstream_check_module

realserver状态的页面

location /nstatus {
  check_status;
  access_log off;
  #allow SOME.IP.ADD.RESS;
  #deny all;
}

兼总条贯 知至知终