写点什么

LVS 虚拟服务器

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

    阅读完需:约 14 分钟

LVS虚拟服务器

6 月 17 日,极客时间《企业级 Agents 开发实战营》正式上线,10 周掌握企业级 Agents 从设计、开发到部署全流程。

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:171277

评论

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

C++ Workflow异步调度框架 - 基本介绍篇

1412

c++ 开源 workflow 异步调度 网络框架

C++ Workflow异步调度框架 - 架构设计篇

1412

c++ 开源 workflow 异步调度 网络框架

一对一直播源码部署,是系统上线运行的开始

开源直播系统源码

软件开发 一对一直播 一对一直播源码 直播系统源码

大量模块壳工程本地如何快速编译?优酷 iOS 工程插件化实践

阿里巴巴终端技术

ios App 编译 架构设计

一款实用的综合性导航网站

小炮

企业为什么要部署专属的IM即时通讯软件?

WorkPlus

Linux系统环境搭建

开发微hkkf5566

设计师必备的设计导航网站

小炮

去中心化NFT交易平台开发

开发微hkkf5566

你好复工人,马斯克又因“工作狂”上热搜,远程办公究竟是好是坏?

WorkPlus

企业数字化转型加速,选对在线协作工具事半功倍

小炮

实时监控,智能预警,疾控中心的战疫“速度”

博睿数据

智能运维 博睿数据

聚焦行业,赋能客户 | 博云容器云产品族五大行业解决方案发布

BoCloud博云

云原生 容器云

flutter系列之:移动端的手势基础GestureDetector

程序那些事

flutter 程序那些事 6月月更

告警消息何去何从?在飞书中飞起来

Rancher

Kubernetes k8s rancher

国内首个:ICPR2022多模态字幕识别比赛日前结束

科技热闻

Karmada v1.2发布:开启全文本搜索新纪元

华为云开发者联盟

云计算 调度器 Karmada 全文本搜索 资源解释器

什么是算子下盘

华为云开发者联盟

数据库 集群 算子

玩转云原生流量管理——Flomesh

Flomesh

云原生 流量控制 Service Mesh 服务网格 Pipy #开源

Java——类和接口

武师叔

Java 线程 6月月更

融云 IMKit Web 端上线,带你感受开发效率的参差

融云 RongCloud

模块三

Geek_2ce415

玩转云原生流量管理——Flomesh

Flomesh

云原生 流量控制 #开源

一年一度 OceanBase 技术征文大赛全面开启! 入门实战,等您来写

OceanBase 数据库

数据库

基于任务调度的企业级分布式批处理方案

阿里巴巴云原生

阿里云 分布式 云原生 SchedulerX

设计消息队列存储消息数据的 MySQL 表格

哈喽

「架构实战营」

【Spring 学习笔记(七)】Spring 管理第三方Bean之管理Druid数据源

倔强的牛角

Java spring Java EE 6月月更

【直播回顾】战码先锋第四期:轻松入门,成为媒体子系统贡献者

OpenHarmony开发者

Open Harmony

集成底座流程测试总结

agileai

测试流程 集成底座 企业服务总线 主数据平台 统一身份管理平台

TiDB 6.0 实战分享丨冷热存储分离解决方案

PingCAP

TiDB

如何使用Superset可无缝对接MRS进行自助分析

华为云开发者联盟

大数据 数据分析 后端 Superset

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