当我们做项目时,如果只有单节点应用很容易会有各种意外导致应用无法访问,或者由于访问量太大,单节点处理不过来。那为了保证应用的健壮性,我们往往会搭建集群,这样会有多台服务器多个应用。

但是这个对用户是隐藏的,用户并不知道集群有多少台服务器,我们最终暴露给用户的只有一个应用地址,用户通过应用地址不管访问到哪台服务器上,最终展示给用户效果是一样的,就算有一台服务器宕机了,客户还是可以通过应用地址访问到另一台上面。这就是nginx的另一个作用-负载均衡。

一、负载均衡的作用

1、转发功能

按照一定的算法(权重、轮询),将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。

2、故障移除

通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。

3、恢复添加

如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

二、Nginx实现负载均衡策略

1、源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问,这样可以解决session共享问题。

upstream hashserver {

ip_hash;

server localhost:8001;

server localhost:8002;

}

2、轮询法(默认):将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

upstream lxserver {

server localhost:8001;

server localhost:8002;

}

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

upstream weightserver {

server localhost:8001 weight=1;

server localhost:8002 weight=2;

}

4、fair:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,fair是按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream fairserver {

server localhost:8001;

server localhost:8002;

fair;
    
}

三、配置说明

upstream test{

server 127.0.0.1:8001 weight=1;

server 127.0.0.2:8002 down;

server 127.0.0.3:8003 backup;

server 127.0.0.4:8004 weight=2;

}

//down 表示单前的server临时不參与负载.

//weight 默觉得1.weight越大,负载的权重就越大

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

完整配置
worker_processes 1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    
    upstream lxserver {
        server localhost:8001;
        server localhost:8002;
    }

    server {
        listen 80;
        server_name localhost;
    
        location / {
            proxy_pass   http://lxserver;
        }
    }
}