为了技术,我不会停下学习的脚步,我相信我还能走二十年。
分类: 架构设计与优化
2013-02-26 10:42:59
原文地址:LVS源码解析前奏--技术原理 作者:scq2099yt
LVS即Linux Virtual Server,现已成为Linux内部标准的一部分,通过LVS的负载均衡技术和Linux操作系统能够实现一个高性能、高可用的服务器集群。
一、体系结构
使用LVS构建的集群系统由三部分组成:最前端的负载均衡层(Loader Balancer)、中间的服务器群组层(Server Arrary),最底层的数据共享存储层(Shared Storage),具体如下图:
图1 LVS体系结构图
1、负载均衡层(Loader Balancer)
位于集群最前端,由一台或多台负载调度器(Director Server)组成,LVS模块安装在Director Server上,Director Server类似于路由器,其包含有LVS所设定的路由表,并通过路由表将用户的请求分发给Server Arrary层的真实服务器(Real Server)。
此外,Director Server还需要安装针对Real Server的监控模块,用于监测Real Server的健康状况,并在其故障时将其从路由表中删除,在恢复时重新加入到路由表。
2、服务器群组层(Server Arrary)
由一组实际运行的服务器组成,可以是DNS、WEB、FTP、MAIL等服务器,在实际应用中,Director Server可以兼任Real Server。
3、数据共享存储层(Shared Storage)
为所有Real Server提供共享存储,一般由磁盘阵列组成,可以搭载NFS、GFS、Hadoop等提供数据共享。
需要注意的是,这些东东对用户来说都是透明的,只是一个使用VIP的虚拟服务器集群而已。
二、负载均衡机制
LVS基于IP负载均衡技术,通过IPVS模块实现负载均衡,IPVS是LVS集群的核心。IPVS安装在Director Server上,为Director Server虚拟出一个IP地址,用户通过这个VIP来访问Director Server,然后由Director Server从Real Server列表中选择一个节点响应用户请求。IPVS提供的负载均衡机制有一下三种:
1、VS/NAT
VS/NAT即Virtual Server via Network Address Translation,即通过网络地址转换技术来实现虚拟服务器。当用户请求到达Director Server时,其将请求报文的目标地址即虚拟IP地址和目标端口号分别改为选定的Real Server的IP地址和相应端口号,然后将报文请求发送给选定Real Server,Real Server收到数据后返回数据给用户,返回的数据也要经过Director Server,其再次将返回报文的源地址和源端口号分别改为虚拟IP地址和相应端口号,然后将报文数据返回给用户。
可以看出NAT方式,与HAProxy相似,请求和响应报文都要经过Director Server重写地址,当用户请求越来越多时,Director Server的处理能力将成为瓶颈。
2、VS/TUN
VS/TUN即Virtual Server via IP Tunneling,即通过来实现虚拟服务器。用户请求通过Director Server转发到Real Server,而Real Server直接响应用户,也就是请求通过Director Server转发,而响应不需要。这要求所有服务器必须支持IP Tunneling或者IP Encapsulation协议。
3、VS/DR
VS/DR即Virtual Server via Direct Routing,即通过直接路由技术实现虚拟服务器。用户请求到达当用户请求到达Director Server时,其改写请求报文的MAC地址,然后将请求报文发送到Real Server,而Real Server将响应直接返回给用户。DR是三种负载均衡机制中性能最好的,但要求Director Server和Real Server都有一块网卡连在同一物理网段上。
三、负载调度算法
常用的调度算法主要有以下四种:
1、Round Robin
轮询选择Real Server。
2、Weighted Round Robin
加权轮询:根据性能为Real Server设置权值,权值高的处理请求的机会也越多。
3、Least Connection
最少连接数来选择Real Server。
4、Weighted Least Connection
加权最少连接:根据权值和连接数来选择Real Server。
此外,还有四种算法:基于局部性的最少连接(Locality-Based Least Connections)、带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)、源地址散列(Source Hashing)。在此不表,如想深入了解,可以看。