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

基于 openEuler 构建 LVS-DR 群集

1、环境准备

准备好下面四台台服务器:

主机名IP角色
openEuler-1192.168.121.11Director Server
openEuler-2192.168.121.12Real Server1
openEuler-3192.168.121.13Real Server2
Rocky8192.168.121.51Client

2、Web服务器配置

在两台RS上安装并配置nginx服务:

[root@openEuler-2 ~]# yum install nginx -y[root@openEuler-2 ~]# echo "this is test page!(ip:`hostname -I`)" > /usr/share/nginx/html/index.html[root@openEuler-2 ~]# systemctl enable --now nginx[root@openEuler-2 ~]# curl localhost
this is test page!(ip:192.168.121.12 )# 第二台RS配置同上

3、添加VIP的相关配置

在两台RS和DS上:

[root@openEuler-1 ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.121.10/32
Connection 'dummy-dummy1' (7a44b435-72fc-4aa4-afb2-28bf52a1b5b4) successfully added.
[root@openEuler-1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:12:dd:13 brd ff:ff:ff:ff:ff:ffinet 192.168.121.11/24 brd 192.168.121.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe12:dd13/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether 82:81:c6:9e:a9:f6 brd ff:ff:ff:ff:ff:ffinet 192.168.121.10/32 scope global noprefixroute dummy1valid_lft forever preferred_lft foreverinet6 fe80::1837:14b2:ae95:267a/64 scope link noprefixroutevalid_lft forever preferred_lft forever# 剩下二台RS配置同上

Linux Dummy 接口基础概念:
Dummy 接口 是 Linux 操作系统中的一个虚拟网络接口,它不与任何物理硬件设备关联,主要用于测试和配置网络环境。Dummy 接口可以模拟一个网络接口,允许你在没有实际网络硬件的情况下进行网络相关的操作和测试。

4、配置arp抑制

在两台RS上:

[root@openEuler-2 ~]# cat >> /etc/sysctl.conf << EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.dummy1.arp_ignore = 1
> net.ipv4.conf.dummy1.arp_announce = 2
> EOF# 使其生效
[root@openEuler-2 ~]# sysctl -p# 第二台RS配置同上

5、LVS配置

在DS上:

[root@openEuler-1 ~]# yum install ipvsadm -y
[root@openEuler-1 ~]# ipvsadm -At 192.168.121.10:80 -s rr
[root@openEuler-1 ~]# ipvsadm -at 192.168.121.10:80 -r 192.168.121.12:80 -g
[root@openEuler-1 ~]# ipvsadm -at 192.168.121.10:80 -r 192.168.121.13:80 -g
[root@openEuler-1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.121.10:80 rr-> 192.168.121.12:80            Route   1      0          0-> 192.168.121.13:80            Route   1      0          0
[相关参数说明]
# ipvsadm –help
-A  添加虚拟服务器
-t  设置群集地址(VIP,Virtual IP)
-s  指定负载调度算法
-a  添加真实服务器
-d  删除真实服务器
-r  指定真实服务器(Real Server)的地址
-m  使用NAT模式;-g、-i分别对应DR、TUN模式
-w  为节点服务器设置权重,默认为1

6、测试

在Client上:

[root@localhost ~]# for ((i=1;i<10;i++)); do curl 192.168.121.10; done
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )

相关文章:

基于 openEuler 构建 LVS-DR 群集

1、环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色openEuler-1192.168.121.11Director ServeropenEuler-2192.168.121.12Real Server1openEuler-3192.168.121.13Real Server2Rocky8192.168.121.51Client 2、Web服务器配置 在两台RS上安装并配置nginx服务&#…...

委托构造函数与继承构造函数

委托构造函数 允许同一类中的构造函数调用另一个构造函数&#xff0c;以复用初始化逻辑。 委托构造函数不能同时初始化成员变量&#xff0c;只能委托给其他构造函数。 避免循环委托&#xff08;如构造函数A委托给B&#xff0c;B又委托给A&#xff09;。 class MyClass { pu…...

EPLAN 自定义图框

一 &#xff0c; 还是先打开系统自带的图框&#xff0c;作为参考 二&#xff0c; 自定义图框 1. 新建图框 2. 绘制。下图描述有误&#xff0c;直接将系统默认图框文件复制&#xff0c;然后重命名&#xff0c;在这个基础上来进行编辑。 三&#xff0c; 使用 1. 更改默认图框 2…...

c++ gcc工具链

GCC&#xff08;GNU Compiler Collection&#xff09;是一套广泛使用的开源编译工具链&#xff0c;支持多种编程语言&#xff08;如 C、C、Objective-C、Fortran 等&#xff09;&#xff0c;主要用于 Linux 和嵌入式开发环境。 组成 GCC 工具链主要由以下几个核心工具组成&am…...

基于51单片机的的鸡笼补光和恒温系统的设计与实现(源程序+Protues仿真+电路图+元件清单+器件手册)

编号&#xff1a;71 基于51单片机的的鸡笼补光和恒温系统的设计与实现 功能描述&#xff1a; 本设计由89C52单片机液晶12864显示模块声光报警电路温湿度传感器电路风扇电路LED照明电路光照检测电路GSM电路DS1302时钟电路 1.实现的功能 (1)采用DHT11温湿传感器、光敏电阻捕捉…...

es-head 正则查询和标准正则查询的差异

在es-head里面查询&#xff0c;需要查询字符串是一个json串&#xff0c;因此就要符合json串的格式&#xff0c;在es-head里面可以通过regexp做正则查询&#xff0c;而这里的正则表达式其实是写成字符串的形式的&#xff0c;因此就要面对字符串转义的问题&#xff0c;比如你想匹…...

【深度学习】深度学习和强化学习算法——深度 Q 网络DQN

深度 Q 网络&#xff08;Deep Q-Network, DQN&#xff09; 详解 什么是DQNDQN 的背景DQN 训练流程 2 DQN 的核心思想2.1 经验回放&#xff08;Experience Replay&#xff09;2.2 目标网络&#xff08;Target Network&#xff09;2.3 ε-贪心策略&#xff08;ε-Greedy Policy&a…...

matlab模拟风场的随机脉动风

1、内容简介 matlab137-模拟风场的随机脉动风 可以交流、咨询、答疑 2、内容说明 略 模拟风场的随机脉动风&#xff0c;并进行相关的统计分析和计算&#xff0c;包括风速谱、空间相关性、自谱、互谱、以及POD&#xff08;Proper Orthogonal Decomposition&#xff09;分解等…...

2025年2月16日(numpy-deepseek)

嗯&#xff0c;用户让我介绍一下这段使用numpy的代码。首先&#xff0c;我需要确认用户的需求是什么。他们可能刚开始学习Python或者数据科学&#xff0c;所以需要基础的解释。让我仔细看一下代码。 第一行是import numpy as np&#xff0c;这应该是导入numpy库&#xff0c;并…...

x64和ARM的区别

x64和ARM是两种不同的处理器架构&#xff0c;它们在指令集、设计理念、应用场景和能耗效率等方面存在显著差异。以下是它们之间的主要区别&#xff1a; 1. **指令集架构**&#xff1a; * **x64**&#xff1a;x64架构&#xff0c;也称为x86-64或AMD64&#xff0c;是x86架…...

电解电容的参数指标

容量 这个值通常是室温25℃&#xff0c;在一定频率和幅度的交流信号下测得的容量。容量会随着温度、直流电压、交流电压值的变化而改变。 额定电压 施加在电容上的最大直流电压&#xff0c;通常要求降额使用。 例如额定电压是4V&#xff0c;降额到70%使用&#xff0c;最高施…...

如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题

在安装Qt时&#xff0c;遇到了一些问题&#xff0c;尤其是在Mac上安装Qt后&#xff0c;发现Qt Creator没有出现在应用程序中。通过一些搜索和操作&#xff0c;最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后&#xff0c;启动应用程…...

Spring——Spring开发实战经验(1)

摘要 文章主要介绍了 Swagger 作为 API 文档生成和测试工具的功能&#xff0c;包括自动生成 API 文档、提供可视化调试界面、促进前后端协作、支持 OpenAPI 规范等。同时&#xff0c;还提及了 Spring Boot 与 Swagger3 的实战应用&#xff0c;以及 Spring 开发中其他相关技术内…...

设计模式:代理模式

代理模式是很常见的设计模式&#xff0c;即使没有专门学习过这种设计模式&#xff0c;在工作中也一定用过这种设计模式。在实际生活中&#xff0c;代理模式也是常见的&#xff0c;比如内阁首辅相对于皇帝&#xff0c;前者是后者的代理&#xff0c;内阁首辅收到奏折时&#xff0…...

【NLP】循环神经网络RNN

目录 一、认识RNN 二、RNN模型分类 三、传统RNN模型 3.1 结构分析 3.2 Pytorch构建RNN模型 3.3 优缺点 一、认识RNN RNN(Recurrent Neural Network)&#xff0c;中文称作循环神经网络&#xff0c;一般以序列数据为输入&#xff0c;通过网络内部的结构设计有效捕捉序列之…...

深度解析HTTP/HTTPS协议:从原理到实践

深入浅出HTTP/HTTPS协议&#xff1a;从原理到实践 前言 在当今互联网世界中&#xff0c;HTTP和HTTPS协议如同空气般存在于每个网页请求的背后。作为开发者或技术爱好者&#xff0c;理解这些基础协议至关重要。本文将用六大板块&#xff0c;配合原理示意图和实操案例&#xff0…...

AF3 MmcifObject类解读

AlphaFold3 中 MmcifObject类 是 解析 mmCIF 文件的核心数据结构,用于存储解析后的蛋白质结构信息,包含PDB 头部信息、Biopython 解析的结构、链序列信息等。 下面代码包含 Monomer 、AtomSite、ResiduePosition、ResidueAtPosition、 MmcifObject以及ParsingResult数据类的…...

大数据SQL调优专题——Hive执行原理

引入 Apache Hive 是基于Hadoop的数据仓库工具&#xff0c;它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中&#xff0c;HQL默认转换成MapReduce程序运行到Yarn集群中&#xff0c;大大降低了非Java开发者数据分析的门槛&#xff0c;并且Hive提供命令…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

类和对象详解(下)-----运算符重载

目录 1.运算符重载 2.赋值运算符重载 3.取地址运算符重载 3.1const成员函数 3.2取地址运算符重载 1.运算符重载 什么是运算符重载呢&#xff1f;简单举个例子就懂了。 就是我想实现日期的加法&#xff0c;而“”这个运算符C只实现了内置类型的加法&#xff0c;而我们要想实…...

Visonpro 检测是否有缺齿

一、效果展示 二、上面是原展开工具CogPolarUnwrapTool&#xff1b; 第二种方法&#xff1a; 用Blob 和 CogCopyRegionTool 三、 用预处理工具 加减常数&#xff0c;让图片变得更亮点 四、圆展开工具 五、模板匹配 六、代码分解 1.创建集合和文子显示工具 CogGraphicCollec…...

(萌新入门)如何从起步阶段开始学习STM32 ——2 我应该学习HAL库还是寄存器库?

概念 笔者下面需要介绍的是库寄存器和HAL库两个重要的概念&#xff0c;在各位看完之后&#xff0c;需要决定自己的学习路线到底是学习HAL呢&#xff1f;还是寄存器呢&#xff1f;还是两者都学习呢&#xff1f; 库寄存器 库寄存器就是简单的封装了我们对寄存器的操作&#xf…...

【SQL技术】不同数据库引擎 SQL 优化方案剖析

一、引言 在数据处理和分析的世界里&#xff0c;SQL 是不可或缺的工具。不同的数据库系统&#xff0c;如 MySQL、PostgreSQL&#xff08;PG&#xff09;、Doris 和 Hive&#xff0c;在架构和性能特点上存在差异&#xff0c;因此针对它们的 SQL 优化策略也各有不同。这些数据库…...

什么是原型?

在 JavaScript 中&#xff0c;原型&#xff08;Prototype&#xff09;是每个 JavaScript 对象都有的一个属性&#xff0c;用来实现对象之间的继承。原型是 JavaScript 面向对象编程的核心概念之一&#xff0c;通过原型链&#xff08;prototype chain&#xff09;&#xff0c;一…...

【第10章:自然语言处理高级应用—10.4 NLP领域的前沿技术与未来趋势】

各位技术探险家们,今天我们要开启一场穿越语言智能奇点的时空之旅。从正在改写物理定律的万亿参数大模型,到能看懂《星际穿越》剧本的跨模态AI,再到正在颠覆编程方式的神经-符号混合系统……这篇万字长文将带你摸清NLP技术进化的七块关键拼图。(建议边读边做笔记,文末有技…...

41.日常算法

1.面试题 02.04. 分割链表 题目来源 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要 保留 每个分区中各节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a…...

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天&#xff0c;为了提升并发量最直观的办法需要水平扩展服务器的数量&#xff0c;三台服务器可以容纳六万左右的客户端。 负载均衡器的作用&#xff1a; 把client的请求按照负载均衡算法分发到具体…...

Java 中的 HashSet 和 HashMap 有什么区别?

一、核心概念与用途 特性HashSetHashMap接口实现实现 Set 接口&#xff08;存储唯一元素&#xff09;实现 Map 接口&#xff08;存储键值对&#xff09;数据存储存储单个对象&#xff08;元素唯一&#xff09;存储键值对&#xff08;键唯一&#xff0c;值可重复&#xff09;典…...

AI大模型的技术突破与传媒行业变革

性能与成本&#xff1a;AI大模型的“双轮驱动” 过去几年&#xff0c;AI大模型的发展经历了从实验室到产业化的关键转折。2025年初&#xff0c;以DeepSeek R1为代表的模型在数学推理、代码生成等任务中表现超越国际头部产品&#xff0c;而训练成本仅为传统模型的几十分之一。这…...

Golang学习01:Go安装和配置+Vscode、GoLand安装激活+Go环境变量避坑的超详细教程

&#x1fa81;&#x1f341; 希望本文能给您带来帮助&#xff0c;如果有任何问题&#xff0c;欢迎批评指正&#xff01;&#x1f405;&#x1f43e;&#x1f341;&#x1f425; 文章目录 一、背景二、Go语言安装2.1 Go语言环境安装2.2 Go语言环境验证2.3 其他配置 三、开发环境…...

案例-06.部门管理-根据ID查询

一.根据ID查询-接口文档 二.根据ID查询-Controller层 package com.gjw.controller;/*** 部门管理Controller*/import com.gjw.anno.Log; import com.gjw.pojo.Dept; import com.gjw.pojo.Result; import com.gjw.service.DeptService; import com.gjw.service.impl.DeptServi…...

解决No matching client found for package name xxx编译报错的问题

如果Android工程编译报错&#xff0c;并且信息如下&#xff1a; Execution failed for task :app:processDebugGoogleServices. > No matching client found for package name com.demo.test可能的原因为google-services.json中定义的package_name属性跟app当前的包名不符&…...

基于deepseek api和openweather 天气API实现Function Calling技术讲解

以下是一个结合DeepSeek API和OpenWeather API的完整Function Calling示例&#xff0c;包含意图识别、API调用和结果整合&#xff1a; import requests import json import os# 配置API密钥&#xff08;从环境变量获取&#xff09; DEEPSEEK_API_KEY os.getenv("DEEPSEE…...

什么是全局污染,怎么避免全局污染?

具体表现&#xff1a; 全局变量&#xff1a;当变量在全局作用域&#xff08;通常是 window 对象&#xff09;中定义时&#xff0c;它会在整个应用程序中都可访问。这个变量可能会被其他部分的代码意外修改或覆盖&#xff0c;导致难以追踪和调试错误。 命名冲突&#xff1a;全局…...

机器视觉--switch语句

引言 在 Halcon 这个强大的机器视觉软件里&#xff0c;编程控制结构对于高效处理图像任务至关重要。其中&#xff0c;Switch 语句作为一种多分支选择结构&#xff0c;能够根据不同的条件值执行不同的代码块&#xff0c;让程序的逻辑更加清晰和简洁。本文将全面深入地介绍 Halc…...

C++ std::atomic可以使用复杂类型(类和结构体)吗

目录 1.引言 2.std::atomic 支持的复杂类型 3.std::atomic与无锁 4.如何使用 std::atomic 保护复杂类型 4.1.使用互斥锁&#xff08;Mutex&#xff09; 4.2.使用 std::atomic_flag 和自旋锁 4.3.原子共享指针&#xff08;Atomic Shared Pointers&#xff09; 4.4.使用高…...

音乐随想、日语认识

Rapport的日文歌词&#xff08;初&#xff09; Rapport - キタニタツヤ 词&#xff1a;キタニタツヤ 《《 ki ta ni ta tsu ya 歌手的名字&#xff0c;全是片假名&#xff0c;不是本土的平假名(为了国外市场的做法&#xff1f;) 》》 曲&#xff1a;キタニタツヤ 编曲&am…...

SpringBoot速成(11)更新用户头像,密码P13-P14

更新头像&#xff1a; 1.代码展示: 1.RequestParam 是 Spring MVC 中非常实用的注解&#xff0c;用于从 HTTP 请求中提取参数并绑定到控制器方法的参数上。 2.PatchMapping 是 Spring MVC 中的一个注解&#xff0c;用于处理 HTTP 的 PATCH 请求。PATCH 请求通常用于对资源的部…...

自动化测试面试会问哪些?

自动化测试面试1&#xff1a; 1、使用什么测试框架做的上一个项目的自动化测试。 2、自己最熟悉哪个库&#xff0c;如何使用这些库的&#xff0c;是否做了基于复用的封装&#xff0c;怎么考虑的这些封装 3、如何定位app上的元素 4、//*[contains(text,"登录")] 是…...

SQL Server 导入Excel数据

1、选中指定要导入到哪个数据库&#xff0c;右键选择 》任务 》导入数据 2、数据源 选择Excel&#xff0c;点击 下一步(Next) 3、目前 选择OLE DB Provider &#xff0c;点击 下一步&#xff08;Next&#xff09; 4、默认 &#xff0c;点击 下一步&#xff08;Next&#xff09;…...

车载音频架构图详解(精简)

目录 上图是车载音频架构图,对这个图我们进行详细的分析 左边第一层 是 app 常用的类有MediaPlayer和MediaRecorder, AudioTrack和AudioRecorder 第二层 是framework提供给应用的多媒体功能的API类,封装在android.media.* API包中。编译后,在framework.jar中。...

基于SpringBoot+Vue的智慧校园管理系统设计和实现(源码+文档+部署讲解)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 .&#x1f680; 技术架构技术栈全景 &#x1f3af; 功能模块功能矩阵表&#x1f4ca; 数据库设计核心ER关系图 &#x1f4bb; 核心…...

浏览器打印局部网页,设置页眉

占位的页眉 重点部分 1.样式间隙 page { margin-top: 60px; /* 为页眉留出空间&#xff0c;页眉的高度要和他一样 */ top-right { height: 60px; 同时右侧&#xff0c;内容布局右上角要留出60px的 2.背景图片 如果页眉…...

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵&#xff08;平移旋转的统一表示&#xff09; 运动链建模串联运动链结构&#xff08;从基座到末端的关节连接&#xff09;标准Denavit-Hartenberg&#xff08;D-H&#xff09;参数法改进D-H参…...

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想&#xff0c;例如类继承、接口、单例类等&#xff0c;本来应该是好事情&#xff0c;**但使用时对象之间的关系交错复杂&#xff0c;不太符合linux内核分层分模块的思路&#xff0c;导致整体理解起来比较困难&…...

kamailio中Core Cookbook 核心配置手册

Core Cookbook 核心配置手册 版本: Kamailio SIP 服务器 v6.0.x (稳定版) 概述 本教程收集了 Kamailio 核心导出到配置文件的功能和参数。 注意: 本页参数未按字母顺序排列。 结构 kamailio.cfg 的结构可分为三部分: 全局参数模块设置路由块 建议按此顺序排列以保持清晰…...

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…...

HTML、Vue和PHP文件的区别与联系

一、核心区别 类型性质执行环境功能特点.html静态标记语言浏览器直接解析定义页面结构和内容&#xff0c;无逻辑处理能力.vue前端框架组件文件浏览器/构建工具整合HTML模板JS逻辑CSS样式&#xff0c;支持动态数据绑定和组件化开发.php服务器端脚本语言文件Web服务器执行动态生…...

Map 和 Set

目录 一、搜索 概念&#xff1a; 模型&#xff1a; 二、Map ​编辑 1.Map 实例化&#xff1a; 2. Map的常见方法&#xff1a; 3.Map的常见方法演示&#xff1a; 1. put(K key, V value)&#xff1a;添加键值对 3. containsKey(Object key)&#xff1a;检查键是否存在 4.…...

白话大模型LLM-通用基础入门知识-适合给纯小白的入门!

文章目录 什么是大模型大模型训练预训练监督微调SFTRLHF基于人类反馈的强化学习 大模型分类大语言模型-LLM多模态模型-VLM视觉模型音频模型 大模型工作流程分词化与词表映射大模型回答过程 & 基于token的概率预测 Agent导论子任务拆分 什么是大模型 大模型就是训练的一个能…...