几种常用负载均衡架构
网站编辑2022-03-17 15:51:09193
什么是负载均衡(Load balancing)在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服务。我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.xxxx.com。那么当用户在浏览器输入 www.xxxx.com 的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等。
在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。
最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的是后端的集群。
一个典型的互联网应用的拓扑结构是这样的:
负载均衡分类
现在我们知道,负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其它资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。那么,这种计算机技术的实现方式有多种。
大致可以分为以下几种,其中最常用的是四层和七层负载均衡:
二层负载均衡
负载均衡服务器对外依然提供一个 VIP(虚IP),集群中不同的机器采用相同 IP地址,但机器的 MAC 地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标 MAC 地址的方式将请求转发到目标机器实现负载均衡。
三层负载均衡
和二层负载均衡类似,负载均衡服务器对外依然提供一个 VIP(虚IP),但集群中不同的机器采用不同的 IP 地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过 IP 将请求转发至不同的真实服务器。
四层负载均衡
四层负载均衡工作在 OSI 模型的传输层,由于在传输层,只有 TCP/UDP 协议,这两种协议中除了包含源 IP、目标 IP 以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息( IP+端口号 )将流量转发到应用服务器。
七层负载均衡
七层负载均衡工作在 OSI 模型的应用层,应用层协议较多,常用 HTTP、Radius、DNS 等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个 Web 服务器的负载均衡,除了根据 IP 加端口进行负载外,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。
对于一般的应用来说,有了 Nginx 就够了。Nginx 可以用于七层负载均衡。但是对于一些大的网站,一般会采用 DNS+四层负载+七层负载的方式进行多层次负载均衡。
常用负载均衡工具
硬件负载均衡性能优越,功能全面,但价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有 Nginx、LVS、HaProxy 等。
Nginx/LVS/HAProxy 是目前使用最广泛的三种负载均衡软件。
1、 LVS
LVS(Linux Virtual Server),也就是 Linux 虚拟服务器,是一个由章文嵩博士发起的自由软件项目。使用 LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 主要用来做四层负载均衡。
LVS 架构
LVS 架设的服务器集群系统由三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用 Server Array 表示,最底层的数据共享存储层,用 Shared Storage 表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS 的各个层次的详细介绍:
Load Balancer 层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS 模块就安装在 Director Server上,而 Director 的主要作用类似于一个路由器,它含有完成 LVS 功能所设定的路由表,通过这些路由表把用户的请求分发给 Server Array 层的应用服务器(Real Server)上。同时,在 Director Server 上还要安装对 Real Server 服务的监控模块 Ldirectord,此模块用于监测各个 Real Server 服务的健康状况。在 Real Server 不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
Server Array 层:由一组实际运行应用服务的机器组成,Real Server 可以是 Web 服务器、Mail 服务器、FTP 服务器、DNS 服务器、视频服务器中的一个或者多个,每个 Real Server 之间通过高速的 LAN 或分布在各地的 WAN 相连接。在实际的应用中,Director Server 也可以同时兼任 Real Server 的角色。
Shared Storage 层:是为所有 Real Server 提供共享存储空间和内容一致性的存储区域,在物理上一般由磁盘阵列设备组成,为了提供内容的一致性,一般可以通过 NFS 网络文件系统共享数 据,但 NFS 在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如 Redhat 的 GFS 文件系统、Oracle 提供的 OCFS2 文件系统等。
从整个 LVS 结构可以看出,Director Server 是整个 LVS 的核心,目前用于 Director Server 的操作系统只能是 Linux 和 FreeBSD,Linux 2.6 内核不用任何设置就可以支持 LVS 功能,而 FreeBSD 作为 Director Server 的应用还不是很多,性能也不是很好。对于 Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD 系列都能很好地支持。
2、Nginx
Nginx(发音同 engine x)是一个网页服务器,它能反向代理 HTTP、HTTPS,、SMTP、POP3、IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。







