原创

Nginx实现负载均衡

温馨提示:
本文最后更新于 2022年11月28日,已超过 565 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

负载均衡的作用

1、转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
2、故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
3、恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

Nginx实现负载均衡

1、源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
2、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
3、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
4、加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
5、加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
6最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

Nginx的负载均衡策略

1、轮询(默认策略,nginx自带策略):我上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。会将每个请求按时间顺序分配到不同的后端服务器。

http {
    upstream xuniji_fuzai {
        server 192.168.30.128:80;
        server 192.168.30.135:80;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}

2、weight(权重,nginx自带策略):指定轮询的访问几率,用于后端服务器性能不均时调整访问比例。

http {
    upstream xuniji_fuzai {
        server 192.168.30.128:80 weight=7;
        server 192.168.30.135:80 weight=2;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}

3、ip_hash(依据ip分配,nginx自带策略):指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,可以解决session不能跨服务器的问题。

http {
    upstream xuniji_fuzai {
        ip_hash;
        server 192.168.30.128:80;
        server 192.168.30.135:80;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}

4、least_conn(最少连接,nginx自带策略):把请求转发给连接数较少的后端服务器。

http {
    upstream xuniji_fuzai {
        #把请求转发给连接数比较少的服务器
        least_conn;
        server 192.168.30.128:80;
        server 192.168.30.135:80;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}

5、fair(第三方):按照服务器端的响应时间来分配请求,响应时间短的优先分配。

http {
    upstream xuniji_fuzai {
        fair;
        server 192.168.30.128:80;
        server 192.168.30.135:80;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}

6、url_hash(第三方):该策略按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,需要配合缓存用。

http {
    upstream xuniji_fuzai {
        hash $request_uri;
        server 192.168.30.128:80;
        server 192.168.30.135:80;
    }
  
    server {
        listen 81;
        server_name www.xuniji.one.com;
  
        location / {
            proxy_pass http://xuniji_fuzai;
            proxy_set_header Host $proxy_host;
        }
    }
}
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录