LVS的 NAT 模式实验
文章目录
目录
文章目录
概要
IP规划与题目分析
实验步骤
一、nginx配置(rs1、rs2、rs3)
二、LVS配置
三、客户端配置
四、防火墙和selinux配置
实验结果
痛点解答
概要
LVS/NAT
lvs/nat网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址)--利用三层功能
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
IP规划与题目分析
| 主机 | 角色 | 系统 | 网络 | IP |
| client | 客户端 | redhat 9.5 | 仅主机 | 172.25.250.129/24 |
| lvs | lvs | rocky | NAT/仅主机 | 172.25.250.131/24 DIP 172.35.100.200/24 VIP |
| rs1 | nginx | rocky | NAT | 172.25.250.129/24 |
| rs2 | nginx | rocky | NAT | 172.25.250.128/24 |
| rs3 | nginx | rocky | NAT | 172.25.250.127/24 |
RS:Real Server #后端请求处理服务器
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #后端请求处理服务器IP
实验步骤
修改ip和主机名就不展示了,可以看我前面的文章
一、nginx配置(rs1、rs2、rs3)
首先下载nginx,防止等下修改网关后无法连接外网
[root@rs1 ~]# yum install nginx -y
[root@rs2 ~]# yum install nginx -y
[root@rs3 ~]# yum install nginx -y
第二步启动nginx并进行配置(写入的内容为本机的ip地址,也可自行更改)
systemctl start nginx
echo $(hostname -I) > /usr/share/nginx/html/index.html
第三步重启并检验
systemctl restart nginx
curl 本机IP
第四步修改网关 (一定要修改,不然最后客户端拒绝)
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.127/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.128/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.129/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes
二、LVS配置
首先由于lvs上有仅主机的网卡,所以我们先添加一块网卡。进入虚拟机设置点击添加,添加后选择仅主机(注意,由于新添加的网卡分配ip的方式是dhcp,若虚拟机在添加网卡之后没有分配ip地址,请启动dhcp,或者后面直接更改,没有仅主机网络先在虚拟机网络中添加)

第二步下载ipvsadm(先确保虚拟机联网,可以看我前面的文章)
yum install ipvsadm -y
第三步查看网卡配置并修改(如果NAME不一样则修改)
[root@lvs ~]# nmcli c modify 'Wired connection 1' connection.id ens224
[root@lvs ~]# nmcli c show
NAME UUID TYPE DEVICE
ens160 448cc681-b549-35ff-979a-2b57220d864c ethernet ens160
ens224 9cdf1af9-86ab-3318-a810-680d4bee4027 ethernet ens224
lo 9f4232f5-ae88-49d5-8402-a30098bb5317 loopback lo
第四步修改网关(172.35.100为仅主机网段,172.25.250为NAT网段)
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.131/24 ipv4.gateway 172.25.250.9 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.35.100.200/24 ipv4.gateway 172.35.100.2 ipv4.dns 223.5.5.5 connection.autoconnect yes nmcli c up ens160
nmcli c up ens224
修改后如图
第五步配置IPVSADM
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]# ipvsadm -A -t 172.35.100.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.127 -m -w 2
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.128 -m -w 2
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.129 -m -w 2
[root@lvs ~]# systemctl restart ipvsadm
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
tip:使用ipvsadm -Ln可以查看规则匹配

结果如图
三、客户端配置
客户端只需要修改ip和网关
[root@localhost ~]# hostnamectl hostname client
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.35.100.129/24 ipv4.gateway 172.35.100.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160
[root@client ~]# nmcli d show ens160
四、防火墙和selinux配置
在每台主机上都要进行
[root@lvs ~]# setenforce 0
[root@lvs ~]# systemctl stop firewalld.service
实验结果
在客户端上curl 172.25.100.200出现不同的结果

痛点解答
1.若在客户端上curl时出现连接超时,请检查您的lvs的NAT的网卡的IP地址是否为nginx服务器的网关。
2.若配置与步骤都没有问题,在客户端出现拒绝连接,请重启您的虚拟机。
3.若添加网卡后没有出现ip地址请检查虚拟机网络的仅主机网络,或者虚拟机是否为动态路由。
4.请下载服务之前不要修改网关,这回导致虚拟机丢失网络。
5.若虚拟机没有网络可以查看我之前的博客。
6.请将NAT与仅主机网段区分清楚,NAT的网关须在虚拟机网络配置查看,文中172.25.250.2的网关是我自己的,nginx三台服务器的网关一定要与NAT的ip地址一致。
最后感谢阅览,谢谢您顺手三连,有问题可以留言

相关文章:
LVS的 NAT 模式实验
文章目录 目录 文章目录 概要 IP规划与题目分析 实验步骤 一、nginx配置(rs1、rs2、rs3) 二、LVS配置 三、客户端配置 四、防火墙和selinux配置 实验结果 痛点解答 概要 LVS/NAT lvs/nat网络地址转换模式,进站/出站的数据流量经过分发器(IP负…...
【MacOS】2025年硬核方法清理MacOS中的可清除空间(Purgeable space)
背景 MacOS使用一段时间之后,硬盘空间会越来越少,但自己的文件没有存储那么多,在储存空间中可以发现可用空间明明还剩很多,但磁盘工具却显示已满,见下图。 尝试解决 df -h 命令却发现磁盘已经被快被占满。使用du命…...
ue材质学习感想总结笔记
2025 - 3 - 27 1.1 加法 对TexCoord上的每一个像素加上一个值,如果加上0.1,0.1, 那么左上角原来0,0的位置变成了0.1,0.1 右上角就变成了1.1,1.1,那么原来0,0的位置就去到了左上角左上边,所以图像往左上偏移。 总而言…...
Go 语言 sync 包使用教程
Go 语言 sync 包使用教程 Go 语言的 sync 包提供了基本的同步原语,用于在并发编程中协调 goroutine 之间的操作。 1. 互斥锁 (Mutex) 互斥锁用于保护共享资源,确保同一时间只有一个 goroutine 可以访问。 特点: 最基本的同步原语&#x…...
约束文件SDC常用命令
约束文件SDC常用命令 定义时钟create_clock -name CLK-period 2 [get_ports_clk]告诉工具主时钟周期是2ns(频率500MHz),从clk端口输入 输入信号延迟set_input_delay 0.5 -clock CLK [get_ports data_in]数据进芯片前,外部电路已消耗0.5ns,综合要预留这段“堵车时间”。 输出…...
信而泰PFC/ECN流量测试方案:打造智能无损网络的关键利器
导语: AI算力爆发的背后,如何保障网络“零丢包”? 在当今数据中心网络中,随着AI、高性能计算(HPC)和分布式存储等应用的飞速发展,网络的无损传输能力变得至关重要。PFC(基于优先级的…...
golang不使用锁的情况下,对slice执行并发写操作,是否会有并发问题呢?
背景 并发问题最简单的解决方案加个锁,但是,加锁就会有资源争用,提高并发能力其中的一个优化方向就是减少锁的使用。 我在之前的这篇文章《开启多个协程,并行对struct中的每个元素操作,是否会引起并发问题?》中讨论过多协程场景下struct的并发问题。 Go语言中的slice在…...
Android 底部EditView输入时悬浮到软键盘上方
1. 修改 Activity 的 Manifest 配置 确保你的 Activity 在 AndroidManifest.xml 中有以下配置: <activityandroid:name".YourActivity"android:windowSoftInputMode"adjustResize|stateHidden" /> 关键点: adjustResize 是…...
CNN和LSTM的计算复杂度分析
前言:今天做边缘计算的时候,在评估模型性能的时候发现NPU计算的大部分时间都花在了LSTM上,使用的是Bi-LSTM(耗时占比98%),CNN耗时很短,不禁会思考为什么LSTM会花费这么久时间。 首先声明一下实…...
UniApp 表单校验两种方式对比:命令式与声明式
目录 前言1. 实战2. Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 以下主要针对Demo讲解,从实战中的体会 何为命令式 何为声明式 命令式的体验,随时都会有提交的按钮ÿ…...
【树莓派Pico FreeRTOS】-Mutex(互斥体)
Mutex(互斥体) 文章目录 Mutex(互斥体)1、硬件准备2、软件准备3、FreeRTOS的Mutex介绍4、完整示例RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (P…...
LCR 187. 破冰游戏(python3解法)
难度:简单 社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数…...
【漏洞修复】为了修复ARM64 Android10系统的第三方库漏洞,将ARM64 Android16的系统库直接拷贝到Android10系统如何?
直接替换系统库的风险分析 将高版本Android(如Android 16)的系统库直接拷贝到低版本系统(如Android 10)可能会导致以下问题: 符号与依赖不兼容 高版本库可能依赖更高版本的NDK或Bionic libc(Android的C库&…...
Flutter环境配置
配置环境变量 PUB_HOSTED_URLhttps://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 这个命令是用来配置 Flutter 的镜像源地址,主要是为了解决在中国大陆地区访问 Flutter 官方资源较慢的问题。 具体的操作如下: 右键点…...
centOS 7.9 65bit 修复Openssh漏洞
一、背景: 在使用centos 7.9 64bit版本操作系统时有扫描出如下的漏洞: 二、修复openssh漏洞操作 升级注意事项 (一下所有的操作默认都是root或者管理员权限,如果遇到权限问题每个指令以及指令组合都要在前面加sudo) 1、查看CentOS操作系统信…...
金融级密码管理器——生物特征密钥绑定方案
目录 金融级密码管理器 —— 生物特征密钥绑定方案一、模块概述与设计目标1.1 模块背景与意义1.2 设计目标二、系统架构设计2.1 系统模块划分2.2 系统架构图(Mermaid示意图)三、核心算法与安全原理3.1 生物特征数据预处理3.2 密钥生成算法3.3 安全认证与密钥绑定验证3.4 密钥…...
JDBC-添加数据
文章目录 准备数据库添加数据引入数据库依赖包 准备数据库 自行安装软件,利用小皮内嵌的数据 添加数据 引入数据库依赖包 结构 drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://127.0.0.1:3308/yanyuuserroot passwordrootpackage com.yanyu;import java.sql.*;…...
衡石科技HENGSHI SENSE异构数据关联技术深度解析:揭秘5-8倍性能提升背后的“异构过滤“架构
引言:多源数据关联的行业痛点 在大数据时代,企业数据通常分散在多个异构系统中——关系型数据库、NoSQL、数据仓库、湖仓一体平台等。根据Forrester调研,超过78%的企业需要同时访问5种以上不同类型的数据源进行分析,但传统ETL和跨…...
基于Netlify + Localtunnel 实现本地项目“无服务器”部署上线
基于Netlify Localtunnel 实现本地项目“无服务器”部署上线 1. 先看效果图2. 实现步骤2.1 分两步走2.2 netlify 部署前端资源2.3 Localtunnel 映射 localhost 服务 3. 其它工具内网穿透工具对比4. 总结5. 参考资料 1. 先看效果图 地址:zqchat 2. 实现步骤 2.1 …...
C#从入门到精通(3)
目录 第九章 窗体 (1)From窗体 (2)MDI窗体 (3)继承窗体 第十章 控件 (1)控件常用操作 (2)Label控件 (3)Button控件 &…...
设计模式之创建型5种
设计模式 为什么设计模式是23种创建型 对象创建为什么设计模式是23种 设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。这一数量的确定并非偶然,而是基于以下核心原因: 他们遵循“大三律”(Rule of Three),即只有经过三个…...
Java + LangChain 实战入门,开发大语言模型应用!
在 Baeldung 上看到了一篇介绍基于 Java LangChain 开发大语言模型应用的基础入门文章,写的非常不错,非常适合初学者。于是,我抽空翻译了一下。 原文地址:https://www.baeldung.com/java-langchain-basics翻译: Java…...
el-date-picker时间范围 编辑回显后不能修改问题
el-date-picker daterange时间范围 编辑回显后不能修改 <el-form-item:label"LABELS.gplanRecordDateLabel"prop"gplanRecordDate"><el-date-pickerstyle"width: 300px"v-model"formData.gplanRecordDate"type"daterang…...
Java多线程与高并发专题—— CyclicBarrier 和 CountDownLatch 有什么异同?
引入 上一篇我们了解CountDownLatch的原理和常见用法,在CountDownLatch的源码注释中,有提到: 另一种典型用法是将一个问题分解为 N 个部分,用一个Runnable描述每个部分,该Runnable执行相应部分的任务并对闭锁进行倒计…...
leetcode543.二叉树的直径
当前顶点作为拐点时,求左子树加上右子树的高度可以求出该通过该顶点的直径大小,再对该顶点和左右子节点作为拐点时直径大小进行比对,返回最大值 缺点是递归了多次 /*** Definition for a binary tree node.* public class TreeNode {* …...
Java EE 进阶:MyBatis案例练习
表白墙 首先我们先准备一下数据库的数据 创建一个信息表 DROP TABLE IF EXISTS message_info;CREATE TABLE message_info (id INT ( 11 ) NOT NULL AUTO_INCREMENT,from VARCHAR ( 127 ) NOT NULL,to VARCHAR ( 127 ) NOT NULL,message VARCHAR ( 256 ) NOT NULL,delete_fla…...
Dubbo 全面解析:从 RPC 核心到服务治理实践
一、分布式系统与 RPC 框架概述 在当今互联网时代,随着业务规模的不断扩大,单体架构已经无法满足高并发、高可用的需求,分布式系统架构成为主流选择。而在分布式系统中,远程服务调用(Remote Procedure Call࿰…...
路由选型终极对决:直连/静态/动态三大类型+华为华三思科配置差异,一张表彻底讲透!
路由选型终极对决:直连/静态/动态三大类型华为华三思科配置差异,一张表彻底讲透! 一、路由:互联网世界的导航系统二、路由类型深度解析三者的本质区别 三、 解密路由表——网络设备的GPS华为(Huawei)华三&a…...
[微信小程序]对接sse接口
[微信小程序]对接sse接口 在uni开发中,在微信小程序中实现sse接口请求 相关连接 微信小程序对接SSE接口记录 uni中实现sse代码 注意的坑点 接收的并不是字符串,而是ArrayBuffer模拟流推送并不是流推送,会有data:字符扰乱推送并不是完全按照…...
01 相机标定与相机模型介绍
学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +...
