LVS负载均衡集群架构

本文已获得原作者霸都民工哥授权。

写在前面

为什么需要使用负载均衡呢?这是一个必较重要的问题

实际生产环境中某单台服务器已不能负载日常用访问压力时,就需要使用负载均衡,把用户的请求数据分担到(尽可能平均分配)后端所有功能同等的集群的节点上,同样也是为了解决单台服务器故障问题,从而提高用户的访问体验。

LVS简单介绍

LVS(linux virtual server)LINUX 虚拟服务器,是一个虚拟的服务器集群系统,可以在 linux 和 unix 系统中运行,1985年开发研究的项目。
官方网站:http://www.linuxvirtualserver…

IPVS(lvs)发展史

在linux2.2内核时,IPVS 就已经以内核补丁的形式出现
从2.4。24版本以后 IPVS 已经成为 linux 内核官方标准内核的一部分

LVS 工作原理

  • LVS 负载均衡调度技术是在 linux 内核中实现的,我们使用配置 LVS 时,不是直接配置内核中的 IPVS,而是通过 IPVS 的管理工具 IPVSADM 来管理配置
  • LVS 集群负载均衡器接受所有入站客户端的请求,并根据算法来决定由哪个集群的节点来处理请求

LVS 相关术语介绍

  • 虚拟 IP 地址(VIP):用于向客户端提供服务的 IP 地址(配置于负载均衡器上)
  • 真实的IP地址(RIP):集群中节点服务器的IP地址
  • 负载均衡器 IP 地址(DIP):物理网卡上的IP,用与同外网连接的地址
  • 客户端主机 IP 地址(CIP): 终端请求用户的主机IP地址

LVS 几种工作模式介绍

NAT 网络地址转换模式(VS/NAT)

通过网络地址转换,调度器 LB 重写请求报文的目标地址,根据算法将请求分配给后端的真实主机服务器,真实服务器响应处理报文后返回给调度器 LB ,经过 LB 的报文源地址被重写,再返回给请求的客户端用户
《LVS负载均衡集群架构》

过程详解

1:客户端请求 CIP(10.10.0.1:80)目标的地址是VIP(1.1.1.1:80)

2:数据经过 LB,目的地址将被 LB 改写成后端服务器其中一个主机地址(RIP 192.168.1.1:80)

3:服务器接收到数据请求后返回应答信息(源地址:192.168.1.:80,目的地址:1.1.1.1:80,因此处的网关地址需指向LB)给 LB

4:LB 需将源数据地址改写成 VIP 地址(1.1.1.1:80,但实际的源地址是RIP1的地址)

5:LB 将数据返回给请求的客户端用户,完成整个流程的访问
因此 WEB 访问量很大的时候,LB 就会有很大的负载压力,一般支持10-20台节点,但是这种模式支持IP和端口的转换功能,即10.10.0.1:80—->1.1.1.1:80—->192.168.1.1:8080

TUN 隧道模式(VS/TUN)

LB 将请求的报文通过IP隧道转发给真实服务器,这样 LB 只要需要处理请求入站报文,因此可提高访问效率

《LVS负载均衡集群架构》

过程详解

1:客户端发送请求数据包(源:CIP10.10.1.1:80,目的地址:VIP1.1.1.1:80)

2:数据包到达 LB 后,LB 将数据包重新封装成另一个 IP 包(源目地址不变,增加一个IP头),通过隧道转发给真实服务器

3:真实服务器收到数据包后进行解包,数据包信息是(源:CIP 10.10.1.1:80,目的地址:VIP 1.1.1.1:80),最终发现目的地址不是自己(因此需要在服务器LO上绑定一个VIP地址),这样才会处理数据,返回处理数据

4:客户端接收到返回的数据(源地址 VIP 1.1.1.1:80,目的地址 CIP 10.10.1.1:80),符合 TCP/IP 的原理,因此整个访问过程完成

注:这时肯定有朋友发现这里会有一个问题,每台服务器上都绑定了一个相同 VIP 地址,用户访问时的目的地址也是 VIP,当数据包达到路由器后经过转发至内网,内网可能会产生多台回应数据包的机器,然后用户收到的最快回应的内网机器发来的数据,这样一来数据包也就没有经过 LB,就不是负载均衡了,所以需要做抑制 ARP 的功能,使所有真实服务器不再响应目的地址是 VIP 的请求,只要 LB 来响应请求,从而达到负载均衡。在实际生产环境中很少使用这种模式

DR 模式(Direct Routing)直接路由模式

此模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器,而真实服务器将响应后的数据直接回应给请求的客户端,此模式要求 LB 与真实服务器需要有一块物理网卡都是连接在同一网段上
《LVS负载均衡集群架构》

过程详解

1:客户端发出请求数据包(源 CIP 10.10.1.1:80 目的VIP1.1.1.1:80)

2:LB 接收到数据包后,不转换地址及端口,也不重新封装,只是将数据帧中的目的地址的 MAC 地址改写算法调度的真实机的 MAC 地址,将数据包转发出去

3:真实机收到数据后,但是发现数据包中目的地址不是自己(所以事先也得在 LO 上绑定一个 VIP 地址,同时配置抑制ARP),这样真实机做出响应直接回复客户端

4:客户端收到回复的数据包(源 VIP 1.1.1.1:80 目的 CIP 10.10.1.1:80),完成整个访问过程

注:LB 只能改写目的 MAC 地址,因此它不能改变请求报文的目的端口端口,LVS 只支持 unix 和 linux,但集群节点服务器可以是 win 系统,此种模式配置相当麻烦

FULLNAT 模式(淘宝开源)

《LVS负载均衡集群架构》

解决了上述三种的缺点

解决了真实服务器能跨越 VLAN 通讯,只需要连接到内网即可

入站时:
目标 IP 更改为真实服务器的 IP,源 IP 更改为内网的本地IP(一组内网IP)
出站时:
目标IP更改为客户端的 IP,源 IP 更换为 VIP

LVS 算法介绍

LVS 的调度算法决定了如何在集群节点之间分配负载压力(访问请求)

调度算法

  • rr 轮循调度:将请求依次分配给集群的节点,这种算法适用于各个节点处理能力基本相同的情况下
  • wrr 加权轮循调度:根据节点的权重来分配,权重较高的优先分配
  • wlc 加权最小连接数调度:按权重和连接数的数量来分配
  • lc 最小连接数调度:按连接数的数量来分配

实际生产环境 LVS 调度算法选型

一般网络服务,如 HTTP、MAIL、MYSQL 常用的调度算法有:rr、wlc、wrr

作者:霸都民工哥

链接:
https://mp.weixin.qq.com/s…

来源:微信公众号

更多相关文章:
Docker Compose+nginx 实现负载均衡
深入理解负载均衡
分布式架构实践——负载均衡

如果你还想了解更多,想和技术同僚分享切磋,可扫下方二维码,回复 yw,加入掘金运维技术交流群
《LVS负载均衡集群架构》

    原文作者:掘金
    原文地址: https://segmentfault.com/a/1190000015627534
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞