美团面试问题:如何设计一个负载均衡架构来支持千万级用户的高并发访问?

1.1负载均衡简介

1.1.1负载均衡的妙用

1.1.2为什么要用lvs?

那为什么要用lvs?

ü简单来说,当并发超过Nginx的上限时,可以使用LVS。

ü Nginx可考虑1000-2000W PV或10000以下并发请求。

ü大型门户和电子商务网站需要LVS。

1.2 LVS简介

LVS是Linux虚拟服务器的缩写,意思是Linux虚拟服务器。LVS是一个虚拟服务器集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目由张博士于1998年5月创建,是中国最早的自由软件项目之一。

1.2.1相关参考

blogs.com/clsn/p/7904611.html LVS官方网站

Nginx:

blogs.com/clsn/p/7750615.html

1.3.2安装ipvsadm管理工具。

安装管理工具

检查当前的LVS状态,并激活LVS内核模块的方式。

查看系统的LVS模块。

1.3.3 LVS集群建设

命令集:

检查结果:

ipvsadm参数描述:(更多详情请参考manipvadm)

1 . 3 . 4 web浏览器中的配置操作

命令集:

至此,LVS集群配置完成!

1.3.5用于访问测试。

浏览器访问:

命令行测试:

抓住袋子看看结果:

Arp解析视图:

1.4负载平衡(LVS)相关术语

术语描述:

1.4.1 LVS集群工作模式- DR直接路由模式

在DR模式下,通过重写请求消息的目标MAC地址将请求发送给真实服务器,真实服务器直接将响应后的处理结果返回给客户端用户。

灾难恢复技术可以大大提高集群系统的可扩展性。但是,要求调度器LB和真实服务器RS都有一个物理网卡连接到同一个物理网段,也就是说,它们必须在同一个LAN环境中。

灾难恢复直接路由模式描述:

a)通过在调度器1b上修改数据包的目的MAC地址来实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。

b)请求的消息经过调度器,而RS response处理的消息不需要经过调度器LB,所以在并发访问次数多的时候效率更高,比Nginx代理模式要好。

c)由于DR模式是通过MAC地址的重写机制转发的,所以所有的RS节点和调度器LB只能在同一个局域网内。要注意RS节点的VIP绑定(lo:vip/32)和ARP抑制。

d)强调RS节点的默认网关不必是调度器LB的DIP,而是IDC机房分配的上级路由器的IP(这是RS有外部IP地址的情况)。理论上讲,只要RS能出网,就不需要配置外部IP,但是走自己的网关会成为瓶颈。

e)因为DR模式中的调度器仅重写目的地MAC地址,所以调度器1b不能改变请求消息的目的地端口。LVS DR模式办公室位于第二层数据链路层(MAC),而NAT模式工作在第三层网络层(IP)和第四层传输层(端口)。

f)目前调度器LB支持几乎所有的UNIX和Linux系统,但不支持windows系统。真正的服务器RS节点可以是windows系统。

g)总之,DR模式效率高,但配置也麻烦。所以流量少的公司可以用haproxy/Nginx代替。这符合运维的原则:简单、易用、高效。日PV 1000-2000 W或并发请求1000以下可考虑ha proxy/Nginx(LVS NAT模式)。

h)对于直接的外部访问服务,例如作为RS节点的web服务,RS最好使用公共IP地址。如果业务不是直接对外的,比如MySQL,存储系统RS节点,最好只使用内部IP地址。

灾难恢复的实现原理及数据包的变化

(a)当用户请求到达Director服务器时,所请求的数据消息将首先到达内核空间中的路由链。此时,消息的源IP是CIP,目标IP是VIP。

(b)预路由检查数据分组的目的地IP是本地的,并将数据分组发送到输入链。

(c) IPVS比较数据包请求的业务是否是中继业务,如果是,则将请求报文中的源MAC地址修改为DIP的MAC地址,将RIP的MAC地址修改为目的MAC地址,然后将数据包发送到路由后链。此时源IP和目的IP都没有修改,只修改了源MAC地址为DIP的MAC地址和目的MAC地址为RIP的MAC地址。

(d)因为DS和RS在同一个网络中,所以它们通过第2层传输。路由后链检查RIP的MAC地址,然后将数据包发送到真实服务器。

(e)当RS发现请求消息的MAC地址是它自己的MAC地址时,它接收该消息。处理完成后,响应消息通过lo接口传输到eth0网卡,然后发送出去。此时源IP地址为VIP,目标IP为CIP。

(f)响应消息最终被传递给客户端。

web端1.5的操作有什么意义?

1 . 5 . 1 real server为什么要在lo接口上配置VIP?

由于RS可以处理目的地址为vip的IP包,所以它必须首先被RS接收。

在lo上配置vip可以完成接收数据包,并将结果返回给客户端。

1.5.2在eth0网卡上配置VIP可以吗?

不会,在eth0网卡上设置VIP会影响RS的arp请求,导致整个LVS集群的arp缓存表紊乱,使整个负载均衡集群无法正常工作。

1.5.3为什么要抑制ARP响应?

① arp协议描述

为了提高IP转换到MAC的效率,系统会保存解析结果,这个解析结果叫做ARP缓存。

ARP缓存表是一把双刃剑。

新地址解析的ARP广播。

测试命令

Windows view arp -a

ARP _ announcement和arp_ignore的详细说明。

Lvs需要在DR模式下关闭arp功能。

arp_announce

网络接口上本地IP地址发出的ARP响应应限制在相应级别:

确定不同程度的限制,并宣布从本地源向IP地址发送Arp请求的接口。

Arp _忽略定义

为目的地址为本地IP的ARP查询定义不同的应答模式0。

抑制RS端arp前的广播情况

抑制RS端arp后的广播情况

1.6 LVS集群的工作模式

直接路由模式

网络地址转换

调谐器(隧道)模式

全网络地址转换

1.6.1 LVS集群的工作模式- NAT

通过网络地址翻译,调度器LB重写请求消息的目标地址,并根据预设的调度算法将请求调度到后端的真实服务器。真实服务器的响应消息经过处理后,返回时必须经过调度器,经过调度器时重写消息的源地址,然后返回给客户,完成整个负载调度过程。

收费站模式——来来去去都要经过LB负载均衡器。

NAT模式的实现原理及数据包的变化

(a)当用户请求到达Director服务器时,所请求的数据消息将首先到达内核空间中的路由链。此时,消息的源IP是CIP,目标IP是VIP。

(二)。预路由检查数据包的目的IP是否在本地,并将数据包发送到输入链。

(三)。IPVS比较数据包请求的服务是否是集群服务,如果是,则将数据包的目的IP地址修改为后端服务器IP,然后将数据包发送到POSTROUTING链。此时,报文的源IP是CIP,目标IP是RIP。

(四)。POSTROUTING链通过路由将数据包发送到真实的服务器。

(e)。Real Server对比发现目标是自己的IP,开始建立响应报文并发送回Director Server。此时,报文的源IP是RIP,目标IP是CIP。

(f)。Director Server在响应客户端之前会将源IP地址改为自己的VIP地址,然后再响应客户端。此时,消息的源IP是VIP,目标IP是CIP。

LVS-纳特模型的特点

L RS应该使用私有地址,RS的网关必须指向DIP。

L DIP和RIP必须在同一个网段中。

l请求和响应消息都需要经过Director Server,这很容易成为高负载场景下的性能瓶颈。

l支持端口映射

L RS可以使用任何操作系统。

l缺陷:director服务器的压力会更大,请求和响应都需要经过Director服务器。

1.6.2 LVS集群工作模式-隧道模式TUN

使用NAT技术时,由于请求和响应消息都必须由调度器地址重写,当客户请求越来越多时,调度器的处理能力就会成为瓶颈。

为了解决这个问题,调度器通过IP隧道(相当于ipip或ipsec)将请求的消息转发给真实服务器,真实服务器处理后直接将响应返回给客户端用户,这样调度器只处理请求的入站消息。

由于一般网络服务响应数据远大于请求消息,采用VS/TUN技术后,集群系统的最大吞吐量可提高10倍。

VS/TUN工作流,其连接调度和管理与VS/NAT中的相同,只是消息转发方式不同。

调度器根据每个服务器的负载和连接数动态选择一个服务器,将原来请求的报文封装在另一个IP报文中,然后将封装后的IP报文转发给选择的真实服务器。

真实服务器收到报文后,解封收到的报文,得到原始目的地址为VIP的报文。服务器发现本地IP隧道设备上配置了VIP地址(这里需要手动配置),于是处理请求,然后根据路由表直接向客户返回响应报文。

调谐器原理和数据包变化

(a)当用户请求到达Director服务器时,所请求的数据消息将首先到达内核空间中的路由链。此时,消息的源IP是CIP,目标IP是VIP。

(b)预路由检查数据分组的目的地IP是本地的,并将数据分组发送到输入链。

(c) IPVS比较数据包请求的业务是否为集群业务,如果是,则在请求报文的头部重新封装一层IP报文,源IP为DIP,目标IP为RIP。然后将其发送到POSTROUTING链。此时,源IP是DIP,目标IP是RIP。

(d) POSTROUTING chain根据最新封装的IP报文将数据包发送给RS(由于外层多了一层封装的IP头,此时可以理解为隧道传输)。此时,源IP是DIP,目标IP是RIP。

(e)在接收到该消息后,RS发现这是它自己的IP地址,所以它将接收该消息。去掉最外面的IP后,会发现里面还有一个IP头,目标是自己的lo接口VIP。此时RS开始处理这个请求,处理完成后,通过lo接口发送到eth0网卡,然后对外传递。此时源IP地址为VIP,目标IP为CIP。

(f)响应消息最终被传递给客户端。

LVS-吞模型的特点

1.6.3 LVS集群的工作模式- FULLNAT

LVS的DR和NAT模式要求RS和LVS在同一个vlan内,导致部署成本高。虽然隧道模式可以跨越vlan,但是ipip隧道模块需要部署在RealServer上,网络拓扑需要连接外网,操作复杂,维护困难。

为了解决上述问题,开发了FULLNAT。

该模式与NAT模式的区别在于,当数据包进入时,除了d NAT,SNAT(用户IP->;内部网ip)

这样LVS-RealServer就可以跨vlan进行通信,而RealServer只需要连接到内部网即可。模拟地铁站多道门。

1.7 IPVS调度程序实现了以下八种负载调度算法:

a)循环赛)RR

调度程序通过“循环”调度算法将外部请求依次分配给集群中的实际服务器,该算法平等地对待每个服务器,而不管服务器上的实际连接数和系统负载。

b)加权循环赛)WRR

调度器通过“加权循环”调度算法,根据实际服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能够处理更多的访问流量。

调度器可以自动查询真实服务器的负载,并动态调整其权重。

c)最少连接

调度程序通过“最少连接”调度算法,将网络请求动态调度到已建立链接最少的服务器。

如果集群系统中的真实服务器具有相似的系统性能,那么“最小连接”调度算法可以更好地平衡负载。

d)加权最少连接数

当集群系统中服务器性能差异较大时,调度器使用“加权最少链路”调度算法优化负载均衡性能,权重较高的服务器将承担更大比例的主动连接负载。调度器可以自动查询真实服务器的负载,并动态调整其权重。

e)基于位置的最少连接数。

“基于局部性的最小链接”调度算法是针对目标IP地址的负载均衡,目前主要用于缓存集群系统。

该算法根据请求的目标IP地址,找出该目标IP地址最近使用的服务器,如果该服务器可用且未过载,则向该服务器发送请求。

如果服务器不存在,或者服务器过载,一半工作量有一个服务器,那么就用“最少链接”原则选择一个可用的服务器,把请求发送给服务器。

f)基于位置的最少复制连接数。

基于带复制的局部最少链路的调度算法也是针对目标IP地址的负载均衡,目前主要用于缓存集群系统。

它与LBLC算法的不同之处在于,它维护的是从一个目标IP地址到一组服务器的映射,而LBLC算法维护的是从一个目标IP地址到一个服务器的映射。

算法找出请求的目标IP地址对应的服务器组,按照“最小连接”原则从服务器组中选择一个服务器,如果服务器没有过载,就向服务器发送请求。

如果服务器过载,根据“最小连接”原则从这个集群中选择一个服务器,将该服务器添加到服务器组中,并向该服务器发送请求。

同时,当服务器组一段时间没有被修改时,最繁忙的服务器将从服务器组中删除,以降低复制程度。

g)目的地散列。

“目标地址哈希”调度算法使用请求的目标IP地址作为哈希关键字,从静态分配的哈希表中找到对应的服务器。如果服务器可用并且没有过载,它将向服务器发送请求,否则将返回null。

h)源哈希

“源地址哈希”调度算法使用请求的源IP地址作为哈希关键字,从静态分配的哈希表中找到相应的服务器。

如果服务器可用且未过载,则将请求发送到服务器,否则返回null。

1.8 LVS+保活方案的实现

1.8.1保持激活功能

1.添加VIP

2.添加LVS配置

3.高可用性(VIP漂移)

4.web服务器运行状况检查

1.8.2在加载器上安装Keepalived软件。

#检查软件是否安装。

1.8.3修改配置文件

在lb03上保留关联的配置文件

保留lb04的关联配置文件

keepalived persistence_timeout参数的含义LVS持久性参数的作用

/nima Sike/article/details/53911363

1.8.4启动保持激活服务。

web服务器上的1.8.5配置

注意:web服务器上的配置暂时有效,可以写入rc.local文件,注意文件的执行权限。

使用curl命令进行测试。

至此,keepalived+lvs已经配置完毕。

1.9通用LVS负载平衡高可用性解决方案

?现在不推荐开发类似早期方法keepalived的脚本。

?heartbeat+lvs+ldirectord脚本的配置方案比较复杂,难以控制,不推荐使用。

?红帽工具食人鱼,一个网页界面配置LVS。

?LVS-DR+keepalived方案,推荐最佳方案,简单易用,高效。

1.9.1 lvs的调试思路