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://www.tpcf.cn/web/89034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIA第二次综合实验:OSPF

HCIA第二次综合实验:OSPF一、实验拓扑二、实验需求 1、R1-R3为区域0,R3-R4为区域1;其中R3在环回地址在区域1; 2、R1、R2各有一个环回口; 3、R1-R3中,R3为DR设备,没有BDR; 4、R4环回地…

深入解析环境变量:从基础概念到系统级应用

目录 一、基本概念及其核心作用 1、基本概念 2、核心作用 二、常见环境变量 三、查看环境变量方法 四、测试PATH 1、对比执行:./project和直接执行project的区别 2、思考:为何某些命令可直接执行而无需路径,但我们的二进制程序却需要…

Spring Boot:DTO 字段 cPlanId 无法反序列化的奇葩问题

本文记录一次在 Spring Boot 项目中,DTO 字段明明有值,反序列化后却是 null 的问题。最终发现并不是常见的 JSON 工具库 Bug,而是隐藏在 setter 命名大小写规则中的坑。💻 背景介绍技术栈如下:Spring Boot:…

文本生成视频的主要开源模型

AI文本到视频生成技术发展迅速,这些模型的“快速”通常指相对于传统视频制作的效率(生成时间从几秒到几分钟,取决于硬件),但实际速度取决于您的计算资源(如GPU)。这些模型大多依赖于深度学习框架…

vscode里面怎么配置ssh步骤

01.ubuntu里面下载几个插件还需要下载插件net-tools02.vscode里面下载插件会生成下面类似电视机的插件(room6)

【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)

文章目录激活函数一、激活函数的分类1. 按“是否线性”分类2. 按“是否饱和”分类(针对非线性激活函数)3. 按“适用层”分类二、常见激活函数及特点(一)非线性激活函数(主要用于隐藏层)1. 饱和激活函数&…

代数——第4章——线性算子(算符)(Michael Artin)

第 4 章 线性算子(Linear Operators) That confusions of thought and errors of reasoning still darken the beginnings of Algebra, is the earnest and just complaint of sober and thoughtful men. (思维混乱和推理错误 仍然使代数的开端变得模糊不清, …

Neo4j Python 驱动库完整教程(带输入输出示例)

Neo4j Python 驱动库完整教程(带输入输出示例) 1. 基础连接示例 输入代码 from neo4j import GraphDatabase# 连接配置 URI "bolt://localhost:7687" USER "neo4j" PASSWORD "password123" # 替换为你的实际密码def t…

Axios 和 Promise 区别对比

Axios 和 Promise 是前端开发中两个不同的概念,尽管 Axios 基于 Promise 实现,但它们的核心定位和功能有显著区别。以下是对比分析: 1. 核心定位与功能Promise 定义:Promise 是 JavaScript 的异步编程方案,用于处理异步…

Git分支管理与工作流详解

前言 分支管理是Git最强大的功能之一,它允许开发者在不影响主代码库的情况下创建独立的工作空间。本文将详细介绍Git分支的操作和常见工作流策略,帮助团队更高效地协作开发。 1. Git分支的基本概念 1.1 什么是分支 在Git中,分支本质上是指…

【flutter】flutter网易云信令 + im + 声网rtm从0实现通话视频文字聊天的踩坑

接了一个国外的项目,项目采用网易云im 网易云信令声网rtm遇到的一些问题这个项目只对接口,给的工期是两周,延了工期,问题还是比较多的 需要全局监听rtm信息,收到监听内容,引起视频通话网易云给的文档太烂,所有的类型推策只能文档一点点推声网的rtm配置网易云的信令,坑太多,比如…

hive/spark sql中unix_timestamp 函数的坑以及时间戳相关的转换

我用的是hive版本是3.1.3,spark版本是3.3.1,它们的unix_timestamp 函数在同样的语句下转换出来的时间戳是完全不同的,如下试验所示1.unix_timestamp 函数的坑上图试验中我同样的计算 2025-07-11 10:00:00 时间点对应的时间戳,但是…

MyBatis专栏介绍

专栏导读 在当今的软件开发领域,持久层框架的选择对于提高开发效率和数据处理能力至关重要。MyBatis作为一个半自动化的ORM框架,因其灵活、高效的特点,在众多开发者中广受好评。本专栏《MyBatis实战》旨在通过深入浅出的方式,帮助…

HarmonyOS从入门到精通:自定义组件开发指南(七):自定义事件与回调

HarmonyOS从入门到精通:自定义组件开发指南(七):自定义事件与回调 在HarmonyOS应用开发中,组件化架构是构建复杂界面的基础,而组件间的高效通信则是实现业务逻辑的核心。自定义事件与回调机制作为组件交互的…

C++编程学习(第七天)

基于过程的程序设计C既可以用来进行基于过程的程序设计,又可以用来进行面向对象的程序设计。基于过程的程序设计又称为过程化的程序设计,它的特点是:程序必须告诉计算机应当具体怎么做,也就是要给出计算机全部操作的具体过程&…

ubuntu透网方案

场景:两个linux/Ubuntu系统,一个可以上网,一个不能,让不能上网的,让能上网的共享网络 步骤 1:修改 /etc/sysctl.conf sudo nano /etc/sysctl.conf 找到或添加以下行: net.ipv4.ip_forward1 按 CtrlO 保存&a…

基于Python的物联网岗位爬取与可视化系统的设计与实现【海量数据、全网岗位可换】

文章目录有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍数据采集数据预处理系统展示总结每文一语有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 随着物联网技术的迅速发展,物联网行业…

线性回归原理推导与应用(十):逻辑回归多分类实战

本篇文章将利用sklearn中内置的鸢尾花数据进行逻辑回归建模并对鸢尾花进行分类。对于逻辑回归和线性回归的相关原理,可以查看之前的文章 数据导入 鸢尾花数据是机器学习里的常用数据,首先导入一些基础库并从sklearn中导入数据集 #导入用到的一些pytho…

Docker 部署emberstack/sftp 镜像

Docker 部署 emberstack/sftp 镜像 1、找到国内可用的docker源,本次测试使用docker.1ms.run 2、下载emberstack/sftp镜像docker pull docker.1ms.run/emberstack/sftp3、安装并启动emberstack/sftp镜像docker run -d -p 22:22 --name SFTP -v D:\SFTP:/home/sftpuser/sftp --pr…

【华为OD】MVP争夺战2(C++、Java、Python)

文章目录题目题目描述输入描述输出描述示例思路核心思路:关键观察:算法步骤:排序策略:特殊情况处理:代码CJavaPython复杂度分析时间复杂度空间复杂度结果总结题目 题目描述 给定一个整型数组,请从该数组中…