集群介绍

什么是集群

集群是一种并行或分布式系统,该系统包括一个互连的整体计算机集合作为一种单一,统一的计算机资源使用。

集群,是指一组互相独立的计算机,利用高速通信网络组成的一个计算机系统,其中的每个节点都是运行自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就形成了单一系统,协同起来向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。

特点

高性能、低成本、高可扩展性、高可靠性

分类

  • 负载均衡集群(Load balancing clusters)

以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标

  • 高可用性集群(High Availablity clusters)

以提高应用系统的可靠性,尽可能减少中断时间为目标,确保服务的连续性

  • 高性能计算集群(High-performance clusters)

  • 网络计算(grid computing)

集群软件及选择

  1. 1.  互联网企业常用的集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat

互联网企业常用的集群硬件有:F5,Netscaler,Radware

  1. 2.  企业运维中集群软硬件选择:

  2. 1)  业务重要但是技术薄弱,可以出钱买服务的选择硬件负载均衡设备,多为传统的大型非互联网企业,如银行、证券、金融、汽车公司、制造业公司

  3. 2)  对于门户网站来说,软硬件都用,如淘宝、新浪,融资企业会选择硬件集群,如58、赶集

  4. 3)  中小型互联网企业选择开源软件,雇佣专门人员维护,如51cto、chinaunix.com

LVS负载均衡集群介绍

lvs介绍

LVS是Linux Virtul Server的简写,意为linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能

IPVS(LVS)发展史:

早在2.2内核的时候ipvs就以系统内核补丁的方式出现

从2.2.23开始ipvs就合并到linux内核的常用版本的内核补丁中了

从2.2.24开始ipvs成为linux官方标准内核的一部分。

wKiom1VmpKeRdkDYAAEwy8IA11o145.jpg

ipvs工作在kernel当中,所以平时我们无法直接管理,需要用专门的工具ipvsadm,ipvsadm工作在应用程序层,属于最外层

从上图中我们可以看出lvs是在linux内核中实现的,因此被称为linux虚拟服务器,我们使用该软件的时候不能够直接配置内核中的ipvs,而需要使用专门的管理工具ipvsadm或keepalived。

注意:keepalived是管理lvs的工具而且是直接管理lvs并不通过ipvsadm,

LVS体系结构

  • 负载调度器(load balancer)

  • 服务器地址池(Server pool)

  • 共享存储(shared storage)

负载均衡常用的命名约定

名称

缩写

说明

虚拟IP地址(virtual ip address)

VIP

VIP为Director用于向客户端计算机提供服务的IP地址

真实IP地址(Real Server IP address)

RIP

在集群下面节点使用的ip地址

Director的IP地址(Director Ip address)

DIP

DIrector 用于连接内外网的IP地址

客户端主机IP地址(Client ip Address)

CIP

客户端的ip地址

负载均衡的工作模式

  • 地址转换(NAT模式)

通过网络地址转换,负载调度器会重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。调度器需要处理客户端的请求报文和服务器的回应报文

这个过程涉及到地址转换,有两个名词:

DNAT:用户请求的报文,lvs会修改它的目标IP地址

SNAT:真实服务器返回的回应包,lvs会修改它的源IP地址

nat模式最大的问题在于网卡的吞吐量,

NAT模式的特点:

1请求和回应的报文都必须经过LB的重写,然后进行转发

2在LB上配置外网IP地址和内网IP地址,内网IP地址用于和真实服务器通信,

3将DIP设为真实服务器的网关,这样返回报文才会经过LB

4由于接受和返回的报文都经过LB,因此LB的压力会比较大,有可能出现瓶颈

5支持对ip地址和端口的转换

6所有的内部节点只需要配置内网ip地址

注意:在这个过程中LB会记录一个hash表,如果没有hash表的话,一切都乱了

记住两个名词:DNAT、SNAT

  • IP隧道(TUN模式)

负载调度器把请求报文通过IP隧道(相当于ipip或ipsec)转发至真实服务器,而真实服务器将回应报文直接返回给客户。调度器只处理客户端的请求包报文

工作流程:

   1、他的连接调度和管理与NAT一样,只是报文的转发方法不同。

  2、LB根据各个RS的负载情况或者连接数的多少,动态的选择RS

  3、将原请求报文封装到另一个报文中(这个事直接封装而不是修改源ip或者目的ip),再将封装后的报文发给RS

  4、RS解封报文,获得原来目标地址为vip的报文

  5、RS发现vip地址被配置在本地的ip隧道设备上,所以就处理这个请求了

  6、然后,根据路由表将响应报文发给客户

  • 直接路由(DR模式)

通过改写请求报文的MAC地址,将请求发送给真实服务器,而真实服务器将回应报文直接返回给客户端。调度器只处理客户端的请求包报文,类似TUN模式,但是没有ip隧道的开销,对集群中的真实服务器也没必要支持IP隧道协议

工作流程:

      1、报文转发方法和NAT、TUN不同,DR将报文直接路由给RS,

   2、根据各个RS的负载情况、连接数多少,动态选择RS

   3、不修改目的ip和目的端口,也不封装ip报文,而是将请求的数据帧的MAC地址修改为RS的MAC地址。

   4、然后将修改后的数据帧在局域网上发送,

   5、因为请求的数据帧的MAC地址是选中的RS的MAC地址,所以RS肯定可以收到该数据帧。

   6、从中可以获得该请求的ip报文,

   7、当RS发现报文的目标地址是在本地的网络设备上,RS处理这个报文。

   8、然后RS根据路由表将处理结果直接发给客户

DR特点:

1、DR修改的报文的目的MAC地址,不是封装MAC地址,源地址目标地址不变

2、处理结果由RS直接发送给客户,因此可以提高集群性能

3、DR通过改写MAC地址实现转发,因此所有RS和LB必须在同一个LAN网内

4、需要注意RS节点的VIP绑定和ARP抑制问题

5、RS节点的默认网关不是DIP,而是出口路由的ip,因为每个RS都配置公网ip

只要能出外网就可以,不一定非得配置外网ip,这点和TUN一样

6DR只改写目的MAC地址,因此,不能实现端口的改写

7、DR模式下的LB只能是linux或unix,不能使windows,但是RS可以是windows

8、总体讲,DR模式效率高,但配置复杂,访问量不是很大的情况下可以用haproxy或nginx替代

9、直接对外的业务,如web服务,最好使用公网,而对内的服务,如MySQL存储服务,最好使用内网

 

补充:最近淘宝开源了一个方法叫FULLNAT,传统的NAT只是将目标IP地址进程装换,而fullnat是将目标地址和源地址都进行转换

wKioL1VmplaQxdCEAAJB6tjONrQ792.jpg

LVS调度的算法

调度算法决定了如何在这些集群节点之间分布工作负荷

  • 固定调度算法:rr wrr dh sh

  • 动态调度算法:wlc lc lblclblcr SED NQ(后两种官方站点没提到)

算法

说明

rr

轮询调度(Round  Robin),调度器通过“轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

wrr

加权轮询(Weighted  Round Robin),调度器通过“加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

dh

目的地址哈希调度(destination  hashing),以目的地址为关键字查找一个静态hash表来获得需要的RS

sh

源地址哈希调度(source  hashing)以源地址为关键字查找一个静态hash表来获得需要的RS

wlc

加权最少链接数调度(Weighted  Least Connections)把权重和连接数比值最小的 RS 作为下一个RS

lc

最少链接数调度(Least Connections)IPVS表存储了所有活动的连接,把新的连接请求发送到当前连接数最少的RS上

lblc

基于地址的最小连接数调度(Locality-Based Least Connections) 将来自同一目的地址的请求分配给同一台RS,如果这台服务器尚未慢负荷,否则分配给连接数最小的RS,并以他为下次分配的首先考虑

lblcr

基于地址带重复最小连接数调度(Locality-Based Least Connections with Replication) 对于某一目的地址,对应有一个RS子集,对此地址请求,为他分配自己中连接数最小的RS,如果子集中所有服务器均已满负荷,则从集群中选择一个连接数最小的服务器,将他加入到此子集并分配连接,若一定之间内未做任何修改,则将子集中负载最大的节点从子集中删除

SED

最短的期望的延迟(Shortest Expected Delay Scheduling SED)基于wlc算法。这个必须举例来说了

ABC三台机器分别权重123  ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算

A:(1+1)/1

B:(1+2)/2

C:(1+3)/3

根据运算结果,把连接交给C

NQ

最少队列调度(Never Queue Scheduling NQ)

无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算

3). 调度算法的生产环境选型:

a)  一般的网络服务,如http、mail、mysql等,常用的调度算法是:rr、wrr、wlc

b)  LBLC(基于局部性的最少连接)和LBLCR(带复制的结余局部性最少连接)主要用于缓存服务,如web cache、db cache

c)  sh、dh可以结合使用在防火墙集群中,他们可以保证整个系统的唯一出入口

d)  最短预期延时调度SED和不排队调度NQ主要是针对处理时间较长的网络服务

实际工作中要根据实际需求选。

总结

1、vip一般配置在lo上,掩码255.255.255.255

2、RS最好有一个外网ip和一个内网ip,外网ip用户给客户发送响应报文,内网ip用户连接数据库、nfs等设备

   3、理论上只要RS能出网就可以,不用非得配置外网ip。流量小的话也可以使用nat

   4、TUN模式下LB只处理请求报文,因此处理效率可以大幅度提高,但是LB需要封装请求报文,所以会消耗一定的系统资源,TUN适合WAN/LAN

   5、TUN模式在LAN环境下的转发不如DR效率高,有的系统还要考虑是否支持ip隧道

   6、RS还有绑定vip,配置复杂

   7、LAN环境大多采用DR模式,WAN环境可以采用TUN模式,但是WAN环境下更多的采用DNS+haproxy/nginx等代理取代,因此,TUN模式用的很少

   8、直接对外的业务,如web服务,最好使用公网,而对内的服务,如MySQL存储服务,最好使用内网

为什么LB和RS必须在同一个局域网内?

因为DR模式是基于Mac地址的,所以必须在同一网段内需要在RS上绑定VIP

 

问题:如果有多个LB,那么RS上怎么绑定VIP呢?

   如果有多个VIP,我们在RS上可以使用lo1、lo2的方式绑定VIP

目前使用最广泛的,RS会直接将处理结果返回给用户,而不经过lvs

   降低了lvs压力

即使vip绑定到lo网卡口上也要设置抑制ARP回应。lo绑定vip时子网掩码设为32位的,

特别提示:DR模式是互联网使用最多的模式

 

附:淘宝开源方法

FULLNAT模式:

背景:

    lvs当前采用的主要是DR和NAT模式,但这两种模式都要求RS和LB在同一个局域网中,导致部署成本过高,TUN模式虽然可以跨VLAN但是RS上需要部署ip隧道模块,还要联通外网,比较复杂,不易维护

FULLNAT模式:

    报文进站时,除了做DNAT外还做SNAT(将用户的ip地址改为LB内网IP地址,)从而实现RS和LB之间可以跨VLAN通讯,RS只需要连接内网即可

FULLNAT工作模式:

    1、进站时目标ip改为RIP,源地址改为LOCAL IP

    2,出站时目标ip改为CIP,源地址改为VIP

    性能上和传统的nat比,转发量下架10%。

    FULLNAT的重点是session的管理,

    出站的时候可以交给多个LB进行处理,因此各个LB的压力不会很大,但是这中间要解决session的共享的问题

思路:

    1、每个session维护9元组,caddr、vaddr、laddr、daddr、增加了localaddress

    2、逻辑上采用两个session表

wKioL1VmpmrCUG05AADO3iLUy70647.jpg

创建in_idx和out_idx(struct ip_vs_conn_idx)结构体变量,2个index指向同一个session

1、out to in:in_dex结构体变量,hash key为caddr/vaddr

2、in to out:out_idx机构提变量,hash key 为daddr/laddr