LVS 负载均衡
- 一. 基础介绍
- 二. 工作模式
- 1.LVS-NAT
- 2.LVS-DR
- 3.LVS-TUN
- 三. LVS调度算法
- 四. keepalived
一. 基础介绍
LVS 全称 Linux Virtual Server,即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,已被集成到Linux内核模块中。
LVS 的工作过程:client 端的互联网用户访问系统,LVS负载均衡服务器把用户的Web请求发送给LVS调度器,调度器在按照预设的算法将请求发送给后端的某台Web服务器,Web服务器访问数据存储服务器,返回用户访问的数据;整个过程对用户而言是透明的。
LVS 的目标,是作为流量接入层,处理更多的用户连接/用户请求,hold住流量;LVS不提供真正的服务,接受客户的访问,为整个集群提供一个唯一的入口,真正提供服务的是Real Server(可以是虚拟机,也可以数物理机)。
LVS 的特点,
- 快,能够快速响应互联网终端用户的请求,同时支持几百万的并发连接,系统的吞吐量最大可接近10Gbits/s
- 数据包级别的转发,不会和客户端进行握手
- 后端服务器可运行在Linux,Unix,Mac/OS,Windows NT/2000 等多种操作系统,支持大多数的TCP和UDP协议
- 对用户透明,无需对客户机和服务机做任何修改
LVS 的相关术语:
DS:Director Server,调度器,LVS前端负载均衡器
real Server:后端真实的工作服务器,真正提供服务
VIP:对外公布的IP,用户请求的目标IP的地址
DIP:Director Server IP,主要用于和 Real Server 之间通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址
CIP:Client IP,访问客户端的IP地址
网络体系结构:
二. 工作模式
1.LVS-NAT
NAT (NetWork Address Translation)即网络地址转换,转换的是客户请求的目标地址,实现的思路是网络层(IP层)数据欺骗,将互联网终端用发送到Director的数据IP包中的目标地址进行替换。
NAT 的网络要求:
real server 的 gateway(默认网关)要指向Director中。只有Director拥有公共IP,暴露在广域网上。
NAT 的实现过程
client 发出请求,发送请求给Director 的VIP,Director 修改请求报文中的目标IP为RIP,Real Server 将请求的内容发给Director,Director再将报文中的源IP改为VIP。
NAT 的特点:
- 配置最简单
- 非对称的,上行小下行大
- 带宽是瓶颈
- 消耗算力,Director需要按照调度算法进行VIP到RIP的转换
2.LVS-DR
DR 模式采用的是直接路由的技术实现虚拟服务器。在DR模式中,LVS会依据Real Server的负载情况,连接数多少,动态地选择一台server,不修改目标IP和目标端口,而是将请求报文的数据帧的目标MAC地址修改为Real Server 的Mac地址,RS接收到数据包之后,直接撕掉MAC地址,就能看到目标IP(VIP)。
DR模式的实现过程:
- 当用户请求到达DS,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
- IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
- 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;
- 响应报文最终送达至客户端;
DR 模式的特点和要求:
- 基于二层的,mac地址欺骗
- 请求时经过LVS,响应时直接返回给client,速度快,成本低
- 隐藏VIP,对内隐藏,对外可见,避免数据回传
- LVS 需要与RS在同一局域网内,因为需要通过MAC地址改写机制实现转发
3.LVS-TUN
TUN 模式又称 隧道 模式,IP隧道将一个IP报文封装在另一个IP报文中,即IP的数据包携带IP的数据包,解决了DR模型的物理局限性,实现了VIP——CIP的传输。
TUN模式的实现过程:
client 请求数据包,目标地址发送到LVS上,LVS收到client 的请求包,在数据包的包头加上IP隧道的包头,再发出去;RS根据包头信息收到请求包,解开IP隧道信息,得到client的请求包并进行处理,处理完之后,使用VIP的线路,将响应数据包发送给client。
三. LVS调度算法
active:活动连接,client与server有链接,并有数据传送
inactive:非活动连接,client与server有链接,但是没有数据传送
weight:权重
算法 | 说明 |
rr | 轮询算法,将请求依次分配给不用的rs节点,实现均摊分配 |
wrr | 加权轮询调度算法,依次给不同的RS的权值分配任务,权值高的优先获得任务,分配的连接数更多,相同权值的RS得到的连接数相同 |
lc | 最少连接调度,RS 中谁的连接少,就把下一个请求发给谁 |
wlc | 加权最少连接,(active*256+inactive)/weight,谁小就发给谁 |
Dh | 目的地址hash调度,以目的地址为关键字查找一个静态hash表来获得需要的RS |
SH | 源地址hash调度,以源地址为关键字查找一个静态hash表来获得需要的RS |
sed | 最短期望延迟,基于wlc,(active+1)*256/weight,谁小发给谁 |
nq | 不用排队,基于sed,在sed的基础上,谁的连接数为0就发给谁 |
lblc | 基于局部性的最少连接,类似于dh,目标地址hash,主要用于集群,若当前服务器未满负荷就分配,否则分配给连接数最小的RS |
lblcr | 带复制的基于局部性的最少连接,基于lblc,新请求直接发送给连接最少的RS |
四. keepalived
在分布式系统中,若LVS故障,会导致负载的业务下线,发生单点故障;若部分RS故障,LVS仍有这部分RS的负载记录,会造成部分用户请求得不到响应,影响系统的运行;keepalived可以有效的解决这两种故障,实现HA(高可用)。
解决策略:
- 单点问题,LVS实现一变多(主备/主主)
- LVS消除故障RS的负载记录问题,可以采用keepalived检测RS状态,验证应用层的HTTP协议,判断返回code,从而消除故障RS的负载记录。
keepalived的作用: - LVS Master监控自己的服务,通告自己在线,Backup监听M状态,若M故障,B将推举新的M
- 对后端real server做健康检查