nginx 负载均衡的几种方式

作者: adm 分类: 教程 发布时间: 2021-07-15 20:33

负载均衡机制
nginx提供如下几种负载均衡机制(或方式):

  • 循环机制 – 循环分发对应用服务器的请求
  • 最少连接机制 – 将请求发送给连接数最少的服务器
  • ip-hash机制 – 哈西函数用于确定请求被配那个服务器(基于客户端IP地址)

默认的负载均衡配置

最简单的nginx负载均衡配置如下:

http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}

上例中的同一应用的三个实例运行在srv1-srv3,当负载均衡没有特别配置,则默认循环机制。所以请求代理至服务器组myapp1,然后nginx应用HTTP负载均衡分发请求。

nginx中的反向代理实现了对HTTPS、HTTPS、FastCGI、uwsgi、SCGI、memcached的负载均衡。

设置FastCGI、uwsgi、SCGI、memcached的负载均衡使用相应的 fastcgi_pass、 uwsgi_pass,、scgi_pass、 memcached_pass 指令即可。

最少连接机制

另一种负载均衡原则是最少连接机制。当某些请求耗费较长时间完成时,最少连接机制能让实例的负载更加均衡。

在最少连接机制下nginx不会让大量请求使应用服务器超载,而是将请求分发至相对“悠闲”的服务器。

当least_conn指令用在服务器组配置中时,最少连接机制就生效了。

upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

会话持久

请注意循环或者最少连接数负载均衡机制,可能将同一客户端的请求分发至不同的服务器,无法保证相同客户端的请求总是会被指向相同服务器。

如果需要将客户端与服务端绑定,换而言之:为了使客户端请求总是分发向特定的服务器,ip-hash负载均衡机制就派上了用场。

使用ip-hash客户端IP地址作为一个hash运算的key,以此决定服务器组中的哪台服务器处理客户端请求。该方法保证来自相同客户端的请求总是指向相同服务器,除非服务器不可用。

配置ip-hash负载均衡只需要将ip_hash指令加入服务器组配置中:

upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

加权负载均衡

使用服务器权重可进一步影响nginx负载均衡。

上面的例子中,服务器权重没有配置,意味着所有服务器等权重的应用于负载均衡。

循环机制下大量请求以统一的方式处理,各服务器基本会被分发数量相等的请求。

当权重参数指定给服务器,权重就作为负载均衡的决定条件。

upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}

在上面的配置中每5个请求,3个会被指向srv1,1个指向srv2,1个指向srv3。

在最新版本的nginx中权重可以和最少连接以及ip-hash负载均衡使用。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!