NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

LVS 虚拟服务器

  • 2019-10-18
  • 本文字数:4242 字

    阅读完需:约 14 分钟

LVS虚拟服务器

LVS 即 Linux Virtual Server,虚拟服务器是一个可高扩展且高可用的服务器,构建在真实服务器集群上。服务器群集的体系结构对最终用户完全透明,用户与群集系统进行交互,就好像它只是一个高性能的虚拟服务器一样。请参考下图:



真实服务器和负载均衡器可以通过高速 LAN(局域网)或地理上分散的 WAN(广域网)互连。负载均衡器可以将请求分配给后端不同的服务器,而对外则只显示为单个 IP 的虚拟服务。分配的工作方式可以使用 IP 负载均衡技术或应用级负载均衡技术。通过透明地添加或删除集群中的节点来实现系统的可伸缩性。通过检测节点或守护程序故障并适当地重新配置系统来提供高可用性。


Linux Virtual Server Project 的基本目标是:使用集群技术为 Linux 构建高性能,高可用性的服务器,提供良好的可扩展性,可靠性和可维护性。

为什么需要 LVS?

随着互联网的爆炸性增长及其在我们生活中日益重要的作用,互联网上的流量急剧增加。服务器上的工作负载也随之迅速增加,因此服务器很容易在短时间内过载,尤其是对于一些受欢迎的网站。为了克服服务器的过载问题,有两种解决方案:一种是单服务器解决方案,即将服务器升级到性能更高的服务器,但是当请求增加时它很快就会过载,因此我们必须再次升级,升级过程复杂且成本高;另一种是多服务器解决方案,即在服务器集群上构建可扩展的网络服务系统。当负载增加时,我们可以简单地将新服务器或更多服务器添加到集群中以满足不断增长的请求。因此,为网络服务构建服务器集群系统更具可扩展性和成本效益。


有几种方法可以构建服务器集群:

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 或更多时,应用程序级负载均衡器将成为新的瓶颈。

LVS 工作方式

现在虚拟服务器以三种方式实现。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 的架构

对于整个系统的可扩展性,可用性和可管理性,我们通常采用下图所示的 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 以太网和千兆以太网,这样网络在系统成长时不会成为系统的瓶颈。

LVS 高可用

随着越来越多的任务关键型应用程序在 Internet 上运行,提供高可用性服务变得越来越重要。集群系统的一个优点是它具有硬件和软件冗余,因为集群系统由许多独立节点组成,每个节点运行一个操作系统和应用软件的副本。通过检测节点或守护程序故障并适当地重新配置系统,可以实现高可用性,从而可以由集群中的其余节点接管工作负载。


事实上,高可用性是一个很大的领域。高级的高可用系统可以具有可靠的通信子系统,成员管理子系统,并发控制子系统等,需要比较多的学习成本。但是,我们现在可以使用一些现有的软件包来构建高度可用的 LVS 集群系统。


通常,在负载均衡器上运行服务监视器守护程序以定期检查服务器运行状况,如下图所示。如果在指定时间内服务器访问请求或 ICMP ECHO_REQUEST 没有响应,服务监视器将认为服务器已经挂掉,并将其从负载均衡器的可用服务器列表中删除,因此不会向这个挂掉的服务器再转发请求。当服务监视器检测挂掉的服务器恢复工作时,服务监视器将服务器添加回可用服务器列表。因此,负载均衡器可以自动掩盖服务守护进程或服务器的故障。此外,管理员还可以使用系统工具添加新服务器以提高系统吞吐量或删除服务器以进行系统维护,而无需关闭整个系统服务。



现在负载均衡器可能成为整个系统的单一故障点。为了防止整个系统因负载均衡器故障而停止运行,我们需要设置负载均衡器的备份(或多个备份)。两个心跳守护程序分别在主服务器和备份服务器上运行,它们通过定期检测到“我还活着”这样的消息。当备份的心跳守护进程在指定时间内无法听到来自主服务器的心跳消息时,它将接管虚拟 IP 地址以提供负载均衡服务。当失败的负载均衡器恢复工作时,有两种解决方案,一种是自动成为备份负载均衡器,另一种是主动负载均衡器释放 VIP 地址,并且恢复一次接管 VIP 地址并成为主要负载均衡器。


主负载均衡器具有连接状态,即连接转发到哪个服务器。如果备份负载均衡器在没有这些连接信息的情况下接管,则客户端必须再次将其请求发送到访问服务。为了使负载均衡器故障转移对客户端应用程序透明,我们在 IPVS 中实现连接同步,主 IPVS 负载均衡器通过 UDP 多播将连接信息同步到备份负载均衡器。当备份负载均衡器在主要负载均衡器发生故障后接管时,备份负载均衡器将具有大多数连接状态,因此几乎所有连接都可以通过备份负载均衡器继续访问服务。


2019-10-18 13:171256

评论

发布
暂无评论
发现更多内容

【愚公系列】2022年7月 Go教学课程 009-数据类型之浮点型

愚公搬代码

7月月更

不习惯的Vue3起步四 の 生命周期&provide/inject

空城机

Vue3 7月月更

【LeetCode】奇数值单元格的数目Java题解

Albert

LeetCode 7月月更

注意!软件供应链安全挑战持续升级

SEAL安全

安全 软件供应链

项目git commit时卡主不良代码:husky让Git检查代码规范化工作

zhoulujun

git husky lint-stated

Wireshark抓包分析Eureka注册发现协议

程序员欣宸

Java SpringCloud Eureka 7月月更

5G NR RRC连接控制

柒号华仔

5G 7月月更

纯CSS实现四种方式文本反差色效果

南城FE

CSS 前端 css动画 7月月更 反差色

多传感器时间同步

秃头小苏

时间同步 7月月更

QT和MFC的优缺点比较

乌龟哥哥

7月月更

老司机狂飙之路--EventBus原理简要分析

芝麻粒儿

android EventBus 7月月更

Pro 单店版和多店版,你还傻傻分不清楚?

CRMEB

继承(二)

Jason199

js 继承 7月月更

使用AssemblyScript 构建 WebAssembly 应用

devpoint

webassembly Wasm 7月月更 assemblyscript

iOS 中的 Category

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

Qt | 串口通信 QSerialPort

YOLO.

通信 qt 串口 串口通信 7月月更

《深入 Linux 设备驱动程序那和机制》读书笔记

贾献华

7月月更

深入JS函数中默认参数的使用

猪痞恶霸

前端 js 7月月更

Qt|字符排序以及转化问题

中国好公民st

qt 7月月更

QT实现 文件夹复制

小肉球

qt 7月月更

自己搭建git服务器:linux自己Gitlab服务

zhoulujun

gitlab git私有参考 git部署 git服务端

GaussDB云数据库初步使用记录

DS小龙哥

7月月更

适合初学者的 10 个JavaScript 代码整洁技巧

devpoint

JavaScript ES6 7月月更 数据操作

Java面向对象基础

五分钟学大数据

Java 7月月更

在线直播系统源码——开源源码

开源直播系统源码

软件开发 直播源码 开源源码 在线直播系统源码

图解网络:访问控制列表ACL,功能堪比防火墙!

wljslmz

防火墙 acl 网络技术 7月月更 访问控制列表

Linux 0.12 源码阅读

贾献华

7月月更

SLSA 框架与软件供应链安全防护

SEAL安全

SLSA 软件供应链安全

解读《深入理解计算机系统(CSAPP)》第7章链接

小明Java问道之路

连接 csapp ELF 链接 7月月更

你想知道的数组易错知识都在这了-C

芒果酱

7月月更

RocketMQ之消费者启动与消费流程

vivo互联网技术

RocketMQ 中间件 ACK

LVS虚拟服务器_架构_熊炜_InfoQ精选文章