高并发负载均衡(二)——Nginx 和LVS



在上一篇博客中介绍到实现负载均衡主要可以通过软、硬件两个方面进行,例如硬件上购买RadWare等硬件设备,或者通过软件策略实现负载均衡。软件策略上使用广泛有Nginx 和LVS

在介绍两款工具之前,先聊聊负载均衡的应用场景

普通web应用部署到多台应用服务器上,客户端通过访问应用服务器发送请求,最简单的就是n对1模式,n个客户端访问同一个应用服务器,这种情况当并发量大了,就无法应对,而且,如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.;解决方案便可以横向扩充n台应用服务器,并且客户端访问与应用服务器中间加上负载均衡配置,负载均衡能实现的效果主要有三个:

高并发负载均衡(二)——Nginx 和LVS_第1张图片

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

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

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

高并发负载均衡(二)——Nginx 和LVS_第2张图片

下面接着介绍实现负载均衡的两款常用方案

一、Nginx

什么是Nginx?

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度新浪网易腾讯等。

优点:

1、可运行linux,并有windows 移植版

2、在高并发情况下,Nginx 可支持高达50000个并发连接数的响应。

Nginx如何实现负载均衡?

1、Nginx反向代理

Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,然后将请求转发给内部网络上的应用服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理

2、Nginx转发策略

Nginx转发请求可按照调度规则通过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器做负载均衡,同时还支持后端服务器的健康检查,也就是上面讲的故障移除和恢复添加功能。

nginx 的 upstream目前支持分配算法: 
1)、轮询(默认) 
      每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,能自动剔除。 
2)、权重
      通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。 
3)、ip_哈希算法
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。 

Ps.大家不要看这些东西挺蒙,其实就是在Nginx服务器配置上指定的参数即可实现。 例如配置反向代理地址:proxy_pass,配置转发算法以及session共享

二、LVS:

什么是LVS

Linux Virtual Server,Linux虚拟服务器,主要使用集群技术实现和Linux操作系统实现一个高性能、高可用的服务器虚拟的服务器集群系统

LVS主要组成部分为:

  负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。简单理解这个调度器跟Nginx的反向代理服务、DNS的域名解析实现的是同样功能。对外提供统一虚拟IP,实际用户访问的是LVS通过转发请求到指定服务器上的应用。

  服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。这也是LVS跟Nginx区别之处:LVS可通过共享存储结构实现多个应用服务器间的session共享。

LVS如何实现负载均衡?

LVS主要通过IP负载均衡技术VS/NAT、VS/TUN、VS/DR实现负载均衡。简单介绍第一个VS/NAT,它是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。

本篇博客介绍了另外两种负载均衡方案:Nginx和LVS以及两种方式的原理内容。下一篇将针对这些原理给出实践篇。敬请期待。

你可能感兴趣的:(【并发编程】)