介绍
首先要介绍的就是什么是负载均衡。
众所周知一个互联网应用必须能承受大量的并发访问,而再好的服务器也无法做到可以承受无限制增长的并发访问量,并提供优秀的容错机制。于是“集群”这一概念就应运而生,所谓“集群”,简单点来说就是使用N个廉价的PC机共同作为服务器使用,从而达到降低成本、提高容错率等效果。(本文不再详细赘述)
而既然使用集群,那么就必然要面临一个问题——当服务端接收到一个请求的时候,我该安排哪个服务器为其服务呢?我是应该挑选空闲的服务器为其服务还是选用性能优秀的服务器?或者使用它之前就访问过的服务器来提高缓存的命中率?这一系列的问题就是著名的“负载均衡”,本文就将隆重介绍高性能负载均衡服务器Nginx。
负载均衡算法
下面就简单介绍几种负载均衡的算法:
- 轮询法 —— 轮询使用所有挂载在代理服务器下的服务实例,为请求提供服务。
- 最少连接数法 —— 每次接收请求以后都自动寻找当前连接数最少的服务器为其服务。
- ip 哈希法 —— 建立一个合适的哈希算法,通过请求者的ip对服务器进行映射,选取被映射到的服务器为其服务,这样可以保证每个ip都是由一个与它对应的服务器服务。
下面就介绍负载均衡算法如何在Nginx中配置
默认的负载均衡配置
上面就是最简单的负载均衡配置,在这样的配置下,默认使用的负载均衡算法就是轮询法。代理端口为80,一共代理srv1、srv2、srv3三个服务器。意思就是请求只需要访问该机器的80端口,Nginx就会自动将请求转发到所配置的三个服务器下面,选择服务器的算法就是轮询法。http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
最少连接数算法
若要使用最小连接数算法,只需要在最上面添上“least_conn” 即可。upstream myapp1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
ip哈希法
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
与最少连接数法类似,只需在配置中添加"ip_hash" 即可使用ip哈希算法做负载均衡。
权重法
最后再介绍一种负载均衡算法——权重法。配置如下:
如上所示,只需在服务器的后面添加“weiht=x”即可奉陪某个服务器的权重(默认是1)。上述配置的作用就是如果有5个请求,那么srv1将会处理3个,其它各处理1个。upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }