lvs概念讲解

xiaoxiao2021-03-01  25

一,LVS的简介:

Linux virtual system,是由目前阿里著名工程师章文嵩开发的一宽开源的软件。LVS工作在一台server上提供Directory(负载均衡器)的功能,它本身并不提供任何服务,只是把特定的请求转发给对应的realserver(后端真正的服务主机),通过对后端服务器的调度完成集群环境中的负载均衡。 LVS的核心组件为iipvs,工作在kernel中,是真正的用于实现根据调度策略把客户端的请求转发到RS。另一组件为ipvsadm,工作在用户空间,用于让用户定义ipvs规则的工具。所以我们只需要在server上安装ipvsadm就可以定义ipvs规则,并且在linux kernel的2.6版本以后是直接支持ipvs的,不需要编译内核

二,lvs的四种模式:

1,lvs的DR模式:

工作原理结构: 工作原理: **负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提 高整个集群系统的吞吐量。跟 VS/TUN 相比,这种方法没有 IP 隧道的开销,但调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的 HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为VIP 的网络请求。** 实例场景设备清单: 说明:我这里为了方便,client 是与 vip 同一网段的机器。如果是外部的用户访问,将 client 替换成gateway 即可,因为 IP 包头是不变的,变的只是源 mac 地址。 1 client 向目标 vip 发出请求,Director 接收。此时 IP 包头及数据帧头信息如下: 2 VS 根据负载均衡算法选择一台 active 的 realserver(假设是 192.168.57.122),将此 RIP 所在网卡的 mac 地址作为目标 mac 地址,发送到局域网里。此时 IP 包头及数据帧头信息如下: 3 realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标 IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时 IP 包头及数据帧头信息如下: 4 如果 client 与 VS 同一网段,那么 client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过 gateway/路由器经由 Internet 返回给用户

关于DR模式常见的问题: 1. LVS/DR 如何处理请求报文的,会修改 IP 包内容吗? vs/dr 本身不会关心 IP 层以上的信息,即使是端口号也是 tcp/ip 协议栈去判断是否正确,vs/dr 本身主要做这么几个事: 1)接收 client 的请求,根据你设定的负载均衡算法选取一台 realserver 的 ip; 2)以选取的这个 ip 对应的 mac 地址作为目标 mac,然后重新将 IP 包封装成帧转发给这台 RS; 3)在 hashtable 中记录连接信息。 vs/dr 做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。 数据包、数据帧的大致流向是这样的:client –> VS –> RS –> client . 2. RealServer 为什么要在 lo 接口上配置 VIP,在出口网卡上配置 VIP 可以吗? 既然要让 RS 能够处理目标地址为 vip 的 IP 包,首先必须要让 RS 能接收到这个包。 在 lo 上配置 vip 能够完成接收包并将结果返回 client。 答案是不可以将 VIP 设置在出口网卡上,否则会响应客户端的 arp request,造成 client/gateway arp table 紊乱,以至于整个 loadbalance 都不能正常工作。

LVS/DR loadbalancer(director)与 RS 为什么要在同一网段中? 从第一个问题中大家应该明白 vs/dr 是如何将请求转发给 RS 的了吧?它是在数据链路层来实现的,所以 director 必须和 RS 在同一网段里面。

为什么 director 上 eth0 接口除了 VIP 另外还要配一个 ip(即 DIP)? 如果是用了 keepalived 等工具做 HA 或者 LoadBalance,则在健康检查时需要用到 DIP 没有健康检查机制的 HA 或者 Load Balance 则没有存在的实际意义.

LVS/DRip_forward 需要开启吗? 不需要。因为 director 跟 realserver 是同一个网段,无需开启转发。

2.LVS的隧道模式(LVS-TUN):

IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。移动IPv4主要有三种隧道技术,它们分别是:IP in IP(ipip)、最小封装(gre)以及通用路由封装(sit)。这三种隧道技术都需要内核模块 tunnel4.ko 的支持。

ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。 GRE 需要内核模块 ip_gre.ko ,GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。 sit 他的作用是连接 ipv4 与 ipv6 的网络。个人感觉不如gre使用广泛 。 123

为创建隧道,隧道的客户机和服务器双方必须使用相同的隧道协议。隧道技术可分别以第2层或第3层隧道协议为基 础。第2层隧道协议对应于OSI模型的数据链路层,使用帧作为数据交换单位。PPTP(点对点隧道协议)、L2TP(第二层隧道协议)和L2F(第2层转 发协议)都属于第2层隧道协议,是将用户数据封装在点对点协议(PPP)帧中通过互联网发送。第3层隧道协议对应于OSI模型的网络层,使用包作为数据交 换单位。IPIP(IP over IP)以及IPSec隧道模式属于第3层隧道协议,是将IP包封装在附加的IP包头中,通过IP网络传送。无论哪种隧道协议都是由传输的载体、不同的封装格式以及用户数据包组成的。它们的本质区别在于,用户的数据包是被封装在哪种数据包中在隧道中传输。

VS-TUN原理结构图: 原理: VS/TUN 技术对服务器有要求,即所有的服务器**必须支持 “ IP Tunneling” 或者 “ IP Encapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有 100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈**,可以 用来构建高性能的超级服务器。

3,LVS/NAT模式:

首先client 发送请求[package] 给VIP;VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver;realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP;LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client。 NAT 模式 package in 和package out 都需要经过VS ;因此VS 的可能会成为一个系统瓶颈问题。

4.fullnat模式:

fullnat模式和nat模式的区别在于,fullnat需要做四次ip地址转换,客户端(cip)发的请求先到达vip,做一次DNAT,将 dip改编为lip,lip到rip,又一次SNAT,这是数据包传到RS,同样,RS将数据返回给client也需要两次ip地址转换。所以LVS负载 均衡器和真实主机可以不在同一个vlan中, 而且真实主机只需要接入内网。 看完上图后发现 FULLNAT有一个问题是:RealServer无法获得用户IP;淘宝通过叫TOA的方式解决的, 主要原理是:将client address放到了TCP Option里面带给后端RealServer,RealServer收到后保存在socket 的结构体里并通过toa内核模块hook了getname函数,这样当用户调用getname获取远端地址时,返回的是保 存在socket的TCPOption的IP. 百度的BVS是通过叫ttm模块实现的,其实现方式跟toa基本一样,只是没有开源.

转载请注明原文地址: https://www.6miu.com/read-3450316.html

最新回复(0)