1 集群概述

1.1 何为集群

  • 分布式:同一个任务,由不同步骤(各个服务器实现功能不同)共同完成的过程就叫分布式(例如:生产车间中的某一条流水线,流水线上有很多步骤,不同步骤之间就叫分布式)
  • 负载均衡:将用户的请求,分配到多个功能相同的服务器上。其实就是任务分配(例如:生产车间中的多条相同功能的流水线)
  • 集群:就是一组协同工作,各有分工的服务器组成一个整体,对外表现为一个整体。

单节点服务器运行服务

缺点:

  • 时间较长
  • 能力有限
  • 软件工程师在上层无论编写多优秀的代码和软件优化到极限,也无法突破该单台服务器的性能资源,只能无限的接近该台服务器的性能指标

多节点服务器(集群)运行服务

缺点:

  • 成本高昂

优点:

  • 业务不中断
  • 总体效率高
  • 适合大型业务

在生产环境中衡量业务的标准:

  • IP即为地址,被理解单个用户
  • PV点击率、访问量,即页面访问量,每打开一次页面PV计数+1,刷新页面也是。IP访问数指独立IP访问数,计算是以一个独立的IP在一个计算时段内访问网站计算为1次IP访问数。
  • UV访问数(Unique Visitor)指独立访客访问数,一台电脑终端为一个访客。在同一个局域网中对互联网访问时对外通常是同一个IP,如果该局域网中有10台终端在同一个计算时段内访问同一个网站,对该网站的独立IP访问数贡献为1,而不是10。而此时UV访问数则为10。

IP和PV关系: 网站访问量,的衡量标准一个是IP,另一个是PV,常以日为标准,即日独立IP,和PV来计算。 访问数(IP):即InternetProtocol,指独立IP数。00:00-24:00内相同IP地址只被计算一次。 综合浏览量(PV):即PageView,即页面浏览量或点击量,用户每次刷新即被计算一次。 PV高不一定代表来访者多;PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量。比如一个网站就你一个人进来,通过不断的刷新页面,也可以制造出非常高的PV。

1.2 集群分类

image.png

Load Balance Cluster 负载均衡集群LBC: 提供和节点个数成正比的负载能力,这种集群适合需要提供大负载访问量的服务,如Web。这类集群中比较著名的有Turbolinux Cluster Server、Linux Virtual Server。此类集群把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。 负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部所定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求,从而解决高并发的问题。在扩展中可非常容易的使用Scale out扩展,从而实现集群的伸缩性,在业内常见开源解决方案有LVS、Haproxy、Nginx、ATS; High Available Cluster 高可用性集群 HAC: 运行于两个或多个节点上,目的是在系统出现某些故障的情况下,最大限度地减少服务中断时间,保障应用程序持续提供服务的能力。这类集群中比较著名的有keepalived、TurbolinuxTurboHA、Heartbeat、Kimberlite 等。对于此类集群还有很多通俗的名称,如“双机热备”, “双机互备”等。 高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器宕机就不会对其在做转发,衡量标准:可用性=在线时间/(在线时间+故障处理时间),就是通常我们说的可用性99%、99.9%、99.99%等等,在业内常见开源解决方案有Heartbeat、Keepalived等等;

在高可用性集群HA中,会出现脑裂的现象,即在Master - Slave中会有心跳检测功能,但有可能因为网络环境不稳定或者其他情况,导致Master - Slave发送心跳包的时长超过了最长有效时间,则会可能Slave会代替Master进行服务,但是原Master一直都在存活并且提供服务,那么集群HA就出现双Master的情况。即脑裂。 High Performance Computing 高性能集群 HPC: 利用计算集群软件将多个节点的计算机联结在一起,完成通常只有超级计算机才能完的计算任务。 HP:高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制,常常用于大数据分析,海量资源整合,目前比较出名的就是Hadoop。 总之,在实际生产环境中我们都可以根据实际情况来挑选合适的集群解决方案,3种集群的侧重各有不同,LB集群着重在于提供服务并发处理能力,HA集群以提升服务在线的能力实现服务不间断,HP集群着重用于处理一个海量任务

1.3 总结

集群概念:集群是一组协同工作的服务器,各有分工,对外表现为一个整体
负载均衡集群 LBC:负担服务的总体压力
高可用集群 HAC:尽可能的保障服务状态的可用性
高性能运算集群 HPC:提供单台服务器提供不了的计算能力

LBC:负载均衡集群,每个子节点的工作任务是一致的,例如:在流水线中的一个生产车间有5个工人在同时做一件事。 HAC:高可用集群。负载均衡集群一般会与高可用集群结合使用,是 LBC 和 HPC 的组件。 HPC:高性能运算集群,例如:在运算一个复杂的程序时将运算进行拆分(1+2+3+4+5+6)分配给三台机器处理,例如1+2分给A,3+4分给B、5+6分给C。然后将A,B,C的计算结果进行运算后就得到最终结果了。简单理解:将计算量分摊给集群的各个机器进行计算处理。

负载均衡集群提升的是工作效率,高性能运算集群则是减轻单个任务消耗的时间。

2 负载均衡集群

image.png

2.1 负载均衡集群重点分析

image.png
用户通过 Internet 互联网访问负载均衡器,通过负载均衡器来访问企业内网的真实服务器。
负载调度器:

  • 分类:软件(LVS,HAproxy,Nginx)/硬件(F5)
  • 工作层级:

集群 - 图4

ISO 七层模式以及TCP/IP模型越网上层,越智能,可以识别出比他低层的所有内容。 负载均衡集群可以在数据链路层(称为二层负载均衡)主要是F5。传输层(称为四层负载均衡)主要是LVS,F5(可以识别端口,IP,MAC地址)。应用层(称为七层负载均衡)主要是Nginx,F5(可以识别协议域名,端口,IP) 当每引用一个层级以后,那么其响应速度就会更慢。功能越复杂,消耗的资源就越多,响应速度也就越慢。

真实服务器池:

  • Web服务器、数据库服务器、文件服务器、中间件应用服务器、日志服务器、监控服务器、程序版本控制服务器、虚拟机服务器、邮件服务器、打印服务器、域控制服务器、多媒体服务器、通讯服务器、ERP服务器等。使用服务器进行池化搭建。

    2.2 负载均衡集群原理

    四层负载均衡的工作逻辑
    image.png

    LVS 只做简单数据的更改,比如IP地址的转换。并没有涉及到真实数据的流量转发,以及流量生产。 LVS 只是把必要的地址进行修改,把目标和源进行更改。

七层负载均衡的工作逻辑
image.png

Nginx 与客户端做一次TCP连接,Nginx与后端的真实服务器做了一次TCP连接。 Nginx 直接使用域名或者主机名,其命中率会更高。

分类:访问量

  • LVS 的访问量极高
  • Nginx 的访问量要比 LVS 低得多的多。

使用场景:

  • LVS:C/S,B/S
  • Nginx:B/S

    简单总结:LVS的调度粒度比较粗,模糊查询。Nginx调度粒度细,精确查询。

2.3 LVS 工作模式

2.3.1 LVS 常用术语

  • 负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【通常把这个IP 称为虚拟IP/VIP】
  • 服务器池(server pool):一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS。
  • 共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务。

常用术语

名称 定义
DS Director Server 指的是前端负载均衡器节点
RS Real Server。后端真实的工作服务器
VIP Virtual IP 向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP Director Server IP,主要用于和内部主机通讯的IP地址
RIP Real Server IP,后端服务器的IP地址
RIP Real Server IP,后端服务器的IP地址

2.3.2 LVS 工作层级

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

  • ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
  • ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

集群 - 图7

2.3.3 LVS工作模式分类

image.png

NAT模式:LVS负载均衡器位于服务器和用户及Internet 之间。也就是说LVS负载均衡器需要配置两块网卡,一个是内网IP,一个是公网IP。连接了内网和公网 网络环境。 TUN模式:服务器、LVS负载均衡器以及用户均是通过 Internet 相连。也就说服务器具有公网的特性,分布在各个地区,可以通过LVS进行组合构建完整集群,使用场景有限。 DR模式:LVS负载均衡器和服务器处于同一个广播域中,用户以及Internet 通过路由器将请求转发到LVS负载均衡器。该模式是负载量最高的一种方式。企业中最常用的模式。

2.3.3.1 LVS NAT 模式

  • nat network address translation 是一种外网和内网地址映射的即使
  • 多目标的DNAT转换,它公国修改请求报文的目标IP地址,同时可能会修改目标的端口,挑选出某Real Server的RIP地址实现转发。在LVS负载均衡调度器上请求先发送给PREROUTING—->INPUT,然后经由监听在INPUT上的LVS程序强制将请求转发给POSTROUTING。
  • NAT 模式下,网络包的进出都要经过LVS处理,LVS需要作为RS的网关。当包达到LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP,RS接收到包以后,仿佛时客户端直接发给他的一样。RS处理完,返回相应时,源IP时RS IP,目标IP时客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给他的。客户端无法感知到后端RS的存在

注意:

  • RS的RIP和Director的DIP必须在同一IP网络
  • RS和DIP应该使用死亡地址,且RD的网关要指向DIP
  • 真实服务器的网关必须设置为LVS的IP地址

image.png
image.png

LVS-NAT模式总结:

  1. 集群节点处于同一个网络环境中
  2. 真实服务器必须将网关指向负载均衡器LB
  3. RIP通常是私有IP,仅仅用于各个集群节点通信
  4. 负载均衡器必须位于RS于DS之间,充当网关
  5. 支持端口映射
  6. 负载均衡器必须是Linux,真实服务器随意
  7. 进出数据报文都要经过负载均衡机器,压力较大。
  • 因为用户跟内网的服务器是互相不可知的状态,客户通过路由器和服务器相连时,客户的请求根本就不知道后端服务器的真实IP,发送的数据包的目的IP地址也就只能够到路由器,无法真正到达后端服务器集群。所以就需要LVS负载均衡做DNAT以及SNAT的地址转换技术。

2.3.3.2 LVS TUN 模式

TUN模式是一种IP隧道模式,用户的请求通过LVS到达Nginx集群,请求的过程和NAT模式一样的,重要的是响应不同;
但是有一个硬性的要求:每一个Nginx节点都要配备网卡,会导致Nginx集群都暴露在公网,会有安全问题

  • 客户端将访问VIP包问发送给LVS服务器
  • LVS服务器将请求报文重新封装,发送给后端真实服务器
  • 后端真实服务器将请求包问解封,在确认自身有VIP之后进行请求处理
  • 后端真实服务器在处理完数据i请求后,直接相应客户端

注意:

  • TUNNEL 必须在左右的RS上绑定VIP
  • RS 直接把包发给Client
  • 隧道模式运维起来比较难,一般不用
  • RIP、DIP、VIP全都是公网地址

image.png
image.png

LVS-TUN模式总结:

  1. 集群所有节点都必须直接/间接拥有公网地址
  2. 真实服务器必须将网关指向真实的网关处
  3. 不支持端口映射
  4. DS 与 RS 必须开启隧道功能
  5. 入站由 DS 完成,出战由RS完成
  6. 负载均衡器必须是 Linux 操作系统,真实服务器随意
  7. 压力较大(负载均衡器需要大量的数据包的封装和解封装)
  8. 使用场景比较少

2.3.3.3 LVS DR 模式

DR模式叫做直接路由模式,与TUN模式不同的是,Nginx集群的响应会统一经过一个路由中转之后,统一返回给用户,此时Nginx集群是处于私网当中的;

  • 客户端i请求由LVS接受,由真实提供服务服务器RS直接返回给用户,返回的时候不经过LVS。DR 模式下需要LVS和绑定同一个VIP(RS通过将VIP绑定在loopback实现)。
  • 一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,改包就会被转发到对应的RS处理,注意此时的源IP和目标IP都没有变,LVS只是做了移花接木。
  • RS收到LVS转发来的包,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法的接受,RS感知不到前面有LVS的存在
  • 当RS返回响应时,只要直接向源IP返回即可,不需要再经过LVS。

image.png
LVS-DR(直接路由)模式:负载调度器通过交换机连接均衡服务器池(属于同一个广播域),接收用户请求并调度;均衡服务器池(伪装为调度器的公网IP地址后)通过交换机直接应答结果给路由器,进一步到用户;
生产环境一般都是用DR模式,这避免了真实服务器暴露在公网之下防止攻击,又不必将数据从负载调度器原路返回,大大增加了LVS的抗并发能力,LBC模式其实和NGINX的七层代理本质一样的。

LVS-DR模式总结:

  1. 集群节点处于同一个广播域中
  2. 真实服务器将网关指向真实路由器
  3. 负载均衡器只否则入站请求,压力最小
  4. 不支持端口映射
  5. 负载均衡器必须是 Linux,真实服务最好是Linux(因为需要网卡配置一个DIP,并且该IP不能向外ARP广播)

2.3.4 四种工作模式的对比

NAT DR TUN FULLNAT
RS的限制 任意OS 限制ARP 需要支持Tunneling 任意OS
RS的网络 私有 LAN LAN/WAN 私有
RS的数量 少量 大量 大量 少量
RS的网关 LVS的DIP 自己的路由 自己的路由 自己的路由
优点 端口转换 性能好 WAN 端口转换,跨VLAN
缺点 性能瓶颈 不支持跨网段 需要支持Tunneling 性能瓶颈,无法获得用户IP

2.4 LVS-DR 构建