当前位置: 首页 > Linux

干货-LVS虚拟服务器介绍

时间:2023-04-06 03:30:30 Linux

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