掌握 LVS

本文详细介绍了集群和分布式的基本概念,强调了集群的可伸缩性和高可用性,以及实现集群的关键技术和能力。接着深入讲解了LVS(Linux Virtual Server)的工作原理、典型架构和功能,包括NAT、DR、TUN模式。LVS提供了高访问负载的业务、弹性扩展、自动调度和容灾场景的解决方案。此外,文章还讨论了LVS的调度算法,包括静态和动态调度,如轮询、加权轮询、最少连接等,并提到了内核4.15版本后的新增调度算法。最后,探讨了LVS在音视频大流量、网页游戏、多层次容灾和海量访问流量分发等应用场景,并介绍了借助ldirectord等第三方软件实现高可用集群的方法。
摘要由CSDN通过智能技术生成

掌握 LVS

一.集群和分布式概念

1.1 集群

在计算机领域,集群早在 1960 年就出现,随着互联网和计算机相关技术的发展,现在
集群这一技术已经在各大互联网公司普及。

1.1.1 集群概念

计算机集群指一组通过计算机网络连接的计算机,它们一起工作,在许多方面,它们可以
被视为一个单一的系统。与网格计算机不同,计算机集群的每个节点都被设置为执行相同
的任务,由特定的软件控制和调度。

1.1.1.1 集群的两个关键特性

集群是一组服务器实体,它们共同提供比单个服务实体更具可伸缩性和可用性的服务平台。
在接受服务的客户端看来,集群类似于单个服务实体,但实际上,集群是由一组服务器组
成的一个集群。与单个服务器相比,集群提供了以下两个关键特性:
Scalability:可伸缩性,也就是集群的性能不局限于单个服务器,新的服务器可以
动态地添加到集群中,从而提高集群的性能。
High availability: 高可用性,也即是集群使得客户能够通过多台服务器冗余避免
突然失去服务。在集群中,相同的服务可以由多个服务器提供。如果一个服务器不可用,
另一个服务器将接管不可用的服务器。集群提供的将错误从一个服务器恢复到另一个服务器
的功能增强了应用程序的可用性。

1.1.1.2 集群的两个能力

为了获得可伸缩性和高可用性,集群必须具备以下两个能力:

Load Balancing:负载均衡,负载均衡可以将任务均匀地分配到集群环境中的计算和
网络资源,使得集群持续健康的对外提供服务。
Error recovery:错误恢复能力,集群中的某节点(某个服务器)由于某种原因执行某
任务的过程中出现错误,执行失败,而另一个服务器自动执行相同的任务,并完成服务。
这样就恢复了错误,使得集群可以持续提供服务。

1.1.1.3 实现集群的两个关键技术

实现集群服务需要两种关键技术:

Cluster address:集群地址,客服端通过访问集群的地址来获取集群内部各服务器
提供的服务,集群对外是只有一个地址的。负责维护整个集群地址的服务器称为负载均衡
器,在客户端访问集群时,其负责将集群的地址转换为集群内部某个计算机的地址,具体
转换到哪个服务器的地址根据调度算法定。
Internal communication: 为了协同工作,实现负载均衡和错误恢复,集群实体间
必须频繁通信,如服务器上的负载均衡器心跳测试信息、服务器之间的任务执行上下文
信息通信等。
使用相同的集群地址,客户机可以访问集群提供的计算服务,集群地址隐藏了每个服务
实体的内部地址,以便客户机所需的计算服务可以分布在各个服务实体之间。内部通信
是集群正常工作的基础,它使集群具有均衡的负载和错误恢复能力。

1.1.2 集群分类

集群一般分为三种类型:
LB:Load Balancing,负载均衡集群
HA:High Availiablity,高可用集群,避免单点故障 SPOF(single Point Of failure)
HPC:High-performance computing 高性能集群
全球 TOP500 计算机
对于高可用集群可以用以下参数度量其可用性:
MTBF:Mean Time Between Failure 平均无故障时间
MTTR:Mean Time To Restoration(repair)平均恢复前时间
A=MTBF/(MTBF+MTTR)

见此文–MySQL 高可用

1.1.3 集群设计原则

在设计和实现集群时要考虑的因素有很多,关键的有以下四点
可扩展性—集群的横向扩展能力
可用性—无故障时间(SLA)
性能—访问响应时间
容量—单位时间内的最大并发吞吐量(例如避免 C10K 并发问题)
1.1.3.1 实现集群时基础设施考虑
实现集群时,在基础设施上需要考虑硬件、网络、安全、机房等因素
提升硬件资源性能—从入口防火墙到后端 web server 均使用更高性能的硬件资源
多域名—DNS 轮询 A 记录解析
多入口—将 A 记录解析到多个公网 IP 入口
多机房—同城+异地容灾
CDN(Content Delivery Network)—基于 GSLB(Global Server Load Balance)
实现全局负载均衡,如:DNS
1.1.3.2 实现集群时业务层面考虑
实现集群时,在基业务层面需要考虑
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
分割:基于功能分割大业务为小服务
分布式:对于特殊场景的业务,使用分布式计算

1.2 分布式

1.2.1 分布式系统概念

分布式系统指在许多不同的服务器中部署不同的服务模块,并通过远程调用协作完成特定
任务以提供服务。

一般分布式系统都会部署分布式应用程序和服务,对应用程序和服务进行分层和分段,然后
以分布式方式部署应用程序和服务模块到各个节点。它不仅可以提高并发访问能力,而且可
以减少数据库连接和资源消耗,还可以使不同的应用程序重用公共服务,使业务易于扩展。

1.2.1 分类

分布式存储:

  • Ceph
  • GlusterFS
  • FastDFS
  • MogileFS

分布式计算

  • hadoop
  • Spark

分布式常见应用

  • 分布式应用-服务按照功能拆分,使用微服务
  • 分布式静态资源–静态资源放在不同的存储集群上
  • 分布式数据和存储–使用 key-value 缓存系统
  • 分布式计算–对特殊业务使用分布式计算,比如 Hadoop 集群

1.3 集群与分布式区别

分布式系统处理任务是平行的,集群处理任务是串联的。
例如:包含 100 个子任务的客户请求分别到达 10 台分布式服务系统和 10 台集群服务
系统。假设单个任务单台服务器需要 1 分钟完成。那么分布式服务器系统的每台服务器
会花费 1 分钟完成一个任务,接着完成下一个任务,不考虑任务之间的依赖关系。这样
10 分钟后,就完成了 100 个任务;而在集群系统中,总是有 10 个任务被同时分配到
10 台服务器上处理,接着处理后面 10 个任务,这样在 10 分钟后,也完成了 100 个
任务。注意:在分布式中一般不会同时处理 10 个任务后又同时处理下面的 10 个任务。

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能
没有差别,数据和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务
器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分
布式每台服务器功能加起来,才是完整的业务。

一句话:分布式是通过缩短单个任务的执行时间来提高效率,集群是通过增加单位
时间内执行的任务数量来提高效率。

例如:对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,
后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端
哪台服务器的负载情况,决定由给哪一台去完成响应,并且一台服务器垮了,其它的服
务器可以顶上来。分布式的每一个节点,都完成不 的业务,如果一个节点垮了,那这个
业务可能就会失败。

1.4 负载均衡集群

下面几种硬件可以实现负载均衡集群
F5 Big-IP
Citrix Netscaler
A10 A10
下面几种软件可以实现负载均衡集群
lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用
nginx:支持七层调度,阿里七层 SLB 使用 Tengine
haproxy:支持七层调度
ats:Apache Traffic Server,yahoo 捐助给 apache
perlbal:Perl 编写
pound

这里的七层和四层指的是网络协议栈的层,比如:nginx 能够调度 http 协议
请求,二 http 为应用层在网络协议栈 ISO 模型的第七层;而 LVS 只能调度
TCP 等请求,TCP 在 ISO 模型的第四层传输层。

负载均衡的会话保持
session sticky:同一用户调度固定服务器
Source IP:LVS sh 算法(对某一特定服务而言)
Cookie
session replication:每台服务器拥有全部 session
session multicast cluster
session server:专门的 session 服务器
Memcached,Redis

1.5 HA–高可用集群

高可用的实现方案已报有两种

  1. 使用 Virtual Redundant Routing Protocol (VRRP)协议来实现高可用
    实现 vrrp 协议的软件如 keepalived,其配合 LVS 是典型的高可用集群的常用实现

  2. 使用 ais 协议,ais 是比较重量级的高可用实现,使用该规范的软件有
    heartbeat
    cman+rgmanager(RHCS)
    coresync_pacemaker

二.Linux Virtual Server 介绍

2.1 LVS 简介

LVS 是由张文松在 1998 年 5 月启动的自由和开源项目,遵循 GNU 通用公共许
可证(GPL)第 2 版的要求。该项目的任务是使用集群技术为 Linux 构建一个高性
能、高可用的服务器,它提供了良好的可伸缩性、可靠性和可服务性。

LVS 项目的主要工作是开发高级 IP 负载平衡软件(IPVS)、应用程序级负载平衡
软件(KTCPVS)和集群管理组件。

IPVS:在Linux内核中实现的一种高级IP负载平衡软件。IP Virtual Server代码合
已经被合并到版本2.4.x和更新的Linux内核主线。
KTCPVS:在Linux内核中实现应用程序级负载平衡,截至20112月仍在开发中。

LVS 可用于构建高度可伸缩和高度可用的网络服务,如 web、电子邮件、媒体和
VoIP 服务,并将可伸缩的网络服务集成到大型可靠的电子商务或电子政府应用程
序中。基于 LVS 的解决方案已经部署在世界各地的许多实际应用程序中,
包括维基百科 Wikipedia。维基百科简化版的架构如下:
在这里插入图片描述

2.2 LVS 工作原理

LVS 组件依赖于 Linux Netfilter 框架,其源代码可以在 Linux 内核源代码的
net/netfilter/ipvs子目录中找到。LVS 能够处理 UDP、TCP 等 4 层协议,
通过检查第 7 层数据包,也可以处理 FTP 被动连接。

用于配置 LVS 的用户空间实用程序称为 ipvsadm,它需要超级用户特权才能运行。

LVS 官网

LVS 相关术语
VS: Virtual Server,负责调度的服务器
RS: Real Server,负责真正提供服务

VS 根据请求报文的目标 IP 和目标协议及端口将其调度转发至某 RS,根据调度算法
来挑选 RS。LVS 是内核级功能,工作在 INPUT 链的位置,将发往 INPUT 的流量
进行"处理"。

查看内核对 LVS 的支持

[root@steve ~]$grep -i -C 10 ipvs /boot/config-3.10.0-1062.4.1.el7.x86_64
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--
CONFIG_IP_SET_HASH_NETNET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS application helper
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值