LVS负载均衡策略

thinkingme2022年12月13日大约 6 分钟

LVS负载均衡策略

前置知识

先看看网络那篇了解大概的网络知识。

进阶知识

linux路由配置

假设我们有上图网络配置的两台linux虚拟机,正常网工应该会在路由器中配置各个网络。这里为了起到学习的目的,我们可以用linux的路由表来模拟。

首先我们在13机子上面创建一个新的网卡

ifconfig eth0:3 192.168.88.88/24

此时13的路由条目如下图:

如果想要14机子能访问到这块网卡(ping 192.168.88.88)

要在14机子上配置一下路由

route add -host 192.168.88.88 gw 192.168.150.13

意思就是把192.168.150.13这台linux当成了路由器。把去往88.88ip的数据包发给13,而13路由表中有关于88.88ip的配置,这样就实现了通信。

概述

一、NAT模式(VS-NAT)

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器(即修改来去的目标IP和MAC地址)

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

据研究表明,客户端发送的数据包往往比服务器返回数据量小很多,所以出现了如下的负载模式,只对接受的数据进行负载,返回的数据包直接返回。这样变相增加了负载服务器的带宽。

二、直接路由模式(VS-DR)

原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

三、IP隧道模式(VS-TUN)

原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

实验

整体结构

实验步骤

node01:

ifconfig eht0:8 192.168.150.100/24

node 02~03 配置arp协议:

  • 修改内核
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce#配置为2不允许通告
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • 设置隐藏的vip
ifconfig lo:3 192.168.150.100 netmask 255.255.255.255
  • node02~03开启服务
yum install httpd -y
service httpd start
vi /var/www/html/index.html #修改html页面的显示内容以区分负载到了哪台服务器
  • LVS服务配置

node01:

yum install ipvsadm  #下载lvs
ipvsadm -A -t 192.168.150.100:80 -s rr #配置
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w 1#配置负载到node01
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w 1
  • 验证

浏览器访问192.168.150.100 看到负载

node01:

netstat -natp #看不到建立了tcp连接
ipvsadm -lnc #查看连接记录

node02~node03:

netstat -natp #看到建立了tcp连接

利用keepalive保证高可用