为什么需要使用负载均衡呢?这是一个必较重要的问题 实际生产环境中某单台服务器已不能负载日常用访问压力时,就需要使用负载均衡,把用户的请求数据分担到(尽可能平均分配)后端所有功能同等的集群的节点上,同样也是为了解决单台服务器故障问题,从而提高用户的访问体验。
**1、LVS的介绍 ** LVS(linux virtual server)LINUX虚拟服务器,是一个虚拟的服务器集群系统,可以在linux和unix系统中运行,1985年开发研究的项目 http://www.linuxvirtualserver.org/zh/ 官方网站
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,用与同外网连接的地址
客户端主机IP地址(CIP)
终端请求用户的主机IP地址
**2、LVS负载均衡工作模式介绍 ** ***NAT网络地址转换模式(VS/NAT) *** 通过网络地址转换,调度器LB重写请求报文的目标地址,根据算法将请求分配给后端的真实主机服务器,真实服务器响应处理报文后返回给调度器LB,经过LB的报文源地址被重写,再返回给请求的客户端用户
TUN隧道模式(VS/TUN) LB将请求的报文通过IP隧道转发给真实服务器,这样LB只要需要处理请求入站报文,因此可提高访问效率
注:这时肯定有朋友发现这里会有一个问题,每台服务器上都绑定了一个相同VIP地址,用户访问时的目的地址也是VIP,当数据包达到路由器后经过转发至内网,内网可能会产生多台回应数据包的机器,然后用户收到的最快回应的内网机器发来的数据,这样一来数据包也就没有经过LB,就不是负载均衡了,所以需要做抑制ARP的功能,使所有真实服务器不再响应目的地址是VIP的请求,只要LB来响应请求,从而达到负载均衡。在实际生产环境中很少使用这种模式
***DR模式(Direct Routing)直接路由模式 *** 此模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器,而真实服务器将响应后的数据直接回应给请求的客户端,此模式要求LB与真实服务器需要有一块物理网卡都是连接在同一网段上
过程详解: 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模式(淘宝开源) ***
**3、LVS调度算法介绍 ** LVS的调度算法决定了如何在集群节点之间分配负载压力(访问请求)
调度算法: rr轮循调度:将请求依次分配给集群的节点,这种算法适用于各个节点处理能力基本相同的情况下 wrr加权轮循调度:根据节点的权重来分配,权重较高的优先分配 wlc加权最小连接数调度:按权重和连接数的数量来分配 lc最小连接数调度:按连接数的数量来分配
**实际生产环境LVS调度算法选型 ** 一般网络服务,如HTTP、MAIL、MYSQL常用的调度算法有:rr、wlc、wrr