Nginx负载均衡配置

#

什么是负载均衡

   如上图所示,所谓负载均衡,就是通过Nginx按照一定的策略,将客户端的大量请求,分配到不同的上游服务器进行处理,从而防止服务器处理大量请求,导致崩溃的问题。

  接下来,我会介绍Nginx,最常用的负载均衡配置方式。

默认策略 (default)

    Nginx的默认的负载均衡方式,更像是雨露均沾,会依次轮询配置的上游服务器地址。

    缺点忽略了服务器的性能差异饱和状态,无法更加精确的分配处理任务。

upsteram disk_server {
	server 192.168.90.111;
	server 192.168.90.222;
}

server {
	listen 80;
	server_name www.devtt.com
	location / {
		proxy_pass http://disk_server; # 这里指向 upsteram '变量'
	}
}

权重值 (weight)

  Nginx权重配置方式,可根据服务器性能,更加合理的分配处理任务。在配置中,是用weight关键字设定正整数,来分配不同服务器的请求比例

  缺点:配置设定后是静态的,会忽略目标服务器动态负载状态,所以权重配置方式,不一定能准确的分配相关任务。

# 注:权重值并不是百分比!它是相对其他服务器的权重值来衡量的单位!
upstream disk_server {
	server 192.168.90.111 weight=6; # 例如这台服务器性能、吞吐量最高,可分配更多的任务。
	server 192.168.90.222 weight=2;
	server 192.168.90.333 weight=2;
}

server {
	listen 80;
	server_name www.devtt.com;

	location / {
		proxy_pass http://disk_server;
	}
}

IP分配策略 (ip_hash

  IP分配策略,是将相同IP地址的请求分配到同一台上游服务器,确保相同IP请求,始终由同一台目标服务器处理。

  缺点相同IP请求都会分配到同一服务器,可能造成目标服务器过载,特别是移动互联网时代,频繁切换基站导致IP变化

upstream disk_server {
    ip_hash;
    server 192.168.90.111;
    server 192.168.90.222;
    server 192.168.90.333;
}

server {
    listen 80;
    server_name www.devtt.com;

    location / {
        proxy_pass http://disk_server;
    }
}

URL分配策略 (url_hash)

  URL分配策略,是将请求的URL进行哈希计算,将具有相同URL的请求,分配到同一台上游服务器

  缺点:与ip_hash类似,可能会导致某些服务器处理的请求量过多,造成目标服务器过载,因为 URL 的分布可能不均匀。

upstream disk_server {
    hash $request_uri;  # URI 会进行哈希
    server 192.168.90.111;
    server 192.168.90.222;
    server 192.168.90.333;
}

server {
    listen 80;
    server_name www.devtt.com;

    location / {
        proxy_pass http://disk_server;
    }
}

备用机 (backup)

  备用机策略,顾名思义,就是在其他上游服务器出现异常、不可用时,进行调用分配,如果其他服务器正常,则不分配处理任务。

upstream disk_server {
    server 192.168.90.111;
    server 192.168.90.222;
    server 192.168.90.333 backup;  # 备用服务器
}

server {
    listen 80;
    server_name www.devtt.com;

    location / {
        proxy_pass http://disk_server;
    }
}

最小连接数 (least_conn)

  最小连接数策略,该策略会计算每个服务器当前连接数,将请求分配连接数最少的上游服务器,是典型的动态均衡策略。

  缺点:高并发场景下,变化较快,连接数的准确性不一定可控。

upstream disk_server {
    least_conn;  # 使用最小连接数策略
    server 192.168.90.111 weight=2;  # 权重为2的服务器
    server 192.168.90.222 weight=1;  # 权重为1的服务器
    server 192.168.90.333 weight=1 backup;  # 备用服务器,权重为1
}

server {
    listen 80;
    server_name www.devtt.com;

    location / {
        proxy_pass http://disk_server;
    }
}

响应时间策略 (fair)

  响应时间分配策略,是根据每个上游服务器响应时间进行分配,响应最快的服务器将会分配更多处理任务,也是动态均衡策略。

  缺点:还需要搭配Nginxnginx_upstream_fair插件使用,安装配置相对繁琐,我本人没用过。

upstream disk_server {
    fair;
    server 192.168.90.111;
    server 192.168.90.222;
    server 192.168.90.333;
}

server {
    listen 80;
    server_name www.devtt.com;

    location / {
        proxy_pass http://disk_server;
    }
}

  以上,就是Nginx的常见负载均衡配置方案,没有最好的方案,只有最适合自己业务场景的方案。