负载均衡LB》》LVS


LO 接口

LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用 的服务器集群,它具有良好可靠性、可扩展性和可操作性 ,从而以低廉的成本 实现最优的服务性能。目前LVS已经被集成到Linux内核 模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,

LVS工作模式分为NAT模式、TUN模式、以及DR模式。
LVS的IP负载均衡技术是通过IPVS模块 来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址**,用户必须通过这个虚拟的IP地址访问服务**。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。

当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR.

LVS 核心组件和专业术语

csharp 复制代码
# 核心组件
LVS  的  管理工具ipvsadm 和  内核模块  ipvs
ipvsadm :用户空间的命令行工具,用于管理集群服务及集群服务上的RS(Real Server 后端的真实服务器)等
ipvs: 工作于内核上的程序,可根据用户定义的集群实现请求转发

#  专业术语
VS:Virtual Server   虚拟服务
DR、DS:Director,Balancer   负载均衡器、分发器
RS:Real Server    后端请求处理的真实服务器
CIP:Client IP   用户端IP
#  负载均衡器 有两个IP  VIP,DIP
VIP:Director Virtual IP   负载均衡器虚拟IP
DIP: Director IP          负载均衡器IP
RIP: Real Server IP   后端请求处理真实服务器IP

LVS负载均衡器4种工作模式

LVS-NAT 》》网络地址转换模式

进站、出站的数据流程都经过DS(DR)负载均衡器(IP负载均衡,修改的是IP地址),利用网络层(三层)
LVS-DR 》》直接路由模式

只有进站的数据流程经过DS(DR)负载均衡器(数据链路层负载均衡,修改的是目的MAC地址),利用数据链路层(二层)
LVS-TUN 》》隧道模式

只有进站的数据流程经过DS(DR)负载均衡器
LVS-full-nat 》》双向转换模式

通过请求报文的源地址为DIP,目标为RIP来实现转发

对应响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发

资料

网络地址转换模式》》NAT模式

原理

DS(DR)负载均衡器把客户端发来的数据包的IP头的目标地址,在DS(DR)负载均衡器上换成其中一个RS的IP地址,并发至RS来处理,

RS处理完成后,

把数据交给经过DS(DR)负载均衡器,DS(DR)负载均衡器再把数据包的源IP改成自己的VIP

①源CIP------>目VIP (客户端向------DS(DR)负载均衡器 通信)

②目VIP------>改成RIP(DS(DR)负载均衡器中做转换)

(DS(DR)负载均衡器中做转换)------>RS 通信

③源RIP------>目DIP(RS------负载均衡器 通信)

④源RIP------>改成VIP(处理完成之后,DS(DR)负载均衡器中再转换)

(DS(DR)负载均衡器中做转换)------>客户端通信

优点

集群中的物理服务器(RS服务器),可以使用任何支持TCP/IP操作系统,只有(DS(DR)负载均衡器)需要一个合法的IP(VIP)地址
不足

扩展性有限,当服务器节点(普通PC服务器)增长过多时,(DS(DR)负载均衡器)将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过(DS(DR)负载均衡器)。当服务器节点过多时,大量的数据包都交会在(DS(DR)负载均衡器),速度就会变慢



直接路由模式》》DR 模式

直接路由模式则应该是工作在数据链路层上(二层)
arp协议

1、当用户请求到达Director Server (DS,负载均衡器),此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;

2、检查发现数据包的目标IP是本机,将数据包送至INPUT链;

3、IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;

4、由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输 。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;

5 、RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;

6、响应报文最终送达至客户端。

csharp 复制代码
# DR 原理
DS(DR)负载均衡器和RS都使用同一个IP(即VIP)对外服务,但只有DS(DR)负载均衡器对ARP请求进行响应,所有RS对本身这个IP(VIP)的ARP请求保持静默(就是不理它),也就是说,网关会把这个服务IP(VIP)的请求全部定向给DS(DR)负载均衡器,而DS(DR)负载均衡器收到数据包后根据调度算法(当然前提IPVS会判断是否是集群,只有集群才会用到调度算法了)。找出对应的RS,
把, 源MAC(即CIP的MAC)------------>改成DIP的MAC, 
    目的MAC(即VIP的MAC)------------>改为RS的RIP的MAC,
 并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP(VIP)是一致,可以直接将数据返给客户端,则等于直接从客户端接收到这个数据包无异,处理后直接返回给客户端。
**优点:**
   与TUN模式(隧道模式)一样,DS(DR)负载均衡器也只是分发请求,应答包通过单独的路由方法返回客户端,与TUN相比,DR模式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器
**不足:**
   要求DS(DR)负载均衡器的网卡必须与物理网卡在一个网段上(DS(DR)负载均衡器到RS 是通过MAC地址通信的)。
# DR模式的特点
1、DS(DR)和所有RS 都要配置 VIP 
2、RS的RIP 可以使用私有IP,也可以共有IP,RIP、DIP要在同一网段(因为需要通过MAC通信)
3、RIP的网关不能指向DIP,以确保响应报文不会通过DS(DR)负载均衡器,减少流量。
4、RS和DS(DR)负载均衡器要在同一个物理网络
5、请求报文经过DS(DR)负载均衡器,但响应报文不经过DS(DR)负载均衡器,而由RS直接发往请求方(client端)

TUN 隧道模式










csharp 复制代码
# CentOS 路径
/usr/share/nginx/html
# Ubuntu 路径
/var/www/html/index.nginx-debian.html 
echo "RS-104">> /usr/share/nginx/html/index.html 

#  DS 配置
安装  ipvsadm工具
ip addr  add dev ens33 172.30.164.181/32
systemctl start ipvsadm
ipvsadm -A -t 172.30.164.181:80 -s rr
ipvsadm -a -t 172.30.164.181:80 -r 172.30.164.139 -g
ipvsadm -a -t 172.30.164.181:80 -r 172.30.164.66 -g
mkdir -p /etc/sysconfig

ipvsadm -S > /etc/sysconfig/ipvsadm

ipvsadm -ln

# RS配置
ip addr  add dev lo 172.30.164.181/32  #  VIP 
# 忽略ARP
# 临时关闭 忽略ARP广播,ARP静默,保证用户在访问VIP的时候能够访问到DR(DS)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  
# 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# 匹配精确IP地址回包,RS直接将数据返给Client端
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# 匹配精确IP地址回包,RS直接将数据返给Client端
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# 永久关闭
/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.arp_ignore=1



csharp 复制代码
# RS在LO接口配置了VIP,这个同一个网段中就拥有多个VIP(RS中每个都配置VIP,DS也配置VIP)
# 客户端在网关发送arp广播需找VIP时,需要RS集群中不接受这个ARP请求,即要关闭ARP响应,ARP静默
# arp_ignore 设置1,意味着当别人的ARP请求过来的时候,如果接受的设备没有这个IP,就不做出响应(这个ip在lo接口,lo不说接受设备的进口)
 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  
 使用最好的ip来回应,同一个网段内子网掩码最长的
echo 2> /proc/sys/net/ipv4/conf/all/arp_announce
相关推荐
weixin_307779135 小时前
Clickhouse统计指定表中各字段的空值、空字符串或零值比例
运维·数据仓库·clickhouse
bubiyoushang8885 小时前
Windows11 WSL2 Ubuntu编译安装perf工具
linux·运维·ubuntu
xuanwojiuxin6 小时前
linux panic-propagation
linux·运维·服务器
藥瓿亭8 小时前
K8S认证|CKS题库+答案| 9. 网络策略 NetworkPolicy
linux·运维·docker·云原生·容器·kubernetes·cks
liuzhenghua669 小时前
Python任务调度模型
java·运维·python
黎相思9 小时前
应用层自定义协议与序列化
运维·服务器·网络
测试开发Kevin9 小时前
详解Jenkins Pipeline 中git 命令的使用方法
运维·jenkins
什么半岛铁盒10 小时前
Linux线程与进程关系及底层实现
java·linux·运维
langmeng11010 小时前
使用docker在3台服务器上搭建基于版本redis 6.x的一主两从模式
运维·redis·docker·容器·集群
jllllyuz10 小时前
如何为服务器生成TLS证书
运维·服务器·数据库