集群的定义
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想 的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。
系统扩展类型
- scale on(向上扩展)
将服务器的内存容量调大和cpu数量增加些(简单说升级服务器硬件)
缺点:在一定的范围之内它的性能是上升的趋势,但是超出范围之后就是下降的趋势。
- scale out(向外扩展)
以增加服务器数量的形式来达到目的。增加服务器方便
集群类型
- LB(Load Balancing):负载均衡
负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求
- HA(High Availability):高可用
高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。
- HP(Hight Performance):高性能
高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工作
LB(负载均衡)集群
LB的实现形式
- 硬件设备实现负载均衡
- F5公司的 Big-IP产品: 性能好价格高
- Citrix公司的 Netscaler产品
- A10 公司的A10产品
- 软件实现负载均衡
- lvs:Linux Virtual Server虚拟服务,不处理服务,而是转到其他地方处理
- nginx
- haproxy
- ats:apache traffic server 雅虎公司的开源项目
- perlbal
基于工作的协议层划分
- 传输层调度器
- lvs基于udp,tcp调度
- nginx
- haproxy:mode tcp模块用来模拟四层调度
- 应用层调度器
- nginx
- ats
- perlbal
LVS 详解
LVS,是Linux Virtual Server的简称,也就是Linux虚拟服务器.
LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作
LVS常见术语
名称 | 解释 |
---|---|
ipvsadm | 用户空间的命令行工具,用于管理集群服务及集群服务上的RS等; |
IPVS | 工作于内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发; |
Director, Balancer | 负载均衡器、分发器,调度器 |
RS | Real Server 后端请求处理服务器 |
CIP | Client IP,客户端IP |
VIP | Director Virtual IP,负载均衡器虚拟IP |
DIP | Director IP,负载均衡器IP |
RIP | Real Server IP,后端请求处理服务器IP |
LVS工作原理
如果对内核Netfilter在服务器中数据包流向有兴趣的同学,可以参考下面文章
lvs工作原理步骤
- 当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链
- 当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链
- LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,
- 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链
- 最后经由POSTROUTING链发往后端服务器
LVS工作模式
NAT(地址转换)模式
数据包流转步骤
- client将请求的报文到DirectorServer,此时报文中的源ip为cip,目标ip为vip。
- DirectorServer内核发现此服务为集群服务,则修改目标ip为rip,通过算法将请求的报文传到Realserver中。此时源ip为cip,目标ip为rip
- Realserver处理完请求后进行响应报文,此时回应报文的源ip为rip,目标ip为vip,回应报文传至DirectorServer上。
- DirectorServer最后将响应报文的源ip改为自己的vip.最终响应报文的源ip为vip,目标ip为cip。
如上图所示,NAT模式中的一大缺点就是无论是请求的数据包,还是返回的数据包,都必须要经过负载的这个点,请求的数据包一般内容较少,问题不是很大,而返回的数据包,一般都是图片,视频等等,这会给中间的调度器带来巨大的负担。
DR(Direct Routing)模式
数据包流转步骤
- 将RealServer的arp_ignore参数设置为1,此时client的请求只会发送给DirectorServer调度器,在DirectorServer内核中发现此服务为集群服务后,通过链路层的apr请求,保持ip不变的情况下,将源MAC地址变为DIPMAC,目标MAC地址变为RIPMAC
- 根据RIPMAC将请求报文传到目标MAC机上,RealServer处理请求,准备响应报文。此时请求报文的源ip为cip,目标ip为vip,一直保持不变。
- 处理完成数据后。响应报文的源ip为vip,目标ip为cip,此时有一个问题,由于vip在这个网络中有两个(一个DS,一个RS),为了成功发送响应报文,所以需要将RealServer中的arp_announce参数设置为2。意思为以本地地址为源ip。
- 最后RealServer将响应报文发送给client。此时源ip为vip。目标ip为cip。
相对于NAT模式来言,DR模式能够较好的解决调度器负载问题,其数据在服务器集群中的流向如上图所示,请求报文经过LVS到达后端真实的WEB服务器,而响应报文,则直接发给客户端,并不需要通过调度器。