lvs
1.简介
LVS 是一个开源软件,由章文嵩博士于 1998 年 5 月创立,可以实现 Linux 平台下的简单负载均衡。LVS 是 Linux Virtual Server 的简写,是一个虚拟的服务器集群系统。在后续的维护过程中,LVS 添加了各种新的支持,包括 FreeBSD 的支持、IPV6 的支持、TCPHA 的支持等等。
LVS 为传输层协议,基于 linux 内核的 netfilter 模块,现在一般都集成与 linux 内核模块,无需单独安装,使用命令:lsmod | grep ip_vs,可以查看 lvs 是否已在内核模块中。
lvs 分为 ipvs 和 ipvsadmin,前者为已集成与内核模块的 ipvs 核心功能模块(内核如没有可以编译进内核),后者为 lvs 的命令行工具,其命令格式也类似与 iptables。
lvs 工作模式:ipvs 是工作在内核中 netfilter 的 INPUT 的钩子函数上,对进入的报文在没有进入用户空间前,对这些报文进行操作。优点是性能高,支持并发大,无 socket 限制和最大文件句柄数限制。缺点是调度方式简单,仅能通过 ip+port 进行调度。
2.调度模式
lvs 有三种调度模式,NAT,DR,TUN
备注:CIP(客户端 IP),VIP(lvs 调度器的外网监听 IP),DIP(lvs 调度器和后端 realserver 联系的 IP),RIP(后端 realserver 的 IP)
2.1 NAT 模式
nat 模式是通过地址转换来实现的调度方式,当客户端访问服务器时,访问的地址应是 lvs 监听的外网地址,也就是 VIP,此时请求报文的地址应为 CIP->VIP(请求地址-> 目标地址),到达 lvs 调度器以后,lvs 通过修改该报文的目标地址,来进行转发到后端 server,此时该报文为 CIP->RIP(通过 DIP 转发)。后端 realserver 在处理完请求之后再将处理完的报文发送到 lvs,此时报文为 RIP->CIP(因为此时 realserver 指定的出口网关为 DIP,所以即使该报文目标地址为 CIP,也会发送到 DIP 所在的 lvs 调度服务器上面)。lvs 调度器收到报文后将该报文改为 VIP->CIP,再发送给客户端,完成处理本次请求。
NAT 模式优缺点:
- NAT 技术将请求的报文和响应的报文都需要通过 LB 进行地址改写,因此网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,一般要求最多之能 10-20 台节点
- 只需要在 LB 上配置一个公网 IP 地址就可以了。
- 每台内部的节点服务器的网关地址必须是调度器 LB 的内网地址。
- NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
2.2 TUN 模式
virtual server via ip tunneling 模式:采用 NAT 模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过 IP 隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用 VS/TUN 模式后,集群系统的最大吞吐量可以提高 10 倍。
VS/TUN 的工作流程图如下所示,它和 NAT 模式不同的是,它在 LB 和 RS 之间的传输不用改写 IP 地址。而是把客户请求包封装在一个 IP tunnel 里面,然后发送给 RS 节点服务器,节点服务器接收到之后解开 IP tunnel 后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过 LB 服务器。
原理图过程简述:
- 客户请求数据包,目标地址 VIP 发送到 LB 上。
- LB 接收到客户请求包,进行 IP Tunnel 封装。即在原有的包头加上 IP Tunnel 的包头。然后发送出去。
- RS 节点服务器根据 IP Tunnel 包头信息(此时就又一种逻辑上的隐形隧道,只有 LB 和 RS 之间懂)收到请求包,然后解开 IP Tunnel 包头信息,得到客户的请求包并进行响应处理。
- 响应处理完毕之后,RS 服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源 IP 地址还是 VIP 地址。(RS 节点服务器需要在本地回环接口配置 VIP,后续会讲到)
2.3 DR 模式
DR 模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同 TUN 模式一样,DR 模式可以极大的提高集群系统的伸缩性。而且 DR 模式没有 IP 隧道的开销,对集群中的真实服务器也没有必要必须支持 IP 隧道协议的要求。但是要求调度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
DR 模式是互联网使用比较多的一种模式。
DR 模式原理图:
VS/DR 模式的工作流程图如上图所示,它的连接调度和管理与 NAT 和 TUN 中的一样,它的报文转发方法和前两种不同。DR 模式将报文直接路由给目标真实服务器。在 DR 模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标 IP 地址和目标端口,也不封装 IP 报文,而是将请求报文的数据帧的目标 MAC 地址改为真实服务器的 MAC 地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的 MAC 地址是真实服务器的 MAC 地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由 LB 发出的数据包。真实服务器接收到请求数据包的时候,解开 IP 包头查看到的目标 IP 是 VIP。*(此时只有自己的 IP 符合目标 IP 才会接收进来,所以我们需要在本地的回环借口上面配置 VIP。另:由于网络接口都会进行 ARP 广播响应,但集群的其他机器都有这个 VIP 的 lo 接口,都响应就会冲突。所以我们需要把真实服务器的 lo 接口的 ARP 响应关闭掉。)*然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源 IP 地址还是 VIP。
DR 模式小结:
- 通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。
- 请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)
- 因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面
- RS 主机需要绑定 VIP 地址在 LO 接口上,并且需要配置 ARP 抑制。
- RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。
- 由于 DR 模式的调度器仅做 MAC 地址的改写,所以调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。
lvs 调度算法
Lvs 的调度算法决定了如何在集群节点之间分布工作负荷。当 director 调度器收到来自客户端访问 VIP 的上的集群服务的入站请求时,director 调度器必须决定哪个集群节点应该处理请求。Director 调度器用的调度方法基本分为两类:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于