集群介绍和LVS负载均衡
集群介绍和LVS负载均衡
一、集群介绍
什么是集群
通俗来讲,集群是一堆服务器做同一件事情
- 一组通过高速网络互联的计算组,并以单一系统的模式加以管理
- 将很多服务器集中在一起,提供一种服务,在客户端看来就象是只有一个服务器
- 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益
- 任务调度是集群系统的核心技术
集群分类
1. 负载均衡
简介
负载均衡集群为企业提供了更为实用,性价比更高的系统架构解决方案。负载均衡集群把很多客户集中访问的请求负载压力尽可能平均的分摊到计算机集群中处理。客户请求负载通常包括”应用程度处理负载”和”网络流量负载”。这样的系统非常适合向使用同一组应用程序为大量用户提供服务。每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
工作原理
负载均衡运行时,一般通过一个或多个前端负载均衡器将客户访问请求分发到后端一组服务器上,从而达到整个系统的高性能和高可用性。这样计算机集群有时也被称为服务器群。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。
作用
分担访问流量(负载均衡)
保持业务的连续性(高可用性)
应用场景
常用开源集群软件有:
-
LVS
- 适用于大规模
-
haproxy
- 适用于中型规模
-
nginx
- 使用于中小型规模
常用商业集群硬件有:
-
slv(云主机)
- 内网免费,公网收费
-
F5硬件设备
- 使用简单,操作遇到困难可以询问客服
- 适用于 金融公司、政府机构
2. 高可用
简介
一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供。
工作原理
类似是集群中运行着两个或两个以上的一样的节点,当某个主节点出现故障的时候,那么其他作为从节点的节点就会接替主节点上面的任务。从节点可以接管主节点的资源(IP地址,架构身份等),此时用户不会发现提供服务的对象从主节点转移到从节点。
作用
一般作用于关键性业务,当一个机器宕机的时候,另一台进行接管。
3. 高性能
简介
简单的说,高性能计算(High-Performance Computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件,顾名思义,高性能集群就是采用集群技术来研究高性能计算。
作用
高性能计算主要研究如下两类问题:
- 大规模科学问题,象天气预报、地形分析和生物制药等;
- 存储和处理海量数据,象数据挖掘、图象处理和基因测序;
集群的目的
-
提高性能:计算密集应用,如天气预报,核试验模拟
-
降低成本:相对百万美元的超级计算机,价格便宜
-
提高可扩展性:只要增加集群节点即可
-
增强可靠性:多个节点完成相同功能,避免单点失败
二、LVS
LVS介绍
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
LVS工作在TCP/IP协议栈上(netfilter/input链上),根据IP/PORT实现数据包的转发、调度,并且能够根据不同的算法,实现调度策略
注意:由于LVS工作在netfilter/input链上,所以无法和IPTABLES同时使用。
LVS管理工具
ipvsadm/ipvs(让用户定义规则)
ipvsadm:用户空间的命令行工具,用于管理集群服务;(即规则的增删查改)
支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议
LVS集群组成
- 前端:负载均衡层
有一台或多台负载调度器构成
- 中间:服务器群组层
有一组实际运行应用服务的服务器组成
- 后端:数据共享存储层
提供共享存储空间的存储区域
LVS术语
以下是经常出现的术语
术语名词缩写 | 译为 | 作用说明 |
---|---|---|
Director Server | 调度服务器 | 将负载分发到Real Server的服务器 |
Real Server | 真实服务器 | 真正提供应用服务的服务器 |
VIP(Direcrot Ip Address) | 虚拟IP地址 | VIP为Director用于向客户端计算机提供服务的IP地址,比如:www.leidazhuang.com 域名就要解析要VIP上提供服务;是公布给用户访问的虚拟IP地址 |
RIP(Real Server Ip Address) | 真实IP地址 | 集群节点上使用的IP地址 |
DIP(Direcrot Ip Address) | Direcrot的IP地址 | 调度器连接节点服务器的IP地址 |
CIP(Client Ip Address) | 客户端主机IP地址 | 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 |
LVS工作模式
- LVS/NAT
通过网络地址转换实现的虚拟服务器
大并发访问时,调度器的性能成为瓶颈 - LVS/DR
直接使用路由技术实现虚拟服务器
节点服务器需要配置VIP,注意MAC地址广播 - LVS/TUN
通过隧道方式实现虚拟服务
1. 模式一:LVS/NAT模式(路由转发模式)
原理:
这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端
流程介绍:
①. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③. 报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④. 然后lvs将此报文的源地址修改为本机并发送给客户端。
注意事项:
在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
特点:
-
NAT 技术将请求的报文和响应的报文都需要通过 LB 进行地址改写,因此网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,一般要求最多之能 10-20 台节点
-
只需要在 LB 上配置一个公网 IP 地址就可以了。
-
每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址。
-
NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
NTA模式优缺点:
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
2. 模式二:LVS/DR模式(直接路由模式)
原理:
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
流程介绍:
①. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③. RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意事项:
需要设置lo接口的VIP不能响应本地网络内的arp请求。
总结:
-
通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。
-
请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)
-
因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面
-
RS 主机需要绑定 VIP 地址在 LO 接口(掩码32 位)上,并且需要配置 ARP 抑制。
-
RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。
-
由于 DR 模式的调度器仅做 MAC 地址的改写,所以调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。
-
直接对外的业务比如WEB等,RS 的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。
DR模式优缺点:
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:所有 RS 节点和调度器 LB 只能在一个局域网里面。
3. 模式三:LVS/TUN模式(隧道模式)
LVS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器
流程介绍:
①. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意事项:
需要设置lo接口的VIP不能在共网上出现。
总结:
-
TUNNEL 模式必须在所有的 realserver 机器上面绑定 VIP 的 IP 地址
-
TUNNEL 模式的 vip ------>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内
-
TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了
-
TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。
TUN模式优缺点:
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
4. 模式四:FULLNAT模式
引入:无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关
改进:相比NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换,转换过程如下:
在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
内网 IP 之间可以通过多个交换机跨 VLAN 通信。
当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。
总结:
FULL NAT 模式也不需要 LBIP 和 realserver ip 在同一个网段; full nat 跟 nat 相比的优点是:保证 RS 回包一定能够回到 LVS;因为源地址就是 LVS--> 不确定
FULL NAT 因为要更新 sorce ip 所以性能正常比 nat 模式下降 10%
综上所述:性能比较 DR>TUN>NAT>FUNLL NAT
LVS调度算法
静态调度算法(4种):
(1). 轮循调度 rr
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2). 加权轮调 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3). 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
(4). 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
动态调度算法(6种):
(5). 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(6). 加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
(7). 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
(8). 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(9). 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
(10). 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去