热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS生产环境架构详解

一、LVS技术介绍1.1工作原理LVS是LinuxVirtualServer的简写,意即Linux虚拟服务器,是一个开源的负载均衡流量调度器。LVS

一、LVS 技术介绍

1.1 工作原理

LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个开源的负载均衡流量调度器。LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术,将用户请求按照一定策略分发到后端的 Server 上,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。在特定的场景下,整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。

如图所示,前端调度器虚拟出 VS(Virtual Server)监听和接收请求,真正提供服务的是后端的 Member(亦称为 RealServer 或者 RS),数个 Member 组成一个 Pool,VS 的请求分发到 Pool 上,并在 Pool 当中的 Member 之间按一定策略分发轮询。LVS 与 F5 Big-IP LTM 不同之处在于,LVS 没有 Node 的概念,也没有 Profile,并且只提供 4 层的负载均衡。

1.2 调度模式

1.2.1 FullNat

LVS 除了支持传统的 DR、TUN、NAT 模式之外, LVS 内核,支持一种新的负载均衡模式:Fullnat。Fullnat 区分于传统 NAT 模式的地方在于数据包经过调度器的时候,源目 IP 和端口都被转换了,后端 Member 看到的数据包来源是调度器的 Local Address。

采用 Fullnat 模式的优点是可以更加灵活的适应不同的网络环境,对网络架构的改动需求最小,而且支持跨集群调度。缺点在于如果后端服务器需要获知真实的客户端 IP 地址,需要打内核补丁。当调度器与后端服务器建立 tcp 连接的时候,三次握手包的包头中会携带写入真实客户端 IP 地址的 address of tcp option 信息,只有后端服务器打了补丁才能获取到客户端 ip。

1.2.2 NAT

在网络环境许可的情况下,采用 NAT 模式可以带来 10%左右的性能提升,并且不需要配置 Local Address,由于 Local Address 需要与内网互联网段(LVS 与内网核心互联地址段)在同一子网内,使用 NAT 模式能够减少 IP 地址占用。

1.2.3 内网负载均衡

LVS 支持内网负载均衡功能。在实际应用场景中,可能会遇到在内网当中的服务器也需要负载均衡的情况,比如中间件层调用存储、前端调用数据库等等。内网负载均衡需要网络环境支持,在内网核心上将地址段路由下一跳指向 LVS 的 Self IP。需要注意的是,内网负载均衡必须是 Fullnat 模式,内网负载均衡不支持 NAT 模式。

1.3 SNAT

传统的 LVS 不具备 SNAT 功能,当使用 NAT 模式进行负载均衡的时候,后端服务器正常的公网访问需求仍然需要通过额外的设备解决。LVS 可以合并 SNAT,提供了 All-in-one 模式,使用中需要将内网核心的默认网关指向 LVS 的 SNAT IP。所有数据包在流入 LVS 的时候都会在 session 表中检查一遍,不存在会话的数据包根据策略路由从 SNAT IPool 池中选取 IP 作为源地址转发出去.

1.4 会话保持

LBG 的 tcp ESTABLISHED 状态默认 90s 超时,90 秒内没有数据传输就断开连接。在 4 层负载均衡场景下,LVS 默认启用会话保持功能,同一个 client ip 转发到同一个后端服务器,600 秒无数据传输后过期,不同的 client ip 或者会话过期则按调度算法重新分派。在 7 层负载均衡场景下,默认不启用会话保持。可以开启插入 COOKIE 会话保持功能,默认过期时间 3600 秒。
1.5 7 层负载均衡
可以使用 nginx 或 Tengine 提供 7 层负载均衡功能。

二、LVS 组网模式

2.1 并行旁挂

在已有成熟的网络架构中部署 LVS,采用并行旁挂的方式不需要网络有太多的变动,而且相比 DR 模式需要在 VLAN 配置 IP 地址不同,Fullnat 模式的只需要单独的一个 VLAN,就能够进行负载均衡。并行旁挂模式分为单臂和直挂两种。单臂的情况下,对链路的压力很大,当流量高峰期容易导致链路跑满,因此一般采用直挂的方式,将 LVS 分别直挂在 IDC 出口和内网核心。所有需要负载均衡的数据流量经由 IDC 出口转发给 LVS 服务器,其它流量不受影响。

2.2 串行路由

串行组网架构是应用最为广泛的负载均衡组网架构。只有在串行组网架构当中,才可以使用 LVS 的 NAT 模式。使用 NAT 模式可以做到对后端服务器完全透明,并且调度性能和网络吞吐也比并行旁挂模式要好。

数据的访问流向均先经过 IDC 交换机,通过 IDC 交换机路由到 LVS 上,根据 LVS 配置的负载均衡策略对流量进行负载均衡,再经由内网核心交换机和机柜接入交换机到达相应的服务器,返回的数据流亦然。

串行组网架构整体网络结构比较单一整齐,业务数据流走向清晰可见,易于设计、部署实施,及后续的维护、管理,相关故障的排查。不过由于 LVS 位于出访流量的必经之路,除非有相应的路由策略,否则所有的对公网访问流量也需要经过 LVS,因此需要与 LVS 的 SNAT 配合使用。

三、LVS 高可用性

3.1 主播模式

在冗余方面,LVS 分别支持主备模式和集群模式。在主备模式下,LVS 可采用成熟的开源软件 Keepalived 实现冗余功能。在 LVS 主备方案实施当中,一台为主机正常提供服务,另外一台提供热备份。当主机离线时,备机会自动接管所有 VS,接替主机承担负载均衡的职责。
Keepalived 参照了 VRRP 协议实现故障切换。LVS 的 Self IP 与 F5 的 Self IP 在概念上并不相同。LVS 不需要像 F5 那样为每台设备的每个网段配置 Self IP,再配置一个不同于 Self IP 的 Float IP 对外提供服务。在 LVS 中,Self IP 直接对外提供服务,Fullnat 模式下还拥有不会随主备切换的 Local Addres。在正常情况下,主机对外宣告 Self IP,备机没有配置 IP,保持静默。如果主机发生故障,备机会在一秒钟内检测到,产生故障切换事件,通过发送免费 ARP 宣告自己拥有 Self IP,引发流量切换。

Keepalived 可以指定某个网络接口运行 VRRP 实例,为了避免 VRRP 影响现有网络,可以采用单独的心跳线传输 Failover 流量。备机通过监听 VRRP 通告确认主机是否存活,如果主备机因为意外同时 ACTIVE,会导致严重的网络故障,并且需要人为干预才能恢复。为了避免单根链路故障而导致的意外故障切换,建议心跳线采用两根链路捆绑,可以大大降低故障几率。LVS 支持人为的进行主备机倒换,但是并不具备 F5 的会话镜像功能,因此在主备机倒换和故障切换之后,所有会话的连接性都会丢失。

3.2 集群模式

集群模式采用了 LVS ospf 方案,利用开源的软路由软件 quagga,对 IDC 接入交换机宣告 VIP 的主机路由信息,通过 OSPF 等价路由的特性可以提供最多八台 LVS All-active 的集群服务。在集群模式下,LVS 可以横向扩展,自由伸缩,但是会增加网络的复杂性。

单 OSPF 区域,LVS 只能使用 DR 模式,与内网核心使用 TRUNK 连接,在每一个服务 VLAN 宣告 IP,并且所有后端服务器必须配置 LVS 为网关,对网络的要求和后端服务器的变动需求非常大。如果要使用 NAT 模式,需要 LVS 与内网核心也建立 OSPF 邻居关系,将 SNAT IP 同时宣告给内网核心。
受限于 ospf 调度算法,集群模式有可能无法提供无感知的伸缩特性。如果三层设备不支持 ospf 调度一致性 hash,那么当某台 LVS 离线的时候,所有长连接都会丢失。目前只有 Cisco 设备支持一致性 Hash 算法。

3.3 监控检查

Keepalived 可以对 Member(RS 后端服务器)做健康检查。当某个 RS 服务不可用,Keepalived 会自动将其从 Pool 中剔除。LVS 目前支持的健康检查方式有 TCP、HTTP、SSL。

四、LVS 网卡配置

LVS 系统拥有以下几种接口类型,在实施设计阶段要予以考虑。业务接口可根据网络架构和应用场景行衡量。

端口名称 端口用途 端口类型 端口数量
Failover 主备故障切换心跳线 电口 2
Interal 内网业务流量接 电口\光口 1~8
Ext 外网业务流量接口 电口\光口 1~8

业务流量接口采用多千兆电口捆绑的方式,需要注意对端三层设备的链路聚合负载均衡模式的选择,以防聚合中单根链路跑满的情况发生。心跳线的作用是备机探测主机是否存活的关键,一旦这条链路丢失,LVS 系统就会出现双 Active 的情况,所以使用两根心跳线捆绑的方式可以让出现心跳线物理损坏的几率大大降低。


推荐阅读
  • SSL协议、TLS协议,使用哪一种更安全?
    在金融银行业,保护机密信息的安全至关重要。由于财务记录完全通过在线数据库维护,因此实施保护客户、银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要。安全套接字层(SSL) ... [详细]
  • PHPcURL获取微信公众号access_token的实例php实例:这篇文章主要介绍了PHPcURL获取微信公众号access_token的实例,需要的朋友可以参考下1.开发微信 ... [详细]
  • Linux负载均衡LVS(IPVS)
    一、LVS简介LVS是LinuxVirtualServer的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,现在已经是Linux ... [详细]
  • 云计算安全,主要面临哪些威胁?
    云计算是一种新的计算方式,它依托于互联网,以网络技术、分布式计算为基础,实现按需自服务、快速弹性构建、服务可测量等特点的新一代计算方式。然而,任何以互联网为基础的应用都存在着一定危 ... [详细]
  • 这是一份详细 & 清晰的计算机网络基础 学习指南
    前言计算机网络基础该是程序猿需掌握的知识,但往往会被忽略今天,我将献上一份详细&清晰的计算机网络基础学习指南,涵盖TCPUDP协议、Http协议、Socket等,希望你们会喜欢。目 ... [详细]
  • 高并发网站架构的核心原则其实就一句话“把所有的用户访问请求都尽量往前推“,即:能缓存在用户电脑本地的,就不要让他去访问CDN。能缓存CDN服务器上的,就不要让CDN去访问源(静态服 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
    一、IPv4与IPv6的互操作性1.IPv4客户与IPv6服务器拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射 ... [详细]
  • 通过CreateDirectory命令创建相应的Directory之后,可以将目录的访问权限授予其他用户,这样其他用户就能通过外部表访问很多主机上的文件,而不需要登录到数据库服务器 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 导读:今天编程笔记来给各位分享关于php动态扩展怎么加载的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 开发笔记:深度探索!Android之OkHttp网络架构源码解析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了深度探索!Android之OkHttp网络架构源码解析相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Docker从安装到入门到项目部署
    容器化的时代你怎么可 ... [详细]
  • 用户管理_用户管理的小项目
      之前学习链表数据结构的时候,写过(相信很多人都做过)dos窗口版的学生管理系统,通过输入数字来实现CURD学生的信息,顶多就是把数据写入文件来存储数据 ... [详细]
  • Nginx简介Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAPPOP3SMTP代理服务器。Nginx是由IgorSysoev为 ... [详细]
author-avatar
UTOB
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有