文章目录

  • 前言
  • 一、负载均衡是什么?
  • 二、常用策略
  • 1.轮训(默认策略)
  • 2.权重轮训
  • 3.IP绑定 ip_hash
  • 4.一致性hash算法
  • 5.url_hash
  • 6.least_conn
  • 总结



前言

Nginx作为反向代理服务器,其中一个很大的优点就是在进行集群处理方面可以按照某舟算法进行用户请求的优化分配。
在下面将介绍几种常用地负载均衡的方式。

一、负载均衡是什么?

负载均衡的概念是出于集群试分部的系统来讲,可以用某种策略和算法,将用户的请求均匀的分配给各个服务器,由此来缓解服务器的压力,提高服务的性能,给用户更快更好的体验。

二、常用策略

1.轮训(默认策略)

该策略较为简单,为Nginx的默认策略;
Nginx将用户的请求按轮回的方式分配给各个服务器,保证了各个服务器接收到的用户请求均匀。
但是该方式明显存在问题,例如:在实际生产的过程中,每台服务器的性能和硬件配置可能会不同,如果采用该种方式,不论是性能较好的服务器还是性能价差的服务器都会承受相同的压力。很明显性能好优势体现不出来,性能差反而压力也得不到缓解。


2.权重轮训

该策略是在默认轮训方式中的一种优化,在每一台服务器上加上权重这一标识,使用如下:

upstream bankstimulate{
	server *** weight 2;
	server ****	 weight 3;
	server ***** weight 5;
	keepalive 32;
}
....
server{
	listen	80;
	server_name www.bankstimulate.com;
	location / {
		proxy_pass http://bankstimulate;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
	}
}

设置权重之后,会优先分配给权重更大的服务器,在上面的示例中我设置了 2 3 5 三个权重,可以理解为:当有10个用户请求时,会暗中 2 3 5 进行分配。


3.IP绑定 ip_hash

顾名思义是通过ip进行哈希算法来进行分配的。

nginx 分布式负载均衡架构图 nginx实现负载均衡原理_nginx


进行hash算法得出的结果模于服务器的总数量便可以得出请求的服务器的地址。

注意:该策略也存在一定的问题;由于该策略是最后由计算出的ip的hash值和服务器的总数来做模运算。当有服务器宕机或者有新增的服务器的节点时候,那么很多用户访问的服务器的节点就会发生改变;
由此会造成用户的会话丢失,所创建的缓存的内容也会丢失。这样会造成用户体验感很差,接下来要介绍的一种策略会优化这样的问题。

用法:

upstream bankstimulate{
	ip_hash;
	server *** ;
	server ****	;
	server ***** ;
	keepalive 32;
}
....
server{
	listen	80;
	server_name www.bankstimulate.com;
	location / {
		proxy_pass http://bankstimulate;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
	}
}

4.一致性hash算法

上一个策略中已经提到ip_hash的算法会有用户请求的服务器节点更改的问题,那么该一致性算法便可以大大的优化这个问题。

nginx 分布式负载均衡架构图 nginx实现负载均衡原理_负载均衡_02

这里将 0-2^32-1围成一个闭环,经过哈希算法之后将各个服务器节点填在这个闭环上,之后每当有用户进行访问,在进行哈希算法之后也同样的填在闭环某处,该用户访问的节点是顺时针离他最近的一个服务器。

由此可以假设,当有服务器宕机或者增加服务器节点时,只会影响之前访问该节点的用户,并不会对其他的用户会话造成影响,由此大大的增加了用户体验。


5.url_hash

该策略也同样是使用hash算法,但是做哈希运算的参数变成了访问的url路径

nginx 分布式负载均衡架构图 nginx实现负载均衡原理_服务器_03

使用:

upstream bankstimulate{
	hash $request_uri;
	server *** ;
	server ****	;
	server ***** ;
	keepalive 32;
}
....
server{
	listen	80;
	server_name www.bankstimulate.com;
	location / {
		proxy_pass http://bankstimulate;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
	}
}

6.least_conn

该策略较为简单,那一台服务器的连接数较少就将请求到哪一台服务器。

使用:

upstream bankstimulate{
	least_conn;
	server *** ;
	server ****	;
	server ***** ;
	keepalive 32;
}
....
server{
	listen	80;
	server_name www.bankstimulate.com;
	location / {
		proxy_pass http://bankstimulate;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
	}
}

总结

本章节介绍了Nginx的一些常用的负载均衡的策略及其原理,掌握其原理并且需要进行熟练地配置,方便在各种生产环境下选择相适应的方式策略。