【Lustre相关】功能实践-01-Lustre集群部署配置

文章目录

    • 一、前言
      • 1、关于io500
      • 2、关于HPC
      • 3、软件架构
      • 4、部署方式
    • 二、软件安装
      • 1、配置yum源
      • 2、内核安装
      • 2、服务端安装
      • 3、客户端安装
      • 4、zfs安装
    • 三、集群部署
      • 1、关闭防火墙及SELinux
      • 2、配置网络
        • 2.1、通用格式
        • 2.2、参考示例
      • 3、配置zfs(可选)
        • 3.1、通用格式
        • 3.2、参考示例
      • 4、部署集群
        • 4.1、通用格式
          • 1)部署MGS
          • 2)部署MDS
          • 3)部署OSS
          • 4)客户端挂载

一、前言

参考链接:
Lustre中国社区
性能监控:LustrePerfMon
架构:Google Cloud中使用DDN EXAScaler的Lustre文件系统
Lustre版本演进路线
DDN-lustre_manual_markdown

1、关于io500

io500榜单

io500是针对存储性能评测的一个权威国际排行榜,主要包括带宽和元数据性能测试部分,共计十二项严苛的场景测试,该基准使用大文件的读/写带宽和小文件读/写/查询性能来衡量存储性能,这些性能也是影响大数据分析、人工智能、高性能计算的关键因素。
Lustre是一个开源高性能并行文件系统,专注于HPC高性能并行计算场景,几乎占据io500榜单三分之一的位置。

[RESULT]       ior-easy-write
[RESULT]    mdtest-easy-write
[RESULT]       ior-hard-write
[RESULT]    mdtest-hard-write
[RESULT]                 find
[RESULT]        ior-easy-read
[RESULT]     mdtest-easy-stat
[RESULT]        ior-hard-read
[RESULT]     mdtest-hard-stat
[RESULT]   mdtest-easy-delete
[RESULT]     mdtest-hard-read
[RESULT]   mdtest-hard-delete

2、关于HPC

HPC为高性能计算(High Performance Computing)简称,HPC系统通过汇总多个计算资源来快速解决大型计算问题。
HPC 推动了医疗保健、生命科学、媒体、娱乐、金融服务和能源等行业的研究和创新。研究人员、科学家和分析师使用 HPC 系统开展实验、运行模拟和评估原型。地震处理、基因组测序、媒体渲染和气候建模等 HPC 工作负载需要以不断增加数据速率和不断降低延迟的方式(高带宽、低时延)来生成和访问大量数据。高性能存储是HPC基础架构的关键基础组件。

3、软件架构

Lustre文件系统只支持文件接口,缺少软件级别副本,数据冗余依赖于后端硬件,可通过FLR特性实现数据异步镜像复制,可通过pacemaker高可用组件实现节点双活故障切换。整体软件架构如下:
在这里插入图片描述

  • MGS(管理服务器)
    MGS用于管理Lustre文件系统中的配置信息,并为其他组件提供信息。每个Lustre target通过MGS来提供信息,Lustre客户端通过MGS来获取信息
    MGS负责维护集群信息,当不涉及集群变更时,MGS服务异常不会影响到已有业务读写,当配置多个MGS时,同一时刻只能有一个MGS处于活动状态(其余MGS处于备用状态),使用同一个底层数据(同一MDT)
    注:MGS和OSS可以放在一起共享存储空间

  • MGT(管理目标)
    MGT为MGS提供存储空间,仅存储管理信息,所需空间极小(通常<100MB)
    由于MGT上的数据仅在服务器或客户端安装时被载入访问,因此不需要考虑磁盘性能;考虑其数据对于文件系统访问非常重要,通常建议使用RAID1

  • MDS(元数据服务器)
    MDS用于管理Lustre文件系统的配置信息

  • MDT(元数据目标)
    MDT为MDS提供存储空间,用于存储元数据信息(如文件名、目录、权限、文件布局等)。MDT可以是共享存储设备(如同一磁盘阵列映射给多个节点),虽然同一MDT可对多个MDS可见,但同一时刻只能被一个MDS访问,当活跃的MDS节点出现故障,另外一个MDS节点可以接管该MDT对外提供服务。通常使用SSD高性能磁盘,建议配置RAID1或RAID10
    注:MDT0000含有Lustre文件系统根目录,如出现MDT00000无法使用情况,则会导致整个文件系统无法使用

  • OSS(对象存储服务器)
    OSS为一个或多个本地OST(支持1~32个OST)提供文件I/O服务并处理网络请求

  • OST(对象存储目标)
    OST为OSS提供存储空间,用于存储文件数据,用户的文件数据存储在一个或多个对象中,每个对象存放在Lustre文件系统单独一个OST上,每个文件的对象数可根据特定工作负载调整以获得最佳性能。通常使用RAID5或RAID6

  • Lustre客户端
    运行Lustre客户端软件的节点,挂载Lustre文件系统,提供集群存储读写入口

  • LNet
    LNet(Lustre Network)是一种定制化网络API,提供了通讯基础,用于处理Lustre文件系统服务器和客户端之间的元数据和文件I/O数据通信

4、部署方式

lustre支持ldiskfszfs两种文件系统

  • ldiskfs
    基于Ldiskfs的Lustre文件系统技术栈成熟,性能调优完善,适合性能要求更高的场景

  • zfs
    基于ZFS的Lustre文件系统对存储硬件的要求较少,可采用JBOD(Just a Bunch of Disks)硬件,降低了系统对于厂商和硬件的依赖程度,有利于成本控制

二、软件安装

系统版本:CentOS Linux release 7.9.2009
内核版本:3.10.0-1160.el7.x86_64
软件版本:lfs 2.12.9

1、配置yum源

  • 添加国内镜像yum源及epel源
yum install wget -y
mv /etc/yum.repos.d/ /etc/yum.repos.d-bak/
mkdir /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo -P /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/
  • 添加Lustre软件源
[root@node93 ~]# cat /etc/yum.repos.d/lustre.repo 
[e2fsprogs]
name=e2fsprogs
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/
gpgcheck=0
enable=1

[lustre-server]
name=lustre-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/
gpgcheck=0
enable=1

[lustre-client]
name=lustre-client
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/client/
gpgcheck=0
enable=1
[root@node93 ~]# yum makecache

2、内核安装

内核版本包离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/server/RPMS/x86_64/

序号安装包名称说明
1kernel-ver_lustre.arch带lustre补丁的Linux内核

Lustre部署方式有jbod+zfsrbod+ldiskfs两种方式(前者使用软raid作为数据冗余方式,后者使用硬raid作为数据冗余方式)
当使用ldiskfs文件系统时,集群节点需要安装带Lustre补丁的内核版本(客户端节点不需要)

  • 安装内核包
    安装内核包之后,需要重启该节点,重新加载新内核版本
yum install kernel-3.10.0-1160.49.1.el7_lustre.x86_64 kernel-devel-3.10.0-1160.49.1.el7_lustre.x86_64 -y
yum install kernel-headers-3.10.0-1160.49.1.el7_lustre.x86_64 kernel-debuginfo-common-x86_64-3.10.0-1160.49.1.el7_lustre.x86_64 -y
reboot

2、服务端安装

e2fsprogs离线包下载(包括所有包):/public/e2fsprogs/latest/el7/RPMS/x86_64/
服务端离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/server/RPMS/x86_64/

序号安装包名称说明
1e2fsprogsLustre ldiskfs后端文件系统维护工具
2lustre-ver.archLustre 软件命令行工具
3kmod-lustre-ver.archLustre 补丁内核模块
4kmod-lustre-osd-ldiskfs-ver.arch用于基于 ldiskfs 的服务器的 Lustre 后端文件系统工具
5lustre-osd-ldiskfs-mount-ver.arch基于 ldiskfs 的服务器的 mount.lustre和mkfs.lustre相关帮助文档
6kmod-lustre-osd-zfs-ver.arch用于 ZFS 的 Lustre 后端文件系统工具(可用于替代 lustre-osd-ldiskfs可分别获取 kmod-spl 和 kmod-zfs available)
7lustre-osd-zfs-mount-ver.arch基于 ZFS 的服务器中mount.lustre和mkfs.lustre相关帮助文档(ZFS 工具须另外下载)
  • 安装e2fsprogs
yum install e2fsprogs -y
  • 安装lustre-all-dkms依赖包
yum install dkms elfutils-libelf-devel expect libnvpair1 libuutil1 libyaml libyaml-devel libzfs2 libzpool2 spl-dkms tcl zfs-dkms zlib-devel zlib -y
  • 安装lustre服务端软件包
yum install lustre-2.12.9-1.el7.x86_64 lustre-resource-agents-2.12.9-1.el7.x86_64 lustre-iokit-2.12.9-1.el7.x86_64 lustre-all-dkms-2.12.9-1.el7.noarch -y
yum install kmod-lustre-2.12.9-1.el7.x86_64 -y
yum install kmod-lustre-osd-ldiskfs-2.12.9-1.el7.x86_64 lustre-osd-ldiskfs-mount-2.12.9-1.el7.x86_64 -y
yum install kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 lustre-osd-zfs-mount-2.12.9-1.el7.x86_64 -y

3、客户端安装

客户端离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/client/RPMS/x86_64/

序号安装包名称说明
1kmod-lustre-client-ver.arch客户端的无损内核模块
2lustre-client-ver.arch客户端命令行工具
3lustre-client-dkms-ver.archkmod-lustre-client 的替代客户端 RPM,含动态内核模块支持 (DKMS。避免了每次内核更新都安新的 RPM,但需要客户端的完整构建环境。
  • 安装lustre客户端软件包
yum install kmod-lustre-client-2.12.9-1.el7.x86_64 lustre-client-2.12.9-1.el7.x86_64 -y

4、zfs安装

Installation of lustre-zfs-dkms fails
Fix dkms server build installation
Lustre-KMOD-2.12.9-with-ZFS-0.7.13-on-Centos-7.9

yum install yum install zfs -y

安装kmod-lustre-osd-zfs软件包失败,提示ksym相关依赖错误,查阅相关资料,官方版本对zfs支持方面存在问题,目前需要修改相关文件重新编译软件包解决


--> Finished Dependency Resolution
Error: Package: kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 (lustre-server)
           Requires: ksym(dsl_prop_unregister) = 0xfb7face6
Error: Package: kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 (lustre-server)
           Requires: ksym(zio_buf_alloc) = 0x0c211976

三、集群部署

1、关闭防火墙及SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

2、配置网络

当节点存在多个网络接口时,需要为Lustre指定专用接口,可在/etc/modprobe.d/lustre.conf配置文件中添加一条设置LNet模块networks参数的条目

2.1、通用格式

options lnet networks=tcp0(eth0),o2ib(ib0)

  • 当需指定多个网络接口时,以,隔开
  • TCP/IP网络类型用tcp0tcp1表示,InfiniBand网络类型用o2ib表示,()内的参数值表示所使用的网卡名称
  • 一旦网络建立连接,即便该节点有多个接口可用,发生网络故障时也不会将路由转至另一接口上
2.2、参考示例
参考示例如下,指定当前节点Lustre专用网络接口为ens192
echo "options lnet networks=tcp0(ens192)" > /etc/modprobe.d/lustre.conf

3、配置zfs(可选)

参考链接:ZFS_OSD_Storage_Basics

Lustre可使用ldiskfszfs作为MGT、MDT、OST存储设备的后端文件系统,当使用zfs文件系统时,需要先创建对应的zpool池(软raid)
rbod + ldiskfsfs:当使用ldiskfs文件系统时,底层存储设备为RAID盘(rbod),数据冗余依赖于存储设备硬raid
jbod + zfs:当使用zfs文件系统时,底层存储设备为直通盘(jbod),数据冗余依赖于zfs软raid

3.1、通用格式

创建zpool前,需要使用genhostid命令生成唯一的host id值
zpool create -O canmount=off -o cachefile=none -o multihost=on <pool-name> [pool-type] <disk>

  • -O canmount=off: 禁用文件系统挂载,相当于设置挂载点属性为none
  • -o cachefile=none:禁用缓存文件,通常用于故障转移配置,故障转移软件可以直接导入存储池
  • -o multihost=on:启用多重导入保护,同一时刻只能将ZFS存储池导入单个主机,如果存储池已导入主机A,则必须从主机A先导出存储池,才能被安全导入到其他主机;当使用共享存储的zpool同时导入多个主机,则存储池数据将会被破坏;为降低此风险,每个主机都可使用genhostid命令生成唯一的host id值,用于标记zpool当前活动主机
  • pool-name :表示为存储池名称
  • pool-type :表示为存储池类型,默认不指定时为raidz,可选参数raidz、raidz1、raidz2、raidz3、mirror
  • raidz : 类似raid0,无冗余
  • raidz1 :类似raid5,可容忍一块磁盘损坏,至少需要三个磁盘,其中一个磁盘用于奇偶校验
  • raidz2 :类似raid6,可容忍两块磁盘损坏,至少需要四个磁盘,其中两个磁盘用于奇偶校验
  • raidz3 :类似raid7,可容忍三块硬盘损坏,至少需要五个磁盘,其中三个磁盘用于奇偶校验
  • mirror :类似raid1或raid10,同一个镜像组可以容忍一半的磁盘损坏
  • disk :表示组成存储池的磁盘列表,可以为磁盘名称(如sdb)、磁盘完整路径(如/dev/sdb)、磁盘id(可通过/dev/disk/by-id/查询,如ata-ST6000NM0115-1YZ110_ZAD1DR7M),为避免因磁盘盘符漂移导致zpool无法恢复,此处建议使用磁盘id方式指定
3.2、参考示例
参考示例如下,使用sdb、sdc创建mirror类型存储池mgspool
genhostid
zpool create -O canmount=off -o cachefile=none -o multihost=on mgspool mirror sdb sdc

4、部署集群

一个Lustre基础集群需包括一个MGS节点、一个MDS节点(可包含多个MDT)、一个OSS节点(可包含多个OST)、一个客户端节点

4.1、通用格式
1)部署MGS
  • 部署MGS
mkfs.lustre --mgs [ --fsname=<fsname> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
2)部署MDS
  • 部署MDT
mkfs.lustre --mdt [ --fsname=<fsname> ] [ --mgsnode=<mgs@nid> ] [ --index <n> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–mgsnode:指定MGS节点及网络接口,如172.16.21.91@tcp0
–index:指定MDT索引编号,编号从0开始,此编号为集群全局配置(如MDS节点1已部署两个MDT,编号为0和1,则MDS节点2部署MDT则需从2开始编号)
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
3)部署OSS
  • 部署OST
mkfs.lustre --ost [ --fsname=<fsname> ] [ --mgsnode=<mgs@nid> ] [ --index <n> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–mgsnode:指定MGS节点及网络接口,如172.16.21.91@tcp0
–index:指定OST索引编号,编号从0开始,此编号为集群全局配置(如OSS节点1已部署两个OST,编号为0和1,则OSS节点2部署OST则需从2开始编号)
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
4)客户端挂载
mount -t lustre <mgs@nid>:<fsname> <mountpoint>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/205832.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 自带返回方法onBackPress,返回上一级并且刷新页面内容获取最新的数据

onBackPress 返回上一级并且刷新页面内容获取最新的数据 onBackPress 方法是uinapp自带返回键方法&#xff0c;也就是在app和H5返回键 onBackPress() {setTimeout(() > {uni.switchTab({url: /pages/Users/index,})}, 300)return true}, methods: {}在这里 uni.switchTab…

制作rpm安装包时如何处理升级

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 升级命令执行顺序重要参数版本问题注意事项 升级命令 rpm安装包的升级…

【SparkSQL】DataFrame入门(重点:df代码操作、数据清洗API、通过JDBC读写数据库)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍DataFrame的组成、DataFrame的代码构建、DataFrame的入门操作、词频统计案例、电影数据分析、SparkSQL Shuffle 分区数目、SparkSQL 数据清洗API、DataFrame数据写出、DataFrame 通过JDBC读写数据库&#xff08;MyS…

压力测试+接口测试

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…

记i18n ally工具检测语言失败的一则思路

情况 只有某个文件检测不到汉字&#xff0c;其余都可以检测出来&#xff0c;困扰许久&#xff0c;发个博客记一下思路 解决方法&#xff1a; 1、肯定不是i18n ally工具的问题&#xff0c;因为其他的vue都能检测成功 2、是这个文件的问题 采用排除法 先删掉所有代码&#…

容器有挂载目录的时候,容器反向生成为镜像,挂载的内容不会保留。只有实打实拷贝进容器的反向生成镜像才会保留。

无容器目录挂载 1、也就是说宿主机未与容器进行路径映射&#xff0c;故我们可以直接使用指令: docker commit 容器名称/容器ID 像名:标签号&#xff0c;把容器保存为镜像; (其中镜像名和标签号是我们随机取的&#xff0c;新镜像名以及我们的标签号!) 2、我们在不能判断容器与宿…

甘草书店记:2023年10月24日 星期二 「在完美和高效之间寻求平衡」

书店装修设计图出了第一版&#xff0c;不能够完全满意也在不在预料之外。 中国人的哲学是中庸的哲学。在高效中去追逐完美&#xff0c;在追逐完美中提升效率。 分享余华先生在节目中的一段话&#xff1a; 一种阅读和一本书的相遇有时候也是一种缘分。但也可能就是所有人都说…

Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代&#xff0c;AIGC 可以帮助用户完成各种任务。作为 AIGC 主流模型的 DDPM&#xff0c;也时常在各种论文中被提起。DDPM 本质就是一种扩散模型&#xff0c;可以用来生成图片或者为图片去噪。 扩散模型定义了一个扩散的马尔科夫过程&#xff0c;每一步逐…

【C++】了解模板

这里是目录 前言函数模板函数模板的实例化类模板 前言 如果我们要交换两个数字&#xff0c;那么我们就需要写一个Swap函数来进行交换&#xff0c;那如果我们要交换char类型的数据呢&#xff1f;那又要写一份Swap的函数重载&#xff0c;参数的两个类型是char&#xff0c;那我们…

Rocketmq架构

NameServer&#xff1a;作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 Rocket mq name…

AI视觉识别有哪些工业应用

AI视觉识别&#xff0c;主要是利用人工智能算法对图像或视频数据进行分析和处理&#xff0c;以提取关键信息并执行筛选、判断、预警等任务。AI视觉识别涵盖多种应用&#xff0c;如人脸识别、目标检测和识别、图像分割、行为识别、视频分析等。本篇就简单介绍一下AI视觉识别的应…

传智杯第五届题解

B.莲子的机械动力学 分析&#xff1a;这题有个小坑&#xff0c;如果是00 0&#xff0c;结果记得要输出0。 得到的教训是&#xff0c;避免前导0出现时&#xff0c;要注意答案为0的情况。否则有可能会没有输出 #include<assert.h> #include<cstdio> #include<…

J签证、移民、绿卡都是怎么回事?

随着全球化的不断推进&#xff0c;越来越多的人开始关注国际间的移民与签证政策&#xff0c;其中包括J签证、移民以及绿卡的申请问题。本文将简要介绍J签证、移民绿卡的基本概念&#xff0c;并提供相关申请的一般步骤&#xff0c;以帮助读者更好地了解这些程序。 首先&#xff…

【raect.js + hooks】useRef 搭配 Houdini 创造 useRipple

水波纹点击特效 really cool&#xff0c;实现水波纹的方案也有很多&#xff0c;笔者经常使用 material 组件&#xff0c;非常喜欢 mui 中的 ripple&#xff0c;他家的 ripple 特效就是通过 css Houdini 实现的。 今天&#xff0c;我们将复刻一个 ripple&#xff0c;并封装成 ho…

vue3 router-view 使用keep-alive报错parentcomponent.ctx.deactivate is not a function

问题 如下图&#xff0c;在component组件上添加v-if判断&#xff0c;会报错: parentcomponent.ctx.deactivate is not a function 解决方法 去除v-if&#xff0c;将key直接添加上。由于有的公用页面&#xff0c;需要刷新&#xff0c;不希望缓存&#xff0c;所以需要添加key…

【23真题】快跑,考太偏了这所211!

今天分享的是23年湖南师范997的信号与系统试题及解析。 小马哥Tips&#xff1a; 本套试卷难度分析&#xff1a;22年湖南师范997考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题难度中等&#xff0c;题量适中&#xff0c;但是…

升级python后sudo apt-get update报错

sudo apt-get update 报错&#xff1a; sh: /usr/lib/cnf-update-db: /usr/bin/python3.7.5: bad interpreter: No such file or directory Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success if /usr/bin/test -w /var/lib/c…

CANDENCE: PCB 如何高亮网络、器件

PCB 如何高亮网络、器件 开始前先学习一个单词&#xff1a;assign CANDECE 高亮网络 step1: 选择一个颜色&#xff1a;红色 step2: 筛选要高亮什么&#xff1a;网络 or 器件&#xff0c;这里选择网络。 step3&#xff1a;鼠标点击要高亮的网络&#xff1a; 这里是GND 这里…

罐装葡萄酒会成为主流吗?

许多人认为罐装葡萄酒可能是葡萄酒行业的下一个大事件&#xff0c;一个有待提出的问题&#xff0c;罐装葡萄酒会成为主流吗&#xff1f;来自云仓酒庄品牌雷盛红酒分享还是这种形式的基础永远会限制它的吸引力&#xff1f;在这里&#xff0c;我们一起来探讨支持和反对罐装葡萄酒…

力扣题:单词-11.20

力扣题-11.20 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;58. 最后一个单词的长度 解题思想&#xff1a;按空格划分&#xff0c;然后统计单词长度即可 class Solution(object):def lengthOfLastWord(self, s):""":type s: str…
最新文章