LVS即Linux Virtual Server,虚拟服务器是一个可高扩展且高可用的服务器,构建在真实服务器集群上。服务器群集的体系结构对最终用户彻底透明,用户与群集系统进行交互,就好像它只是一个高性能的虚拟服务器同样。请参考下图:前端
真实服务器和负载均衡器能够经过高速LAN(局域网)或地理上分散的WAN(广域网)互连。负载均衡器能够将请求分配给后端不一样的服务器,而对外则只显示为单个IP的虚拟服务。分配的工做方式可使用IP负载均衡技术或应用级负载均衡技术。经过透明地添加或删除集群中的节点来实现系统的可伸缩性。经过检测节点或守护程序故障并适当地从新配置系统来提供高可用性。linux
Linux Virtual Server Project的基本目标是:使用集群技术为Linux构建高性能,高可用性的服务器,提供良好的可扩展性,可靠性和可维护性。算法
随着互联网的爆炸性增加及其在咱们生活中日益重要的做用,互联网上的流量急剧增长。服务器上的工做负载也随之迅速增长,所以服务器很容易在短期内过载,尤为是对于一些受欢迎的网站。为了克服服务器的过载问题,有两种解决方案:一种是单服务器解决方案,即将服务器升级到性能更高的服务器,可是当请求增长时它很快就会过载,所以咱们必须再次升级,升级过程复杂且成本高;另外一种是多服务器解决方案,即在服务器集群上构建可扩展的网络服务系统。当负载增长时,咱们能够简单地将新服务器或更多服务器添加到集群中以知足不断增加的请求。所以,为网络服务构建服务器集群系统更具可扩展性和成本效益。数据库
有几种方法能够构建服务器集群:后端
A. 基于DNS的负载均衡集群缓存
DNS负载平衡多是构建网络服务集群的最简单方法。它使用域名系统经过将域名解析为服务器的不一样IP地址来将请求分发到不一样的服务器。当DNS请求到达DNS服务器以解析域名时,DNS服务器根据调度策略(例如以循环方式)发出一个服务器IP地址,而后使用相同的本地缓存名称服务器从客户端发出后续请求在指定的名称解析生存时间(TTL)中发送到同一服务器。服务器
可是,因为客户端和分层DNS系统,很容易致使服务器之间的动态负载不平衡,所以服务器不容易处理其峰值负载。在DNS服务器上没法很好地选择名称映射的TTL值,TTL值很小的话,会致使DNS流量很高,DNS服务器将成为瓶颈。而若是TTL值太高,则动态负载不平衡将变得更糟。即便TTL值设置为零,调度粒度是每一个主机,不一样用户的访问模式可能会致使动态负载不平衡,由于有些人可能从网站上拉大量页面,而其余人可能只是浏览几页而已。网络
B. 基于调度程序的负载均衡集群架构
Dispatcher,也称为负载均衡器,可用于在群集中的服务器之间分配负载,以便服务器的并行服务能够在单个IP地址上显示为虚拟服务,而且最终用户能够像单个服务器同样进行交互而不知道集群中的全部服务器。与基于DNS的负载平衡相比,调度程序能够以精细的粒度(例如每一个链接)调度请求,以便在服务器之间实现更好的负载平衡。当一台或多台服务器发生故障时,能够屏蔽故障。服务器管理变得愈来愈容易,管理员能够随时使用服务器或更多服务器,并且不会中断最终用户的服务。并发
负载均衡能够在两个级别完成,即应用级和IP级。例如,Reverse-proxy和pWEB是用于构建可伸缩Web服务器的应用程序级负载平衡方法。他们将HTTP请求转发到群集中的不一样Web服务器,获取结果,而后将其返回给客户端。因为在应用程序级别处理HTTP请求和回复的开销很高,当服务器节点数量增长到5或更多时,应用程序级负载均衡器将成为新的瓶颈。
如今虚拟服务器以三种方式实现。Linux Director中共有三种IP负载均衡技术(数据包转发方法)。它们是经过NAT的虚拟服务器,经过IP隧道的虚拟服务器和经过直接路由的虚拟服务器。即NAT/DR/IP Tunneling。
如下小节将解释它们的优缺点。VS/NAT,VS/TUN 和 VS/DR的比较总结在下表中:
A. NAT
经过NAT的虚拟服务器的优势是真实服务器能够运行任何支持TCP / IP协议的操做系统,真实服务器可使用私有Internet地址,而且负载均衡器只须要1个IP地址。
缺点是经过NAT的虚拟服务器的可扩展性是有限的。当服务器节点的数量增长到大约20或更多时,负载平衡器多是整个系统的瓶颈,由于请求包和响应包都须要由负载平衡器重写。假设TCP数据包的平均长度为536字节,重写数据包的平均延迟约为60us(在奔腾处理器上,使用更高的处理器能够减小一点),负载均衡器的最大吞吐量为8.93 MB /秒。假设真实服务器的平均吞吐量为400Kbytes / s,负载均衡器能够调度22个真实服务器。
B. IP Tunneling
在经过NAT的虚拟服务器中,请求和响应数据包都须要经过负载均衡器,当服务器节点数量增长到20个或更多时,负载均衡器可能成为新的瓶颈,由于网络接口的吞吐量最终有限。从许多Internet服务(例如Web服务)能够看出,请求数据包一般很短,而响应数据包一般包含大量数据。
在经过IP隧道的虚拟服务器中,负载均衡器仅调度对不一样真实服务器的请求,而真实服务器直接向用户返回回复。所以,负载均衡器能够处理大量请求,它能够调度超过100个真实服务器,而且它不会成为系统的瓶颈。所以,使用IP隧道将大大增长负载均衡器的最大服务器节点数。即便负载均衡器只有100Mbps全双工网络适配器,虚拟服务器的最大吞吐量也能够达到1Gbps以上。
IP隧道功能可用于构建高性能的虚拟服务器。构建虚拟代理服务器很是好,由于当代理服务器得到请求时,它能够直接访问Internet以获取对象并将它们直接返回给用户。
C. Direct Routing
与经过隧道方法在虚拟服务器中同样,DR模式仅经过直接路由处理虚拟服务器中的客户端到服务器的流量,而由后端的真实服务器直接相应数据包并发送到客户端。这能够大大提升虚拟服务器的可扩展性。
与经过IP隧道方法的虚拟服务器相比,这种方法没有隧道开销,但要求负载均衡器的接口和真实服务器的接口必须在同一网段。
对于整个系统的可扩展性,可用性和可管理性,咱们一般采用下图所示的LVS集群中的三层架构。
三层结构包括:
Load Balancer
它是整个集群系统的前端机器,并在一组服务器之间平衡来自客户端的请求,以便客户端认为全部服务都来自单个IP地址。
服务器群集
它是一组运行实际网络服务的服务器,例如Web,邮件,FTP,DNS和媒体服务。
共享存储
为服务器提供共享存储空间,以便服务器能够轻松拥有相同的内容并提供相同的服务。
负载均衡器是服务器集群系统的单一入口点,它能够运行在Linux内核中实现IP负载平衡技术的IPVS,或在Linux内核中实现应用程序级负载平衡的KTCPVS。当使用IPVS时,全部服务器都须要提供相同的服务和内容,负载均衡器根据指定的调度算法和每一个服务器的负载将新的客户端请求转发给服务器。不管选择哪一个服务器,客户端都应该获得相同的结果。当使用KTCPVS时,服务器能够具备不一样的内容,负载均衡器能够根据请求的内容将请求转发到不一样的服务器。因为KTCPVS是在Linux内核中实现的,所以中继数据的开销很小,所以它能够具备高吞吐量。
能够根据系统接收的负载更改服务器集群的节点数目。当集群中全部服务器都过载时,能够添加更多新服务器来处理不断增长的工做负载。对于大多数Internet服务(如Web),请求能够在不一样的服务器上并行运行。所以,随着服务器集群的节点数量的增长,总体的性能几乎能够线性扩展。
共享存储能够是数据库系统,网络文件系统或分布式文件系统。服务器节点须要动态更新的数据应该存储在基于数据的系统中,当服务器节点并行地读取或写入数据库系统中的数据时,数据库系统能够保证并发数据访问的一致性。静态数据一般保存在网络文件系统(如NFS和CIFS)中,以便全部服务器节点能够共享数据。可是,单个网络文件系统的可扩展性是有限的,例如,单个NFS / CIFS只能支持从4到8个服务器的数据访问。对于大规模集群系统,分布式/集群文件系统能够用于共享存储,例如GPFS,Coda和GFS,而后共享存储也能够根据系统要求进行扩展。
负载均衡器,服务器集群和共享存储一般由高速网络链接,如100Mbps以太网和千兆以太网,这样网络在系统成长时不会成为系统的瓶颈。
随着愈来愈多的任务关键型应用程序在Internet上运行,提供高可用性服务变得愈来愈重要。集群系统的一个优势是它具备硬件和软件冗余,由于集群系统由许多独立节点组成,每一个节点运行一个操做系统和应用软件的副本。经过检测节点或守护程序故障并适当地从新配置系统,能够实现高可用性,从而能够由集群中的其他节点接管工做负载。
事实上,高可用性是一个很大的领域。高级的高可用系统能够具备可靠的通讯子系统,成员管理子系统,并发控制子系统等,须要比较多的学习成本。可是,咱们如今可使用一些现有的软件包来构建高度可用的LVS集群系统。
一般,在负载均衡器上运行服务监视器守护程序以按期检查服务器运行情况,以下图所示。若是在指定时间内服务器访问请求或ICMP ECHO_REQUEST没有响应,服务监视器将认为服务器已经挂掉,并将其从负载均衡器的可用服务器列表中删除,所以不会向这个挂掉的服务器再转发请求。当服务监视器检测挂掉的服务器恢复工做时,服务监视器将服务器添加回可用服务器列表。所以,负载均衡器能够自动掩盖服务守护进程或服务器的故障。此外,管理员还可使用系统工具添加新服务器以提升系统吞吐量或删除服务器以进行系统维护,而无需关闭整个系统服务。
如今负载均衡器可能成为整个系统的单一故障点。为了防止整个系统因负载均衡器故障而中止运行,咱们须要设置负载均衡器的备份(或多个备份)。两个心跳守护程序分别在主服务器和备份服务器上运行,它们经过按期检测到“我还活着”这样的消息。当备份的心跳守护进程在指定时间内没法听到来自主服务器的心跳消息时,它将接管虚拟IP地址以提供负载均衡服务。当失败的负载均衡器恢复工做时,有两种解决方案,一种是自动成为备份负载均衡器,另外一种是主动负载均衡器释放VIP地址,而且恢复一次接管VIP地址并成为主要负载均衡器。
主负载均衡器具备链接状态,即链接转发到哪一个服务器。若是备份负载均衡器在没有这些链接信息的状况下接管,则客户端必须再次将其请求发送到访问服务。为了使负载均衡器故障转移对客户端应用程序透明,咱们在IPVS中实现链接同步,主IPVS负载均衡器经过UDP多播将链接信息同步到备份负载均衡器。当备份负载均衡器在主要负载均衡器发生故障后接管时,备份负载均衡器将具备大多数链接状态,所以几乎全部链接均可以经过备份负载均衡器继续访问服务。
欢迎点击“京东云”了解更多精彩
点击"产品文档"了解Linux入门指南及建立实例。