Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷,分布式卷,分布式复制卷,纠删卷

操作系统

内核

角色

Ip地址

说明

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

客户端 client

192.168.80.119

挂载存储业务机器

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

客户端 client

192.168.80.93

brick端(manager/node)

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

存储节点

192.168.80.183

brick端(manager/node)

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

存储节点

192.168.80.158

brick端(manager/node)

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

存储节点

192.168.80.159

brick端(manager/node)

CentOS Stream 9 x86_64

5.14.0-427.el9.x86_64

存储节点

192.168.80.160

brick端(manager/node)

环境准备

存储节点全部创建新的目录

mkdir -pv  /gfs/vdb1/gv0

将新的虚拟机磁盘(20G)全部划分为一个区,如果磁盘较大的话,也是分为一个区,给它20G的大小,保证挂载磁盘内存的一致性。

mkfs.ext4 /dev/vdb1

磁盘挂载完成之后需要查看磁盘的uuid,能够确保永久挂载。

blkid

如图,可以看到分区的uuid

在/etc/fstab文件中添加一行

UUID=9e4c220f-4825-4896-9eb4-573f8f045d49  /gfs/vdb1/gv0  ext4    defaults   0 0

UUID                                                                      挂载的目录  磁盘的文件系统

修改主机名称

hostnamectl set-hostname --static gfs-client119

hostnamectl set-hostname --static gfs-client93

hostnamectl set-hostname --static gfs-node183

hostnamectl set-hostname --static gfs-node158

hostnamectl set-hostname --static gfs-node159

hostnamectl set-hostname --static gfs-node160

修改hosts文件

cat >>/etc/hosts<<ldp

192.168.80.93  clant-93

192.168.80.119 clant-119

192.168.80.158 gfs-node158

192.168.80.159 gfs-node159

192.168.80.160 gfs-node160

192.168.80.183 gfs-node183

ldp

所有服务器配置时间

yum -y install chrony

cat /etc/chrony.conf

pool ntp1.aliyun.com iburst

pool ntp2.aliyun.com iburst

sourcedir /run/chrony-dhcp

driftfile /var/lib/chrony/drift

makestep 1.0 3

rtcsync

keyfile /etc/chrony.keys

ntsdumpdir /var/lib/chrony

leapsectz right/UTC

logdir /var/log/chrony

所有服务器下载源

[root@gfs-manager183 gv0]# yum list 'centos-release-gluster*'

Repository centos-gluster9 is listed more than once in the configuration

上次元数据过期检查:0:04:10 前,执行于 2024年03月06日 星期三 14时32分03秒。

已安装的软件包

centos-release-gluster9.noarch                     1.0-2.el9s                    @extras-common

可安装的软件包

centos-release-gluster10.noarch                    1.0-2.el9s                    extras-common

centos-release-gluster11.noarch                    1.0-1.el9s                    extras-common

下载源

yum -y install centos-release-gluster9.noarch

集群节点安装glusterfs-server9

yum clean all

yum makecache

所有节点安装

yum -y install centos-release-gluster9.noarch

183 158 159 160主机安装

yum -y install  glusterfs-server

删除

yum remove glusterfs-server

设置开启自启和启动

systemctl enable glusterd

systemctl start glusterd

出现的问题

启动失败

删除/var/lib/glusterd/里面的所有文件

再次启动

systemctl start glusterd

将node节点加入集群

在任意一台机器上输入

gluster peer probe gfs-node158

gluster peer probe gfs-node159

gluster peer probe gfs-node160 

gluster peer probe gfs-node183

这里使用ip,主机名,主机名别名都可以

出现的错误

这里提示的错误,可以查看当前主机的的hosts文件,里面的ip地址对应的别名或者主机名称是否和当前输入的gluster peer probe gfs-manager183  里面的 gfs-manager183是否一致。如果不一致,则修改。

查看集群节点状态

gluster peer status

这里只显示本机以外的节点信息

然后在所有存储上都可以使用该命令来验证检查

158主机

159主机

160主机

183主机

可以看到所有的集群节点都可以看到其他节点的信息。

查看所有节点的信息

在这里为了较少篇幅,不显示所有节点的显示的信息

gluster pool list

158主机

删除节点(按需删除)

gluster peer detach 节点名称

设置GlusterFS卷

在所有服务器上执行以下命令创建一个GlusterFS卷:

mkdir -pv /data/brick1/gv0

创建卷显示错误

如图所示

[root@gfs-node158 ~]# gluster volume create gfsfbs  gfs-node158:/dev/vdb1  gfs-node159:/dev/sdb1 force

volume create: gfsfbs: failed: The provided path /dev/vdb1 which is already present, is not a directory

这里就是,本人使用的是gluster volume create gfsfbs  gfs-node158:/dev/vdb1  gfs-node159:/dev/sdb1 force该命令,直接指向的主机的磁盘分区名称,但是在此之前本人将该分区进行了挂载,导致此情况的发生。

解决:将该分区和挂载的目录umount(取消挂载)

创建分布式卷

没有对文件进行分块处理;

通过扩展文件属性保存 HASH值;

支持的底层文件系统有 ext3 、ext4 、ZFS 、XFS等

特点:

文件分布在不同的服务器,不具备冗余性;

更容易和廉价地扩展卷的大小;

单点故障会造成数据丢失;

依赖底层的数据保护。

然后在任意一台服务器 上执行创建卷命令:

 gluster volume create gfsfbs  gfs-node158:/gfs/vdb1/gv0 gfs-node159:/gfs/vdb1/gv0

出现

volume create: gfsfbs: failed: The brick gfs-node158:/gfs/vdb1/gv0 is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.

这个错误提示表示:创建卷失败,因为brick gfs-node158:/gfs/vdb1/gv0是一个挂载点。请在挂载点下创建一个子目录,并将其用作brick目录。或者,如果您想覆盖此行为,请在命令末尾使用'force'。

我们输入强制:

gluster volume create gfsfbs  gfs-node158:/gfs/vdb1/gv0  gfs-node159:/gfs/vdb1/gv0 force

显示创建成功

启动

gluster volume start gfsfbs

gfsfbs为创建卷的名称

查看状态

gluster volume info  gfsfbs

使用客户端进行挂载

mount.glusterfs gfs-node158:/gfs/vdb1/gv0 /data/gv0

显示挂载失败

出现的错误就是,挂载的是该主机的目录,但是本次我们是创建的分布式卷,所以需要输入分布式卷名称,而不是单独的主机名和目录名称

mount -t glusterfs gfs-node158:gfsfbs /data/gv0

如果显示

这个错误提示是因为在创建 GlusterFS 卷时,brick 被创建在了系统的根分区。建议不要使用系统的根分区作为存储后端。如果你想覆盖这个行为,可以在命令末尾添加 'force'。

93主机上创建10个文件

for i in `seq 10`; do dd if=/dev/zero of=$i.txt bs=1M count=10;done

158主机显示

159主机显示

创建复制卷

gluster volume create gv0 replica 3 \

   gfs-node160:/gfs/vdb1/gv0/

   gfs-node183:/gfs/vdb1/gv0/

创建详细过程

[root@gfs-node160 ~]# gluster volume create gv0 replica 2 \

gfs-node160:/gfs/vdb1/gv0/ \

gfs-node183:/gfs/vdb1/gv0/

Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.

Do you still want to continue?

 (y/n) y

volume create: gv0: failed: The brick gfs-node160:/gfs/vdb1/gv0 is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.

[root@gfs-node160 ~]# echo $?

1

[root@gfs-node160 ~]# gluster volume create gv0 replica 2    gfs-node160:/gfs/vdb1/gv0/    gfs-node183:/gfs/vdb1/gv0/ force

volume create: gv0: success: please start the volume to access data

gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

gluster volume create gv0 replica 2    gfs-node160:/gfs/vdb1/gv0/    gfs-node183:/gfs/vdb1/gv0/ force

查看卷状态

gluster volume info gv0

[root@gfs-node160 ~]# gluster volume info gv0

Volume Name: gv0

Type: Replicate

Volume ID: 203fe180-91f6-44f1-afb7-b5a6d8bcfa11

Status: Created

Snapshot Count: 0

Number of Bricks: 1 x 2 = 2

Transport-type: tcp

Bricks:

Brick1: gfs-node160:/gfs/vdb1/gv0

Brick2: gfs-node183:/gfs/vdb1/gv0

Options Reconfigured:

cluster.granular-entry-heal: on

storage.fips-mode-rchecksum: on

transport.address-family: inet

nfs.disable: on

performance.client-io-threads: off

启动

[root@gfs-node160 ~]# gluster volume start gv0

volume start: gv0: success

再次查看状态

[root@gfs-node160 ~]# gluster volume info  gv0

Volume Name: gv0

Type: Replicate

Volume ID: 203fe180-91f6-44f1-afb7-b5a6d8bcfa11

Status: Started

Snapshot Count: 0

Number of Bricks: 1 x 2 = 2

Transport-type: tcp

Bricks:

Brick1: gfs-node160:/gfs/vdb1/gv0

Brick2: gfs-node183:/gfs/vdb1/gv0

Options Reconfigured:

cluster.granular-entry-heal: on

storage.fips-mode-rchecksum: on

transport.address-family: inet

nfs.disable: on

performance.client-io-threads: off

查看创建的卷

gluster volume  list

出现的问题

mount 挂载失败

提示信息如下

[root@gfs-node93 ~]# mount -t glusterfs gv0:/gfs/vdb1/gv0  /data/gv0

Mounting glusterfs on /data/gv0 failed.

[root@gfs-node93 ~]# mount -t glusterfs gfs-node160:/gfs/vdb1/gv0  /data/gv0

Mounting glusterfs on /data/gv0 failed.

排查思路

排查思路:首先查看gfs服务端日志详细信息,日志默认在/var/log/glusterfs下面。查看glusterd.log日志详细信息

[2024-03-11 01:56:30.028377 +0000] I [MSGID: 106496] [glusterd-handshake.c:968:__server_getspec] 0-management: Received mount request for volume /gfs

[2024-03-11 01:56:30.028462 +0000] E [MSGID: 106048] [glusterd-handshake.c:475:build_volfile_path] 0-management: Failed to get volinfo []

[2024-03-11 01:56:30.028490 +0000] E [MSGID: 106128] [glusterd-handshake.c:1101:__server_getspec] 0-management: Failed to find peer info []

[2024-03-11 01:56:30.028497 +0000] E [MSGID: 106176] [glusterd-handshake.c:1137:__server_getspec] 0-management: Failed to mount the volume

[2024-03-11 02:04:26.355896 +0000] I [MSGID: 106496] [glusterd-handshake.c:968:__server_getspec] 0-management: Received mount request for volume gv0                                

查看日志之后发现服务端没有找到gv0,第二次是找不到卷。之后想了以下gfs-node160:/gfs/vdb1/gv0  gfs-node160主机和183主机创建的是gv0的卷

之后输入以下的命令

mount  -t  glusterfs gfs-node160:gv0   /data/gv0

命令说明:

-t  glusterfs :指定挂载的文件系统类型

gfs-node160:gv0:指定挂载的主机的node节点和卷名称,二者使用冒号分隔

/data/gv0:指定本机的挂载目录

测试

在客户端创建完成20个100MB的文件,创建完成之后。客户端发起同步数据,到两个node节点,到同步完成之后,基本达到了实时传输数据的效果。

结合以下的三个

磁盘IO

网络IO

硬件上的软件工作

创建分布式复制卷

命令

gluster volume create dis-rep replica 4  transport tcp  gfs-node183:/gfs/vdb1/gv0 \

gfs-node158:/gfs/vdb1/gv0 \

gfs-node159:/gfs/vdb1/gv0 \

gfs-node160:/gfs/vdb1/gv0  force

出现的问题

[root@gfs-node158 ~]# gluster volume create dis-rep replica 4  transport tcp  gfs-node183:/gfs/vdb1/gv0 \

gfs-node158:/gfs/vdb1/gv0 \

gfs-node159:/gfs/vdb1/gv0 \

gfs-node160:/gfs/vdb1/gv0

volume create: dis-rep: failed: The brick gfs-node158:/gfs/vdb1/gv0 is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.

创建卷失败:dis-rep错误:brick gfs-node158:/gfs/vdb1/gv0 是一个挂载点。请在挂载点下创建一个子目录,并将其用作brick目录。或者,如果你想覆盖这种行为,可以在命令末尾使用 'force'。

查看状态

启动卷组

gluster volume start dis-rep

查看卷组的状态信息

[root@gfs-node158 ~]# gluster volume info

Volume Name: dis-rep

Type: Replicate

Volume ID: 5c75db30-e5a2-4b7f-9364-afc5e036307c

Status: Started

Snapshot Count: 0

Number of Bricks: 1 x 4 = 4

Transport-type: tcp

Bricks:

Brick1: gfs-node183:/gfs/vdb1/gv0

Brick2: gfs-node158:/gfs/vdb1/gv0

Brick3: gfs-node159:/gfs/vdb1/gv0

Brick4: gfs-node160:/gfs/vdb1/gv0

Options Reconfigured:

cluster.granular-entry-heal: on

storage.fips-mode-rchecksum: on

transport.address-family: inet

nfs.disable: on

performance.client-io-threads: off

客户端进行挂载

mount -t glusterfs gfs-node159:dis-rep /mnt

基本性能测试

for i in `seq 300`; do dd if=/dev/zero of=$i-$RANDOM.txt bs=1M count=100;done

创建纠删卷

创建命令

gluster volume create disperse-volume disperse 4 transport tcp \

gfs-node158:/gfs/vdb1/gv0 \

gfs-node159:/gfs/vdb1/gv0 \

gfs-node160:/gfs/vdb1/gv0 \

gfs-node183:/gfs/vdb1/gv0

disperse-volume为卷名称

出现问题

[root@gfs-node158 gv0]# gluster volume create disperse-volume disperse 4 transport tcp gfs-node158:/gfs/vdb1/gv0 gfs-node159:/gfs/vdb1/gv0 gfs-node160:/gfs/vdb1/gv0 gfs-node183:/gfs/vdb1/gv0

There isn't an optimal redundancy value for this configuration. Do you want to create the volume with redundancy 1 ? (y/n) y

volume create: disperse-volume: failed: The brick gfs-node158:/gfs/vdb1/gv0 is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.

创建卷失败:分散卷错误:brick gfs-node158:/gfs/vdb1/gv0 是一个挂载点。请在挂载点下创建一个子目录,并将其用作brick目录。或者,如果你想覆盖这种行为,可以在命令末尾使用 'force'。

修改创建命令

gluster volume create disperse-volume disperse 4 transport tcp \

gfs-node158:/gfs/vdb1/gv0 \

gfs-node159:/gfs/vdb1/gv0 \

gfs-node160:/gfs/vdb1/gv0 \

gfs-node183:/gfs/vdb1/gv0  force

查看状态

启动disperse-volume卷

[root@gfs-node158 gv0]# gluster volume start disperse-volume

volume start: disperse-volume: success

查看状态

[root@gfs-node158 gv0]# gluster volume info

Volume Name: disperse-volume

Type: Disperse

Volume ID: 404b9906-21cf-4d2c-aa99-f8bb8b24b4c4

Status: Started

Snapshot Count: 0

Number of Bricks: 1 x (3 + 1) = 4

Transport-type: tcp

Bricks:

Brick1: gfs-node158:/gfs/vdb1/gv0

Brick2: gfs-node159:/gfs/vdb1/gv0

Brick3: gfs-node160:/gfs/vdb1/gv0

Brick4: gfs-node183:/gfs/vdb1/gv0

Options Reconfigured:

storage.fips-mode-rchecksum: on

transport.address-family: inet

nfs.disable: on

在客户端进行挂载

mount -t glusterfs gfs-node159:disperse-volume /mnt

删除文件之后,df -h 查看磁盘占用未释放

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

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

相关文章

开展“人工智能+”行动,Gooxi与你一起奔赴新质未来

在今年两会上&#xff0c;“新质生产力”成为了反复被提及的热词。在政府发布的工作报告中“大力推进现代化产业体系建设&#xff0c;加快发展新质生产力”更是被置于政府工作任务的首位。具体说来&#xff0c;发展新质生产力包括产业链升级、培育新产业、推进数字经济建设三方…

linux安装anconda

第一步&#xff1a; 下载anaconda 下载地址&#xff1a;&#xff08;选择Linux版本的&#xff09; https://repo.anaconda.com/archive/第二步&#xff1a; 把下载好的anaconda放到指定的路径 然后在该路径下&#xff08;我是直接放属于我的根目录下&#xff09; 输入以下命令…

国创证券|资源再生概念持续活跃,超越科技两连板,大地海洋等走高

资源再生概念15日盘中再度走强&#xff0c;截至发稿&#xff0c;超越科技涨停斩获两连板&#xff0c;深水海纳涨超14%&#xff0c;大地海洋涨超12%&#xff0c;华新环保涨近9%&#xff0c;天奇股份、格林美、怡球资源等涨超5%。 消息面上&#xff0c;3月13日&#xff0c;国务院…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单&#xff0c;它不仅包括了全文搜索功能&#xff0c;还可以进行以下工作: 一个分布式的实时文档…

【2024第一期CANN训练营】2、AscendCL概述

文章目录 【2024第一期CANN训练营】2、AscendCL概述1. AscendCL架构及基本概念1.1 什么是AscendCL&#xff1f;1.2 AscendCL的优势1.3 AscendCL应用场景1.4 基本概念 2. AscendCL接口调用流程2.1 流程概述2.2 详细步骤2.3 头文件和库文件 3. 准备开发和运行环境3.1 部署环境3.2…

便携式气象站的工作原理

TH-BQX9便携式自动气象观测仪器是一种集成了多种传感器和自动化技术的气象监测设备&#xff0c;以其便携性、自动化和高精度等特点&#xff0c;广泛应用于气象、环保、农业、科研等领域。 首先&#xff0c;它的便携性是其最大的优势之一。设计紧凑、轻便易携&#xff0c;使得用…

【送书福利!第一期】《ARM汇编与逆向工程》

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f618;《CTF专栏》超级详细的解析&#xff0c;宝宝级教学让你从蹒跚学步到健步如飞&#x1f648; &#x1f60e;《大数据专栏》大数据从0到秃头&#x1f47d;&…

202212 CSP认证 | JPEG 解码

JPEG 解码 一道特别幸福简单的第三题…都不敢想象在考场上碰见这种题目会有多幸福。直接按照题目意思做就好了&#xff0c;感觉比第二题还简单…而且数组特别小完全没有超时压力 补充一个对小数处理的部分&#xff0c;包括本题涉及的四舍五入取整以及输出取整&#xff1a;C 实…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地&#xff0c;一个可以远程加载 具体形成原因由代码和环境配置文件决定…

2024智慧农场系统微信小程序前端如何上传以及配置

2024智慧农场系统微信小程序前端如何上传以及配置 首先下载微信开发者工具 下载好以后打开&#xff0c;然后导入项目 前端修改&#xff1a;siteinfo.js 里面的域名信息 改完之后开始在微信开发者工具中开发工具中编译、上传、发布即可

【how2j练习题】HTML部分综合练习

练习题 1 <html><h1>英雄联盟 &#xff08;电子竞技类游戏&#xff09;</h1> <p> <strong>《英雄联盟》</strong>&#xff08;简称lol&#xff09;是由美国<i>Riot Games</i>开发&#xff0c;中国大陆地区由腾讯游戏运营的网络…

软考78-上午题-【面向对象技术3-设计模式】-结构型设计模式01

一、适配器模式 1-1、意图 个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 1-2、结构 适配器模式分为&#xff1a; 1、适配器类模式&#xff1b; 2、适配器对象模式 类适配器使用多重继承对一个接口与另…

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;

理解数字证书,守护你的大数据世界

随着大数据时代的来临&#xff0c;信息的安全性和可靠性成为了公众和企业关注的焦点。在这样的背景下&#xff0c;数字证书作为一种保障信息安全的重要工具&#xff0c;其重要性日益凸显。本文将从数字证书的基本概念、工作原理及其在大数据时代的应用等方面&#xff0c;为大家…

数据库管理-第161期 数据库,走着瞧(20240318)

数据库管理161期 2024-03-18 数据库管理-第161期 数据库&#xff0c;走着瞧&#xff08;20240318&#xff09;MySQLSACC走着瞧RACAIOps 总结 数据库管理-第161期 数据库&#xff0c;走着瞧&#xff08;20240318&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&am…

HTML + CSS 核心知识点- 定位

简述&#xff1a; 补充固定定位也会脱离文档流、不会占据原先位置 1、什么是文档流 文档流是指HTML文档中元素排列的规律和顺序。在网页中&#xff0c;元素按照其在HTML文档中出现的顺序依次排列&#xff0c;这种排列方式被称为文档流。文档流决定了元素在页面上的位置和互相之…

QT进阶-----------认识QT相关的模块(第四天)

1、关于Visual Studio与QT Creator的不同导入方式 Visual Studio作为windows宇宙最强编辑器以及编译器&#xff0c;它相当的好用&#xff0c;作为一个学了一年QT的菜鸟&#xff0c;总结了一些关于VS以及QT Creator两者的不同。 首先&#xff0c;在VS中qt是作为第三方库导入到…

怎么做好独立站的SEO优化

随着全球贸易的蓬勃发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;并将目光投向了外贸网站。然而&#xff0c;在竞争激烈的外贸市场中&#xff0c;如何写出吸引人的文章&#xff0c;以及如何优化网站以在搜索引擎中脱颖而出&#xff0c;成为了外贸独立网站必须面…

机器学习-绪论

机器学习致力于研究如何通过计算的手段、利用经验来改善系统自身的性能。在计算机系统中&#xff0c;“经验”通常以“数据”的形式存在&#xff0c;因此&#xff0c;机器学习所研究的主要内容&#xff0c;是关于在计算机上从数据中产生“模型”的算法&#xff0c;即“学习算法…

PHP<=7.4.21 Development Server源码泄露漏洞 例题

打开题目 dirsearch扫描发现存在shell.php 非预期解 访问shell.php&#xff0c;往下翻直接就看到了flag.. 正常解法 访问shell.php 看见php的版本是7.3.33 我们知道 PHP<7.4.21时通过php -S开起的WEB服务器存在源码泄露漏洞&#xff0c;可以将PHP文件作为静态文件直接输…