负载均衡三种模式(linux负载均衡lvs原理详细讲解 什么是lvs负载均衡技术)

本文目录
linux负载均衡lvs原理详细讲解 什么是lvs负载均衡技术
LVS共有三种模式,优缺点比较如下:
NAT模式
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
TUN模式
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
DR模式
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上
attackoccurred攻击源负载均衡地址
智汇华云 | 负载均衡源地址可见技术
2022-12-13 14:13之家网站 (-)
摘要
在非网关型负载均衡器中,通常使用 FullNat 模式。在这种模式下,客户端访问后端服务器的源 IP 在负载均衡器上会被改变,导致在后端服务器上服务不能正确确定客户端的真实 IP 地址。在一些应用场景下,为了实现安全或者大数据分析等应用,需要感知客户端的真实 IP。本文介绍了一种 FullNat 模式下负载均衡的源地址可见方法。
概述
负载均衡有三种模式:DR,NAT,Tunnel。FullNat 模式在 NAT 模式下增加了源 IP NAT。FullNat 模式的优点:解决了 NAT 对 Director 和 RS 要求在同一个 vlan 的问题,适用更复杂的部署形式不要求配置 Director 作为网关,Director 与 RS 可以通过三层通讯。缺点:RS 看不到客户端真实 IP。
为了解决后端服务器感知客户端真实 IP,本文介绍了如下的方法。
四层源地址可见
四层流量通常是 TCP 和 UDP 协议报文。源地址可见的通常方法是在报文中某些字段携带客户端的真实 IP。在后端通过内核模块来获取客户端 IP。
TCP 源地址可见
TCP 流量是 TOA 来实现源地址可见。TOA 名字全称是 tcp option address,是 FullNat 模式下能够让后端服务器获取客户端 IP 的一种实现方式,它的基本原理比较简单。
客户端用户请求数据包到达负载均衡器时,负载均衡器在数据包的 tcp option 中插入源 IP 信息。
数据包到达后端服务器(装有 toa 内核模块)后,应用程序正常调用 getpeername 系统函数来获取连接的源端 IP 地址。
由于在 toa 代码中 hook(修改)了 inet_getname 函数(getpeername 系统调用对应的内核处理函数),该函数会从 tcp option 中获取负载均衡器填充的源 IP 信息。
这样后端服务器应用程序就获取到了真实客户端 IP,而且对应用程序来说是透明的。
TCP 头部格式如下:
在 option 选项部分携带客户端的 IP 地址。
IPv4 TOA 格式
opcode: opcode = 254
opsize: toa 大小 8 字节
port: 客户端端口
clientIP: 客户端 IP(4 字节)
注:opsize 大小包含了自身 opsize (2B) + port (2B) + ip (4B)
修改 option 的时机
负载均衡器需要对每个 tcp 数据包都要插入 toa 信息么?如果这样会影响到负载均衡器整体性能的,而且后端服务器也没必要对每个 tcp 数据包进行解析,当然也很影响服务器性能。其实只需要在第 3 次握手 ack 数据包中插入 toa 选项即可,后端服务器从 ack 数据包中解析并获取即可。
后端服务器上获取客户端 IP 获取。
TCP 协议栈中处理三次握手的 ack 数据包的函数是 tcp_v4_syn_recv_sock,完成连接的建立,并创建 newsock。在 TOA 内核模块中修改
1.hook tcp_v4_syn_recv_sock_toa 函数,从 TCP 的 skb 中获取 tcp option 的携带的 IP 信息,保存到 socket 中
2. Hook inet_getname,应用程序在调用 getpeername 时,会使用 inet_getname_toa 函数处理,从 socket 中将保存的 ip 信息返回

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10




