当前位置: 首页 > news >正文

LVS三种模式实战

IPVS基本上是一种高效的Layer-4交换机,它提供负载平衡的功能。当一个TCP连接的初始SYN报文到达时,IPVS就选择一台服务器,将报文转发给它。此后通过查看报文的IP和TCP报文头地址,保证此连接的后继报文被转发到相同的服务器。这样,IPVS不用检查到请求的内容再选择服务器,这就要求后端的服务器组是提供相同的服务,不管请求被送到哪一台服务器,返回结果都应该是一样的。但是在有一些应用中后端的服务器可能功能不一,有的是提供HTML文档的Web服务器,有的是提供图片的Web服务器,有的是提供CGI的Web服务器。这时,就需要基于内容请求分发 (Content-Based Request Distribution),同时基于内容请求分发可以提高后端服务器上访问的局部性。

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

LVS的本身分成了两个部分,第一部分是工作在内核空间的一个IPVS的模块(工作在Netfilter框架的input链上),其实LVS的功能都是IPVS模块实现的,第二部分是工作在用户空间的一个用来定义集群服务的一个工具ipvsadm, 这个工具的主要作用是将管理员定义的集群服务列表传送给工作在内核空间中的IPVS模块。

重要命令介绍

ipvsadm常用指令

选项作用
-A添加虚拟服务节点
-D删除虚拟服务节点
-L查看虚拟服务节点列表
-n以数字形式显示查看内容
-a添加真实服务节点
-d删除真实服务节点
-l查看真实服务节点列表
-t指定虚拟服务器IP地址
-s指定调度算法
-r指定真实服务器节点IP地址
-w指定权重值
-g直接路由模式(默认)
-mNAT模式
-i隧道模式

NAT模式

工作原理

  • 当用户的请求到达调度器时,请求报文会先到内核空间的PREROUTING链上。此时报文的源IP为CIP,目标IP为VIP
  • PREROUTING检查发现数据包的目标IP是本机,就将数据包送至INPUT链。
  • IPVS工作在INPUT链上,当数据包抵达INPUT链后,IPVS会检查数据包所请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器RIP,然后将数据包送往 POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP。
  • POSTROUTING链通过选路,将数据包转发给Real Server
  • Real Server对比发现目标IP是自己,就会接受这个请求报文,开始构建响应报文发回给调度器。源IP为RIP,目标IP为CIP
  • 调度器在响应客户端前,会将报文的源IP地址修改为自己的VIP,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP

LVS调度器(DS)配置

# 安装对应模块
yum -y install ipvsadm nginx  tcpdump# 开启路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p# 加载ip_vs模块
modprobe ip_vs
lsmod | grep ip_vs# 启动ipvsadm服务,创建文件必须先创建
touch /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm# 配置分配策略
ipvsadm -A -t 192.168.100.100:80 -s rr
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.1:80 -m
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.1:80 -mipvsadm-save > /etc/sysconfig/ipvsadm

真实服务器(RS)端配置

yum -y install epel-release nginx tcpdumpsystemctl start nginx# 配置指定IP 192.168.100.1  192.168.100.2 ,且将网关指定为 192.168.100.100# 192.168.100.1
echo web1 > /usr/share/nginx/html/index.html
# 192.168.100.2
echo web2 > /usr/share/nginx/html/index.html

DR模式

工作原理

  • 当客户端用户发送请求给网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过 LVS 负载均衡服务器
  • 这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。
  • 数据包到达网卡后,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。
  • 数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务。
  • 如是定义过的 VIP 服务,会根据配置的服务信息,从 RealServer 中选择一个后端服务器 RS1,然后 RS1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 INET_HOOK 到 OUTPUT 链中。
  • 数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 RealServer 服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 与 RS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 RealServer 服务器。
  • 数据包到达 RealServer 服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。
  • 此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 RS1 的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 RS 相连的路由器转发给客户端。

DS配置

# 删除NAT模式的路由功能即net.ipv4.ip_forward = 1
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.default.send_redirects= 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p# 配置VIP
ifcfg ens33:0 192.168.100.101# ipvsadm 安装同NAT模式# 配置分配策略
ipvsadm -A -t 192.168.100.101:80 -s rr
ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.1:80 -g
ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.2:80 -gipvsadm-save > /etc/sysconfig/ipvsadm

RS配置

# 启用nginx同NAT模式,省略# 配置抑制ARP防止VIP在同一网段产生IP地址冲突
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1 
net.ipv4.conf.all.arp_announce=2 
net.ipv4.conf.default.arp_ignore=1 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce=2# 为两台RS配置临时虚拟ip并添加路由
ifconfig lo:0 192.168.100.101/32
route add -host 192.168.115.101/32 dev lo:0 # 将访问交由本机处理后返回

TUNL模式

DS配置

# 安装ipvsadm 同NAT模式ipvsadm -C# 启用ipip模块 使用隧道网卡配置VIP
modprobe ipip
ip addr add 192.168.100.102/24 dev tunl0
ip link set up tunl0
ip route del 192.168.100.0/24 dev tunl0#删除tunl0路由# 启用路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p# 配置调度策略
ipvsadm -A -t 192.168.100.102:80 -s rr
ipvsadm -a -t 192.168.100.102:80 -r 192.168.100.1:80 -i
ipvsadm -a -t 192.168.100.102:80 -r 192.168.100.2:80 -i
ipvsadm-save > /etc/sysconfig/ipvsadm

RS配置

# 启用nginx同NAT模式,省略# 启用ipip模块 使用隧道网卡配置VIP
modprobe ipip
ip addr add 192.168.100.102/24 dev tunl0
ip link set up tunl0
ip route del 192.168.100.0/24 dev tunl0#删除tunl0路由vim /etc/sysctl.conf
# 启用路由功能
net.ipv4.ip_forward = 1
# 配置本地ipv4策略,防止VIP冲突
net.ipv4.conf.all.arp_ignore=1 
net.ipv4.conf.all.arp_announce=2 
net.ipv4.conf.default.arp_ignore=1 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce=2
# 配置本地ipv4策略,防止访问丢包
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter=0sysctl -p

文章转载自:
http://bhl.wjrtg.cn
http://agrologic.wjrtg.cn
http://cheat.wjrtg.cn
http://automania.wjrtg.cn
http://apiarian.wjrtg.cn
http://chromatics.wjrtg.cn
http://breechcloth.wjrtg.cn
http://axiologist.wjrtg.cn
http://callithumpian.wjrtg.cn
http://astrolatry.wjrtg.cn
http://azotic.wjrtg.cn
http://bushfighter.wjrtg.cn
http://appetitive.wjrtg.cn
http://bacilli.wjrtg.cn
http://abstractly.wjrtg.cn
http://bernadine.wjrtg.cn
http://abwehr.wjrtg.cn
http://bankruptcy.wjrtg.cn
http://booboisie.wjrtg.cn
http://bipedal.wjrtg.cn
http://cartful.wjrtg.cn
http://chirogymnast.wjrtg.cn
http://appreciative.wjrtg.cn
http://catholicise.wjrtg.cn
http://airmobile.wjrtg.cn
http://atm.wjrtg.cn
http://babette.wjrtg.cn
http://bombastic.wjrtg.cn
http://beerengine.wjrtg.cn
http://antiracism.wjrtg.cn
http://www.dtcms.com/a/280721.html

相关文章:

  • Unity沉浸式/360View/全景渲染
  • 新手向:Python数据处理Excel报表自动化生成与分析
  • Zookeeper入门安装与使用详解
  • Java行为型模式---迭代器模式
  • Linux、Ubuntu和CentOS的关系与区别
  • 设计模式笔记_结构型_适配器模式
  • 3.正则化——新闻分类
  • 生产问题排查-数据库连接池耗尽
  • 牛客:HJ23 删除字符串中出现次数最少的字符[华为机考][字符串]
  • Linux 环境下安装 Node.js v16.13.0 完整指南
  • MongoDB 数据库 启用访问控制
  • Volta现代化的 Node.js 版本管理工具
  • CSRF 攻击原理与实验测试(附可运行测试案例)
  • NineData 社区版 V4.3.0 正式发布!新增 5 条迁移对比链路,全面支持 MariaDB、GaussDB 等数据库
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的酒店预订管理系统,推荐!
  • Gitlab跑CICD的时候,maven镜像和pom.xml使用的maven版本冲突导致没办法build成功的解决方法
  • [附源码+数据库+毕业论文+开题报告]基于Spring+MyBatis+MySQL+Maven+jsp实现的车辆运输管理系统,推荐!
  • 2025-7-15-C++ 学习 排序(4)
  • langchain教程10:LCEL
  • 【c++】c++11新特性(右值引用和移动语义)
  • PySpark 常用算子详解
  • 【BUG处理】构建APK时遇到错误:‘flutter‘ 命令未被识别。这通常表示您的系统中未安装Flutter SDK或环境变量配置不正确。
  • 牛客:HJ20 密码验证合格程序[华为机考][字符串]
  • 【源力觉醒 创作者计划】文心4.5 vs DeepSeek vs Qwen 3.0:三大能力硬核实测!谁才是王者?
  • 纸板加工制造学习1
  • CF37E Trial for Chief 题解
  • 青年科学基金项目答辩PPT模板 | 杰青优青ppt设计制作美化 | WordinPPT
  • uni-app 学习笔记:Vuex 持久化数据
  • 【C++】神奇的AVL树
  • Java单元测试JUnit