Linux 练习二 LVS的NAT模式
作业
要求:使用LVS的 NAT 模式实现 3 台 RS 的轮询访问。IP地址和主机自己规划。
节点规划
| 主机 | 角色 | 系统 | 网络 | IP |
|---|---|---|---|---|
| client | client | redhat 9.5 | 仅主机 | 192.168.60.100/24 |
| lvs | lvs | redhat 9.5 | 仅主机 NAT | 192.168.60.200/24 VIP 192.168.23.8/24 DIP |
| nginx | rs1 | redhat 9.5 | NAT | 192.168.23.7/24 |
| nginx | rs2 | redhat 9.5 | NAT | 192.168.23.17/24 |
| nginx | rs3 | redhat 9.5 | NAT | 192.168.23.27/24 |
配置RS
RS需要配置为NAT模式,网关这里设置为 192.168.23.8
配置 RS1
[root@localhost ~]# hostnamectl hostname rs1[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.23.7/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes[root@localhost ~]# nmcli c up ens160# 安装nginx[root@rs1 ~]# dnf install nginx -y# 修改默认访问页[root@rs1 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html# 启动服务[root@rs1 ~]# systemctl start nginx# 测试[root@rs1 ~]# curl localhost192.168.72.7
配置 RS2
[root@localhost ~]# hostnamectl hostname rs2
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.23.17/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160# 安装nginx
[root@rs1 ~]# dnf install nginx -y
# 修改默认访问页
[root@rs1 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html
# 启动服务
[root@rs1 ~]# systemctl start nginx
# 测试
[root@rs1 ~]# curl localhost
192.168.72.7
配置 RS3
[root@server ~]# hostnamectl hostname rs3[root@server ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.23.27/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes [root@server ~]# nmcli connection up ens160 ### 安装nginx[root@rs3 ~]# dnf install -y nginx# 修改默认访问页[root@rs3 ~]# echo &(hostname -I) > /usr/share/nginx/html/index.html [1] 2339[1]+ Done echo[root@rs3 ~]# systemctl start nginx[root@rs3 ~]# curl localhost192.168.23.27
配置 LVS
修改虚拟网络
LVS 服务器第一块网卡采用仅主机模式,IP 地址为 192.168.60.200,第二块网卡采用 NAT 模式,IP 地址为 192.168.23.8。
这里我们先在VMware中将 网络适配器 改为仅主机模式,然后再添加一块 NAT 模式的网卡。
[root@server ~]# hostnamectl hostname lvs### 关闭防火墙[root@lvs ~]# systemctl stop firewalld.service[root@lvs ~]# ip a1: ...2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:96:88:aa brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.60.128/24 brd 192.168.60.255 scope global dynamic noprefixroute ens160valid_lft 1755sec preferred_lft 1755secinet6 fe80::20c:29ff:fe96:88aa/64 scope link noprefixroute valid_lft forever preferred_lft forever3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:96:88:b4 brd ff:ff:ff:ff:ff:ffaltname enp19s0inet 192.168.23.138/24 brd 192.168.23.255 scope global dynamic noprefixroute ens224valid_lft 1755sec preferred_lft 1755secinet6 fe80::e817:bd6f:df08:c607/64 scope link noprefixroute valid_lft forever preferred_lft forever# 查看网络连接设备名称,注意网卡名称和驱动名称是不一样的[root@lvs ~]# nmcli connection showNAME UUID TYPE DEVICE ens160 c1ddb566-f74f-3685-bcac-678da8f58efa ethernet ens160 lo d2977d80-8552-47ec-95dd-a87b7809be47 loopback lo Wired connection 1 bfbd3c56-329a-38c2-89c1-bb9b514232a3 ethernet ens224 # 修改连接名称,以免每次都要输入'Wired connection 1'[root@lvs ~]# nmcli c modify 'Wired connection 1' connection.id ens224[root@lvs ~]# nmcli connection showNAME UUID TYPE DEVICE ens160 c1ddb566-f74f-3685-bcac-678da8f58efa ethernet ens160 ens224 bfbd3c56-329a-38c2-89c1-bb9b514232a3 ethernet ens224 lo d2977d80-8552-47ec-95dd-a87b7809be47 loopback lo# 查看修改结果[root@lvs ~]# nmcli connection showNAME UUID TYPE DEVICE ens160 c1ddb566-f74f-3685-bcac-678da8f58efa ethernet ens160 ens224 bfbd3c56-329a-38c2-89c1-bb9b514232a3 ethernet ens224 lo d2977d80-8552-47ec-95dd-a87b7809be47 loopback lo
软件安装
防止等会不能上外网,先把 ipvsamd 软件安装好。
[root@lvs ~]# dnf install ipvsadm -yUpdating Subscription Management repositories.Unable to read consumer identityDependencies resolved.=======================================================================================Package Architecture Version Repository Size=======================================================================================Installing:ipvsadm x86_64 1.31-6.el9 AppStream 54 kTransaction Summary=======================================================================================... Complete!
配置网卡
从 VMware 的 编辑 -> 虚拟网络适配器 选项中可以看到自己仅主机模式的子网IP,这里我的子网IP 为 192.168.60.0
# 仅主机模式网卡[root@lvs ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.60.200/24 ipv4.gateway 192.168.60.2 ipv4.dns 223.5.5.5 connection.autoconnect yes[root@lvs ~]# nmcli c up ens160# NAT 模式网卡[root@lvs ~]# nmcli c modify ens224 ipv4.method manual ipv4.addresses 192.168.23.8/24 ipv4.gateway 192.168.23.2 connection.autoconnect yes[root@lvs ~]# nmcli c up ens224 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
配置客户端
客户端的网络也采用仅主机模式,采用 60 网段
[root@server ~]# hostnamectl hostname client[root@client ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.60.100/24 ipv4.gateway 192.168.60.2 ipv4.dns 223.5.5.5 connection.autoconnect yes[root@client ~]# nmcli c up ens160
启动服务
# 直接启动服务会报错[root@lvs ~]# systemctl start ipvsadm.service Job for ipvsadm.service failed because the control process exited with error code.See "systemctl status ipvsadm.service" and "journalctl -xeu ipvsadm.service" for details.# 需要保存当前的 IPVS 规则[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm[root@lvs ~]# systemctl start ipvsadm.service
规则匹配
# 此时客户端无法访问虚拟IP(VIP),既无法访问到后端 RS 服务器[root@client ~]# curl 192.168.60.200curl: (7) Failed to connect to 192.168.60.200 port 80: Connection refused# 但是在 LVS 服务器中可以访问到后端 RS 服务器[root@lvs ~]# curl 192.168.23.7192.168.23.7[root@lvs ~]# curl 192.168.23.17192.168.23.17[root@lvs ~]# curl 192.168.23.27192.168.23.27### 进行 LVS 规则匹配## 配置一条规则# -A 表示添加新的虚拟服务 -t 指定使用TCP连接(默认) 后面为当前 VIP 及端口 # -s rr 指定 负载均衡算法,rr 表示轮询,即轮流发送到所有真实服务器RS[root@lvs ~]# ipvsadm -A -t 192.168.60.200:80 -s rr## 添加规则# -a 为存在的虚拟服务添加真实服务器RS -t 指定真实服务器RS的IP地址和端口 # -m 指定以 直接路由模式使用,表示LVS通过NAT转发流量到真正的服务 # -w 设置权重,表示该RS的负载均衡权重,用于 轮询策略 [root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.7:80 -m -w 1[root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.17:80 -m -w 2[root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.27:80 -m -w 3## 查看规则列表[root@lvs ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.60.200:80 rr-> 192.168.23.7:80 Masq 1 0 0 -> 192.168.23.17:80 Masq 2 0 0 -> 192.168.23.27:80 Masq 3 0 0# 配置好后重启服务[root@lvs ~]# systemctl restart ipvsadm.service
功能测试
# 重启完成后再次通过客户端测试,发现不报错但是没有数据返回[root@client ~]# curl 192.168.60.200### 启用IP转发,即启用 IPv4 的 IP 转发功能(1启用,0禁用)# 将内核转发参数写进配置文件,重启后也能保持配置[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf # 重新加载配置[root@lvs ~]# sysctl -pnet.ipv4.ip_forward = 1### 此时再进行访问,成功轮询[root@client ~]# curl 192.168.60.200192.168.23.7[root@client ~]# curl 192.168.60.200192.168.23.27 [root@client ~]# curl 192.168.60.200192.168.23.17[root@client ~]# curl 192.168.60.200192.168.23.7[root@client ~]# curl 192.168.60.200192.168.23.27 [root@client ~]# curl 192.168.60.200192.168.23.17
IP 转发的作用
启用 IP 转发允许 Linux 主机在两个或多个网络之间转发数据包。这对于以下场景至关重要:
-
路由器:使得 Linux 服务器可以作为路由器,转发数据包。
-
负载均衡器:在 LVS 等负载均衡配置中,能够将客户端请求分发到后端真实服务器。
-
网络安全:通常在 NAT(网络地址转换)场景中,需要 IP 转发来处理流量。
相关文章:
Linux 练习二 LVS的NAT模式
作业 要求:使用LVS的 NAT 模式实现 3 台 RS 的轮询访问。IP地址和主机自己规划。 节点规划 主机角色系统网络IPclientclientredhat 9.5仅主机192.168.60.100/24lvslvsredhat 9.5仅主机 NAT192.168.60.200/24 VIP 192.168.23.8/24 DIPnginxrs1redhat 9.5NAT192.16…...
MongoDB 与 Elasticsearch 使用场景区别及示例
一、核心定位差异 MongoDB 定位:通用型文档数据库,侧重数据的存储、事务管理及结构化查询,支持 ACID 事务。典型场景: 动态数据结构存储(如用户信息、商品详情)。需事务支持的场景…...
WPF ContentPresenter详解2
ContentPresenter与ContentControl的区别 ContentControl 和 ContentPresenter 是 WPF 中两个相关的控件,但它们在用途和功能上有一些关键的区别。理解这两者的区别和联系有助于更好地设计和开发用户界面。 1. 类层次结构 ContentControl:位于 WPF 控件…...
Ubuntu20.0.4创建ssh key以及repo命令的使用
创建ssh key ssh-keygen //一路回车,不用输入任何东西cat ~/.ssh/id_rsa.pub 配置git config git config --global user.name xxx // 设置git用户名git config --global user.email xxx.com.cn //设置git 邮箱git config --list// remove the git config// rm -fr …...
CSS——变换、过度与动画
巧妙的使用变换、过度与动画可以让页面设计更有趣、更吸引人,同时还能提高可用性和感知性能。 文章目录 一,变换(一)2D变换1,定义旋转2,定义缩放3,定义移动4,定义倾斜5,定…...
鸿蒙OS 5.0 服务能力框架深入剖析
鸿蒙OS 5.0 服务能力框架中关键类的作用分析 1\. 鸿蒙OS 5.0 服务能力框架导论 鸿蒙OS 5.0,亦称鸿蒙智联 5 1,标志着华为在分布式操作系统领域迈出的重要一步。与早期版本采用兼容安卓的AOSP层、Linux内核以及LiteOS内核不同,鸿蒙OS 5.0 专注…...
【PCB工艺】时序图(Timing Diagram)
时序图(Timing Diagram)是描述数字电路信号随时间变化的图示,广泛用于分析和设计时序逻辑电路,如锁存器(Latch)、触发器(Flip-Flop)、计数器、状态机等。这篇文章从时序图的原理、构…...
第四届能源、电力与电气国际学术会议(ICEPET 2025)
重要信息 地点:中国-成都 官网:www.icepet.net(了解参会投稿等信息) 时间:2025年4月25-27日 简介 第四届能源、电力与电气会(ICEPET 2025定于2025年4月25-27日在中国成都举办。 本次将围绕能源、电力及…...
el-table + el-pagination 前端实现分页操作
el-table el-pagination 前端实现分页操作 后端返回全部列表数据,前端进行分页操作 html代码 <div><el-table :data"tableData" border><el-table-column label"序号" type"index" width"50" /><el…...
Redis数据持久化机制 + Go语言读写Redis各种类型值
Redis(Remote Dictionary Server)作为高性能的键值存储系统,凭借其丰富的数据类型和原子性操作,成为现代分布式系统中不可或缺的组件。 1、Redis支持的数据类型 Redis支持的数据类型可归纳为以下9类: String&#x…...
【机器学习】什么是逻辑回归?
什么是逻辑回归? 逻辑回归(Logistic Regression)是一个用于分类问题的统计学模型,尽管名字里有“回归”二字,它其实是用来做分类的,不是做数值预测的。 通俗易懂的理解 我们可以通过一个简单的例子来理解…...
Unity程序嵌入Qt后点击UI按钮Button没有反应
一、前言 在一次项目中,需要将Unity程序嵌入qt中,并在主界面显示,根据网络资料与相关代码,成功将unity程序嵌入,但是在点击Unity的Button按钮时却没有响应,在查找相关资料后,解决问题ÿ…...
【Bug】记录2025年遇到的Bug以及修复方案
--------------------------------------------------------分割线 2025.3.25-------------------------------------------------------windows环境下通过命令行终端(必须是命令行下,直接赋值传递,代码正常)的形式传递字符串时&a…...
2025最新“科研创新与智能化转型“暨AI智能体开发与大语言模型的本地化部署、优化技术实践
第一章、智能体(Agent)入门 1、智能体(Agent)概述(什么是智能体?智能体的类型和应用场景、典型的智能体应用,如:Google Data Science Agent等) 2、智能体(Agent)与大语…...
VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾
使用html2CanvasJsPDF生成pdf,并实现分页添加页眉页尾 1.封装方法htmlToPdfPage.ts /**path: src/utils/htmlToPdfPage.tsname: 导出页面为PDF格式 并添加页眉页尾 **/ /*** 封装思路* 1.将页面根据A4大小分隔边距,避免内容被中间截断* 所有元素层级不要…...
【NLP 46、大模型技术发展】
目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...
在 Ubuntu 上安装 Docker 的完整指南
1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…...
可以把后端的api理解为一个目录地址,但并不准确
将后端的 API 理解为一个“目录地址”是可以的,但并不完全准确。让我们更详细地解释一下。 目录 1、生动形象了解api 2、后端 API 的作用 3、可以将 API 理解为“目录地址”的原因 (1)URL 路径 (2)层次结构 4、…...
硬件基础--16_公式梳理
公式梳理 欧姆定律: IU/R 1.欧姆定律有局限性,仅适用于纯电阻电路(或者说纯电阻元器件,纯电阻设备) 2.纯电阻电路:消耗的电能仅转化为热能,没有其他形式的能量转换。 功率计算:PUI 1.导出公式:PU2 /R 2.导出公式:PI2 R 焦耳定律:QI2 Rt 1.导…...
《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战
第34集:卷积神经网络(CNN)图像分类实战 2025年3月28日更新 增加了 CNN和AI大模型关系的说明。 2025年3月29日更新了代码,优化损失系数曲线可视化。 详细环境配置依赖和可一次性复制的完整代码见文末。 摘要 最近大模型推陈出新迭…...
嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC)
嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC) 【本文代码已在Linux平台验证通过】 一、UNIX Domain Socket核心优势 1.1 本地IPC方案对比 特性UNIX Domain Socket管道(Pipe)消息队列(Message Queue)共享内存(Shared Memory)跨进…...
【qt】 布局器
参考博客:https://blog.csdn.net/Fdog_/article/details/107522283 目录 布局管理器概念常见的布局管理器及特点🔵QHBoxLayout水平布局🔵QVBoxLayout垂直布局 🔵QGridLayout网格布局 🔵QFormLayout表单布局 QT 高级布…...
Hosts文件与DNS的关系:原理、应用场景与安全风险
目录 引言 Hosts文件与DNS的基本概念 2.1 什么是Hosts文件? 2.2 什么是DNS? Hosts文件与DNS的关系 Hosts文件的应用场景 4.1 本地开发与测试 4.2 屏蔽广告与恶意网站 4.3 绕过DNS污染或劫持 Hosts文件的优势 5.1 解析速度快 5.2 不受DNS缓存影…...
VMware Windows Tools 存在认证绕过漏洞(CVE-2025-22230)
漏洞概述 博通公司(Broadcom)近日修复了 VMware Windows Tools 中存在的一个高危认证绕过漏洞,该漏洞编号为 CVE-2025-22230(CVSS 评分为 9.8)。VMware Windows Tools 是一套实用程序套件,可提升运行在 VM…...
pnpm 依赖升级终极指南:从语义化版本控制到 Monorepo 全局更新的企业级实践
要使用 pnpm 更新所有依赖包,可以通过以下命令实现: 1. 更新所有依赖到符合语义化版本的范围 pnpm update该命令会根据 package.json 中定义的版本范围(如 ^1.0.0 或 ~2.3.4)更新依赖包到最新兼容版本,但不会突破版本…...
Sentinel[超详细讲解]-2
异常处理 默认情况下,Sentinel 会抛出 BlockException 异常,如果希望自定义异常,则可以使用 SentinelResource 注解的 blockHandler 属性。 1、自定义异常处理 BlockExceptionHandler 自定义异常处理类实现 BlockExceptionHandler 接口&#…...
【问题解决】Linux安装conda修改~/.bashrc配置文件后,root 用户下显示 -bash-4.2#
问题描述 在Linux安装conda下的python环境时候,修改了~/.bashrc文件,修改完成后,再次进入服务器后,登录时候显示的不是正常的[rootlocalhost ~]#,而是-bash-4.2# 原因分析: 网上原因有:/root下…...
优化webpack打包体积思路
Webpack 打包过大的问题通常会导致页面加载变慢,影响用户体验。可以从代码优化、依赖优化、构建优化等多个角度入手来减少打包体积: 代码优化 (1)按需加载(代码拆分) ① 路由懒加载 如果你的项目使用 Vu…...
RabbitMQ 技术详解:异步消息通信的核心原理与实践
这里写目录标题 RabbitMQ 技术详解:异步消息通信的核心原理与实践一、RabbitMQ 本质剖析核心架构组件 二、核心功能与应用场景主要作用典型应用场景 三、工作流程深度解析消息传递流程关键协议机制 四、Java 实现示例1. 依赖配置(Maven)2. 消…...
CF每日5题Day4(1400)
好困,感觉很累,今天想赶紧写完题早睡。睡眠不足感觉做题都慢了。 1- 1761C 构造 void solve(){int n;cin>>n;vector<vector<int>>a(n1);forr(i,1,n){//保证每个集合不同a[i].push_back(i);}forr(i,1,n){string s;cin>>s;forr(…...
