什么是LVS
LVS(Linux Virtual Server)是一个高性能、高可用的负载均衡(Load Balancing)和集群(Clustering)解决方案,通常被称为Linux虚拟服务器。它基于Linux内核的IP负载均衡技术,通过控制IP层的转发来实现负载均衡。LVS在Linux内核中实现了三种负载均衡技术:NAT(网络地址转换)、TUN(隧道)和DR(直接路由)。
LB Cluster 负载均衡集群分类
硬件
- F5 Big-IP(F5服务器负载均衡模块)
- Citrix Netscaler
- A10 A10
软件
-
lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用
-
nginx:支持七层调度,阿里七层SLB使用 Tengine
-
haproxy:支持七层调度
-
ats:Apache Traffic Server,yahoo捐助给apache
-
perlbal:Perl 编写
-
pound
基于工作的协议层次划分
SNAT : 让 内网用户 可以访问外网
DNAT: 把内网的服务 共享到公网上(外网用户可以访问 公司内网的服务)
- ** 传输层(通用**):DNAT 和 DPORT
LVS:
nginx:stream
haproxy:mode tcp
- 应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), ...
fastcgi:nginx, httpd, ...
负载均衡的会话保持
- session sticky:同一用户调度固定服务器
Source IP:LVS sh算法(对某一特定服务而言)
Cookie
- session replication:每台服务器拥有全部session(复制)
session multicast cluster
- session server:专门的session服务器(server)
Memcached,Redis
LVS集群的工作模式
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
(1)RIP(真实服务器)和DIP(代理服务器的内网地址)应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由lvs服务器转发,lvs服务器易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
- 缺点:
- 扩展性有限。当服务器节点增长过多时,负载均衡器可能成为整个系统的瓶颈,因为所有的请求包和应答包都需经过负载均衡器。
- 当服务器节点过多时,大量的数据包交汇在负载均衡器,可能导致速度变慢。
lvs-dr:操纵封装新的MAC地址(直接路由)
负载均衡器和RS都使用同一个IP对外服务。但只有负载均衡器对ARP请求进行响应,所有RS对ARP请求保持静默。负载均衡器收到数据包后,根据调度算法找出对应的RS,并修改数据包的目的MAC地址为RS的MAC地址后发送给RS。RS处理完成后,由于IP一致,可以直接将数据返回给客户端。
优点
- 数据返回不经过负载均衡器,提高了效率。
- 负载均衡器只负责调度请求,服务器直接响应,减少了负载均衡器的负担。
缺点
- 依赖于网络设备对ARP的支持和配置。
lvs-tun:隧道模式
工作原理
请求过程:
- 当客户端发送请求(CIP -> VIP)到LVS调度器(Director)时,调度器会修改这个报文,加上IP隧道两端的IP地址作为新的源和目标地址。
- 调度器然后将封装后的请求转发给后端被选中的一台真实服务器(Real Server,简称RS)。
RS处理过程:
- RS收到封装后的报文后,首先解封该报文,得到原有的CIP -> VIP请求。
- RS发现自身的tun接口上配置了VIP,因此接受该数据包并进行处理。
响应过程:
- 请求处理完成后,RS不会将结果重新交给调度器,而是直接返回给客户端。
- 在RS返回给客户端数据包时,由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址(如RIP)。
- 要让响应数据包的源IP为VIP,RS需要添加一条特殊的路由条目,明确指定该路由的源地址是VIP。
3. 特性与要求
-
跨网段转发:TUN模式可以跨网段甚至跨机房转发请求,使得集群节点可以跨互联网实现。
-
配置要求:
-
RS的tun接口上需要配置VIP地址,以便接收调度器转发过来的数据包,以及作为响应的报文源IP。
-
RS和调度器的IP地址不需要在同一物理网络中,但RS必须可以和公网通信。
4. 优缺点
-
优点:
-
可以跨网段转发,实现更大的负载均衡灵活性。
-
响应数据包不经过调度器,提高了转发效率。
-
缺点:
-
可能增加跨机房间的流量,提高成本。
-
RS机房上需要绑定VIP,可能会被防火墙视为IP伪造而进行拦截。
5. 应用场景
- TUN模式通常用于需要跨网段或跨机房实现负载均衡的场景,如缓存服务器组等。
希望以上信息能清晰、全面地解释LVS-TUN隧道模式的工作原理、特性、要求及优缺点。
lvs-fullnat:修改请求报文的源和目标IP
定义与原理
LVS-FULLNAT模式是在NAT(网络地址转换)模式基础上的一种改进,它在数据包的源地址(SNAT)和目标地址(DNAT)转换上进行了额外的处理。
LVS 调度算法
仅根据算法本身进行调度
静态:
1、RR:roundrobin,轮询,较常用
2、WRR:Weighted RR,加权轮询,较常用 先算总权重 再用自己的 权重去除以 总权重
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存 缓存
动态: 一个参考值 来确定服务器是否忙 这个值越小 代表服务器 闲 就会优先调度给闲的服务器
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、LC:least connections 适用于长连接应用 最小连接数 不考虑权重
Overhead=activeconns*256+inactiveconns
2、WLC:Weighted LC,默认调度方法,较常用 默认调度 加权最小连接数 第一轮不合理 都是 一样的 优先级
Overhead=(activeconns*256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接 权重小的 空闲的
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等 检查 后端服务器忙不忙
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等