一、lvs简介
LVS(Linux Virtual Server)是Linux虚拟服务器的简称,是一个由章文嵩博士发起的自由软件项目,现在已经成为Linux内核标准的一部分。LVS主要用于构建高可用性、高性能的服务器集群系统,通过负载均衡技术将客户端请求分发到后端的多台服务器上,从而提高系统的整体性能和可靠性。LVS支持多种负载均衡算法,包括轮询(RR)、加权轮询(WRR)、最少连接(LC)、加权最少连接(WLC)等,以及基于源IP地址的会话绑定(SH)和基于目标地址的哈希(DH)等算法。
LVS具有多种工作模式,主要包括NAT(网络地址转换)模式、DR(直接路由)模式和TUN(隧道)模式。每种模式都有其特定的应用场景和优缺点:
NAT模式:所有请求和响应都需要经过LVS调度器,可能导致调度器成为性能瓶颈。
DR模式:要求LVS调度器和后端服务器在同一物理网络内,响应不经过调度器直接返回给用户,性能较高。
TUN模式:通过IP隧道技术封装请求,允许调度器和后端服务器不在同一物理网络内,但配置和管理较为复杂
1. NAT(Network Address Translation)模式:修改请求报文的目标IP地址和端口,将请求转发给后端服务器。后端服务器的响应报文通过调度器返回给客户端,因此调度器容易成为瓶颈。
2. **DR(Direct Routing)模式**:通过请求报文重新封装一个MAC报文首部进行转发,源MAC是DIP(Director IP)所在的接口MAC地址,目标MAC是挑选出来的RIP(Real Server IP)所在接口的MAC,源IP/PORT及目标IP/PORT均保持不变。响应报文由后端服务器直接返回给客户端,不经过调度器,减轻了调度器的压力。
3. **TUN(Tunneling)模式**:在请求报文之外再封装一个新的IP报文首部,将报文通过隧道转发给后端服务器。支持跨网络部署集群节点,但响应报文仍然由后端服务器直接返回给客户端。
二、lvs负载均衡调度算法
LVS(Linux Virtual Server)是基于Linux内核的虚拟服务器软件,它实现了高性能的四层负载均衡。LVS负载均衡调度算法是LVS工作的核心,它们决定了如何将客户端的请求分发到后端的多台服务器上。以下是一些常见的LVS负载均衡调度算法:
一、静态调度算法
静态调度算法不考虑后端服务器的实际连接情况和负载情况,仅根据预设的算法进行调度。
1. *轮询(RR, Round Robin)
- 调度器通过轮询调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
- 优点:简洁性,无需记录当前所有连接的状态,是一种无状态调度。
2. 加权轮询(WRR, Weighted Round Robin)
- 调度器通过加权轮询调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。
- 优点:考虑了服务器间性能的差异,能够更合理地分配请求。
3. 目标地址散列(DH, Destination Hash)
- 根据请求的目标IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器。
- 优点:对于相同的目标IP地址,请求总是被发送到同一台服务器,适用于基于IP的会话保持场景。
4. 源地址散列(SH, Source Hash)
- 根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器。
- 优点:对于相同的源IP地址,请求总是被发送到同一台服务器,适用于基于源IP的会话保持场景。
二、动态调度算法
动态调度算法会根据后端真实服务器的实际连接情况来分配请求。
1. 最少连接(LC, Least Connections)
- 动态地将网络请求调度到已建立的连接数最少的服务器上。
- 优点:如果集群系统的真实服务器具有相近的系统性能,采用最少连接调度算法可以较好地均衡负载。
2. 加权最少连接(WLC, Weighted Least Connections)
- 在集群系统中的服务器性能差异较大的情况下,调度器采用加权最少连接调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。
- 优点:既考虑了服务器的性能差异,又考虑了服务器的当前连接数,能够更精细地调整负载分配。
3. 基于局部性的最少连接(LBLC, Locality-Based Least Connections)
- 针对目标IP地址的负载均衡,主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器。
- 优点:能够减少跨服务器的数据传输,提高缓存命中率。
4. 带复制的基于局部性最少连接
- 与LBLC算法类似,但它维护从一个目标IP地址到一组服务器的映射,按“最小连接”原则从服务器组中选出一台服务器。
- 优点:在服务器超载时,能够动态地调整服务器组,保证请求的及时处理。
5. 最短延迟调度(SED, Shortest Expected Delay)
- 在WLC基础上改进,考虑了服务器的处理速度和响应时间,将请求分配给具有最短期望延迟的服务器。
- 优点:能够更精确地预测服务器的响应时间,从而优化负载均衡效果。
6. 永不排队/最少队列调度(NQ, Never Queue Scheduling
- 无需队列,如果有台服务器的连接数等于0,就直接分配请求给该服务器,不需要再进行复杂的运算。
- 优点:能够确保不会有服务器处于完全空闲状态,提高资源的利用率。
三、环境配置
1.lvs 双网卡 (nat模式和仅主机)
ip 172.25.254.100
vip 192.198.5.100
2.server1(仅主机)
ip 172.25.254.10
vip null
3.server2(仅主机)
ip 172.25.254.20
vip null
lvs配置
s1
s2
启用内核路由功能
添加并查看调度策略
保存启动服务
web服务设置
2.
client(nat)
ip 192.168.5.200
vip null
router 双网卡(仅主机nat)
ip 192.168.5.100 172.25.254.100
vip null
lvs (仅主机)
ip 172.25.254.50
vip 172.25.254.200/32
s1(仅主机)
ip 172.25.254.10
vip 172.25.254.200/32
s2(仅主机)
ip 172.25.254.20
vip 172.25.200/32
ivs配置
router配置
server配置
添加vip
ip a a 172.25.254.200/32 dev lo
ivs配置
测试