Linux扩展应用 ·

LVS简介

简介

LVS 是 Linux Virtual Server 的简写,意即 Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由 章文嵩 博士成立,是中国国内最早出现的自由软件项目之一,已被收录至 Linux 内核。

【1】技术简介

LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

【2】集群采用三层结构

一般来说,LVS 集群采用三层结构,其主要组成部分为:

A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有 WEB、MAIL、FTP 和 DNS等。

C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

【3】调度器

调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用 IP 负载均衡技术、基于内容请求分发技术或者两者相结合。

在 IP 负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在 Linux 操作系统核心空间中完成的,它的调度开销很小,所以它具有很高的吞吐率。服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。

对大多数网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。 共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发访问时数据的一致性。静态的数据可以存储在网络文件系统(如 NFS/CIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFS/CIFS 服务器只能支持 3~6个 繁忙的服务器结点。对于规模较大的集群系统,可以考虑用分布式文件系统,如 AFS、GFS、Coda和Intermezzo 等。分布式文件系统可为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。

【4】分布式锁管理器

此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访问的一致性。

负载调度器、服务器池和共享存储系统通过高速网络相连接,如 100Mbps 交换网络、Myrinet 和 Gigabit 网络等。使用高速的网络,主要为避免当系统规模扩大时互联网络成为整个系统的瓶颈。

【5】监视器

Graphic Monitor 是为系统管理员提供整个集群系统的监视器,它可以监视系统的状态。Graphic Monitor 是基于浏览器的,所以无论管理员在本地还是异地都可以监测系统的状况。为了安全的原因,浏览器要通过 HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。

工作原理

LVS 在内核空间的 netfilter 的 INPT 钩子之上构建出了 ipvs 框架,而使用用户空间的 ipvsadm 工具进行管理,非常类似于 iptables/netfilter。

在数据报文请求本机时,ipvs 在 INPT 链工作,此时会将请求本机的报文转发给预设的主机。因此,不应该在 LVS 的主机 INPT 链做 iptables 过滤,负责很有可能会将报文给过滤掉。

由于工作内内核空间,突破了套接字的限制,只是将报文进行转发,因此其调度效率相对较高,但是由于其辅助功能较少,所以小型集群很少使用 LVS 。

术语解释

vs:Virtual Server,Director, Dispatcher, Balancer (LVS 服务,调度器,负载均衡器)

rs:Real Server, upstream server, backend server (后端真实服务器)

CIP:Client IP (客户端 IP)

VIP: Virtual serve IP(客户端请求 IP)

RIP: Real server IP(后端真实服务器 IP)

DIP: Director IP (调度器 IP)

整个访问流程也就是客户端 CIP 请求公网 VIP ,此时调度器 VIP 接口接收请求,然后通过 DIP 转发给后端 RIP。

CIP <--> VIP == DIP <--> RIP

LVS集群的类型

NAT模式-网络地址转换

Virtualserver via Network address translation(VS/NAT)

流程:

(1)客户端请求资源,此时通过 DNS 解析后,连接至公网地址 VIP,而此处服务为调度器。

(2)调度器将请求报文通过预设算法,将请求分发至预设的后端真实服务器。

(3)后端服务器响应请求。

(4)响应报文通过 Director 返回给客户端。

多目标 IP 的 DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS 的 RIP 和 PORT 实现转发;

(1)RIP 和 DIP 必须在同一个 IP 网络,且应该使用私网地址;RS 的网关要指向 DIP ;

(2)请求报文和响应报文都必须经由 Director 转发;Director 易于成为系统瓶颈;

(3)支持端口映射,可修改请求报文的目标 PORT;

(4)vs(virtual server 也就是 LVS server)必须是 Linux 系统,rs (real server)可以是任意系统;

DR模式(直接路由模式)

Virtual server via direct routing (vs/dr)

操纵封装新的 MAC 地址;Direct Routing,直接路由;

流程:

(1)客户端请求资源,此时通过 DNS 解析后,连接至公网地址 VIP,而此处服务为调度器。

(2)调度器为报文重新封装一个预设的 MAC 首部进行转发,源 MAC 是 DIP 所在的接口的 MAC,目标 MAC 是某挑选出的 RS 的 RIP 所在接口的 MAC 地址,而源 IP/PORT,以及目标 IP/PORT 均保持不变。

(3)后端服务需要将出口 IP 地址配置为 VIP,并且直接响应返回给客户端。

实现需求:

(1) 确保前端路由器将目标 IP 为 VIP 的请求报文发往 Director:

(a) 在前端网关做静态绑定;

(b) 在 RS 上使用 arptables;

(c) 在 RS 上修改内核参数以限制 arp 通告及应答级别;

arp_announce

arp_ignore

(2) RS 的 RIP 可以使用私网地址,也可以是公网地址;RIP 与 DIP 在同一 IP 网络;RIP 的网关不能指向 DIP,以确保响应报文不会经由 Director;

(3) RS 跟 Director 要在同一个物理网络;

(4) 请求报文要经由 Director,但响应不能经由 Director,而是由 RS 直接发往 Client;

(5) 不支持端口映射;

TUN模式

virtual server via ip tunneling (vs/tun)

 

流程:

(1)客户端请求资源,此时通过 DNS 解析后,连接至公网地址 VIP,而此处服务为调度器。

(2)调度器在原请求报文之外新加一个 IP 首部。

(3)通过网络转发至远程服务器响应。

(4)远程服务器返回给客户端。

转发方式:不修改请求报文的 IP 首部(源 IP 为 CIP,目标 IP 为 VIP),而在原 IP 报文之外再封装一个 IP 首部(源 IP 是 DIP,目标 IP 是 RIP),将报文发往挑选出的目标 RS;RS 直接响应给客户端(源 IP 是 VIP,目标 IP 是 CIP);

(1) DIP, VIP, RIP 都应该是公网地址;

(2) RS 的网关不能,也不可能指向 DIP;

(3) 请求报文要经由 Director,但响应不能经由 Director;

(4) 不支持端口映射;

(5) RS 的 OS 得支持 IP 隧道功能,因此效率较低;

FullNAT模式

Virtualserver via Full Network address translation( vs/fullnat )

流程:

(1)客户端请求资源,此时通过 DNS 解析后,连接至公网地址 VIP,而此处服务为调度器。

(2)调度器在原请求报文之外新加一个 IP 首部。

(3)通过网络转发至远程服务器响应。

(4)通过网络再返回至 Director。

(5)Director 再将返回的资源转发至客户端。

修改请求报文的源和目标 IP;此类型需重新编译内核,非内核自带标准类型。

通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发;

CIP --> DIP

VIP --> RIP

(1) VIP 是公网地址,RIP 和 DIP 是私网地址,且通常不在同一 IP 网络;因此,RIP 的网关一般不会指向 DIP;

(2) RS 收到的请求报文源地址是 DIP,因此,只需响应给 DIP;但 Director 还要将其发往 Client;

(3) 请求和响应报文都经由 Director;

(4) 支持端口映射;

注意:此类型默认不支持;

LVS管理命令

ipvs:内核中的INPUT链上;

ipvsadm:用户空间的命令行工具;

  • 服务管理:

-A:添加

-E:修改

-D:删除

  • 集群服务的 RS 管理:

-a:添加

-e:修改

-d:删除

  • 查看:

-L | l

-n, --exact, -c, --stats, --rate

  • 清理:

-C 不指定项目,则清空所有。

  • 保存:

-S = ipvsadm-save 默认保存至 /etc/sysconfig/ipvsadm

  • 重载:

-R = ipvsadm-restore 默认从 /etc/sysconfig/ipvsadm  读取,在 Centos 7 中,若使用 systemd 正常调度服务,则会自此文件自动保存和读取。

参与评论