Centos strema 9 环境部署Glusterfs9

news2025/1/18 6:07:35

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

操作系统

内核

角色

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.coloradmin.cn/o/1518868.html

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

相关文章

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖&#xff0c;放在项目路径下&#xff0c;以后在运行项目前&#xff0c;先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的&#xff1a;req.txt | dev.txt # 两种方式&#xff1a; 1、虚拟环境所有装的第三方&…

分享6款非常炫酷的前端动画特效(附在线演示)

分享6款非常不错的项目动画特效 其中有three.js特效、canvas特效、CSS动画、SVG特效等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 Three.js 3D游戏场景动画特效 基于Three.js的HTML5 3D动画&#xff0c;这个动…

【学习】感受野

感受野&#xff08;receptive field&#xff09;是指在神经网络中&#xff0c;某一层输出的特征图上的一个像素点对应输入图像的区域大小。在深度神经网络中&#xff0c;随着网络层数的增加&#xff0c;特征图的感受野也会逐渐增大。这是因为每一层的卷积操作都会扩大感受野。 …

python面向对象的三大特性:封装,继承,多态

1、面向对象有哪些特性 三种&#xff1a;封装性、继承性、多态性 2、Python中的封装 在Python代码中&#xff0c;封装有两层含义&#xff1a; ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限&#xff0c;不能直…

设计模式二三事(含基础使用示例)

设计模式是众多软件开发人员经过长时间的试错和应用总结出来的&#xff0c;解决特定问题的一系列方案。现行的部分教材在介绍设计模式时&#xff0c;有些会因为案例脱离实际应用场景而令人费解&#xff0c;有些又会因为场景简单而显得有些小题大做。 本文会结合在美团金融服务…

苹果Find My App用处多多,产品认准伦茨科技ST17H6x芯片

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

【Git】error: bad signature 0xb86f1e1 和 bfatal: index file corrupt

一、问题 之前都好好的&#xff0c;今天执行 git add .的时候突然报错 报错原因翻译成中文&#xff1a;索引文件损坏 二、解决方法 方法1&#xff1a; 删除.git隐藏文件夹中的index文件 然后执行 git reset 重新生成index文件 git reset 方法2&#xff1a; 重新从远程克隆…

用户和组及权限管理

用户至少属于一个组,在创建时如果不指定组,将会创建同名的组 用户只能有一个基本组(主组),但可以隶属于多个附加组 如果一个组作为某用户的基本组,此组将不能被删除 UID: 用户标识 GID: 组的标识 root管理员的uid及gid 都为0 用户的配置文件: 1./etc/passwd test:x:1000:1000…

文献速递:深度学习乳腺癌诊断---基于深度学习的图像分析预测乳腺癌中HE染色组织病理学图像的PD-L1状态

Title 题目 Deep learning-based image analysis predicts PD-L1 status from H&E-stained histopathol ogy images in breast cancer 基于深度学习的图像分析预测乳腺癌中H&E染色组织病理学图像的PD-L1状态 01 文献速递介绍 编程死亡配体-1&#xff08;PD-L1&…

代码随想录算法训练营三刷day24 | 回溯算法 之 理论基础 77. 组合

三刷day24 理论基础77. 组合递归函数的返回值以及参数回溯函数终止条件单层搜索的过程 理论基础 回溯法解决的问题都可以抽象为树形结构。 因为回溯法解决的都是在集合中递归查找子集&#xff0c;集合的大小就构成了树的宽度&#xff0c;递归的深度&#xff0c;都构成的树的深…

网络安全,硬防迪云

要减少被攻击的频率&#xff0c;游戏开发者可以采取以下措施&#xff1a; 1. 强化安全措施&#xff1a;确保游戏服务器和用户数据的安全性&#xff0c;加密网络传输&#xff0c;防止黑客攻击和数据泄露。 2. 更新和修复漏洞&#xff1a;定期检查游戏代码和服务器&#xff0c;…

css3 实现html样式蛇形布局

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …

如何使用第三方接入淘宝商品详情(主图,详情图)

1、找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥&#xff1a;在使用API接口之前&#xff0c;需要注册并获取API密钥。API密钥是识别身份的唯一标识符…

区块链技术中的共识机制算法:以权益证明(PoS)为例

引言&#xff1a; 在区块链技术的演进过程中&#xff0c;共识机制算法扮演着至关重要的角色。除了广为人知的工作量证明&#xff08;PoW&#xff09;外&#xff0c;权益证明&#xff08;Proof of Stake&#xff0c;PoS&#xff09;也是近年来备受关注的一种共识算法。 …

C# 读取多条数据记录导出到 Word 标签模板

目录 应用需求 实现步骤 范例运行环境 配置Office DCOM 实现代码 组件库引入 ​编辑 核心代码 小结 应用需求 将数据库数据表中的数据输出并打印&#xff0c;WORD 是一个良好的载体&#xff0c; 在应用项目里&#xff0c;许多情况下我们会使用数据记录结合 WORD 标签模…

Halcon OCR文字识别

1、OCR文字识别 FontFile : Universal_0-9_NoRej dev_update_window (off) read_image (bottle, bottle2) get_image_size (bottle, Width, Height) dev_open_window (0, 0, Width, Height, black, WindowHandle) set_display_font (WindowHandle, 16, mono, true, false) dev…

妇女节专访|勇敢踏入未知领域,她的 Web3 奇妙之旅

Web3 的出现席卷着数字世界的剧烈变革&#xff0c;让每个人与互联网和数字资产互动的方式产生了深刻的变化。Web3 所强调的去中心化特征&#xff0c;使其成为人们对理想未来世界的一个缩影。而作为一个以技术为核心的新兴领域&#xff0c;Web3 也难以避免传统认知中男性占主导地…

信息检索(十一):Nonparametric Decoding for Generative Retrieval

Nonparametric Decoding for Generative Retrieval 摘要1. 引言2. 相关工作3. 非参数解码3.1 关键优势3.2 Base Np3.3 异步 Np3.4 对比 Np3.5 聚类 4. 实验设置4.1 基线4.2 数据集和评价指标4.3 构建CE 的细节 5. 实验结果5.1 普通解码 vs Np 解码5.2 非参数解码的优点5.3 什么…

Win11安装Plsql140报错2503

一、安装异常 二、解决办法 出现上述问题&#xff0c;主要是因为msi包安装的权限问题&#xff0c;使用管理员权限安装即解决 。cmd控制台以管理员身份打开WINR&#xff09;->(SHIFTCTRLRNTER)&#xff0c;进入到msi安装包目录下&#xff0c;以管理员身份安装即可&#xff1…

保姆级OpenSSL下载及安装教程

下载地址下载步骤安装步骤环境变量配置查看是否安装成功下载地址 官网链接:(https://slproweb.com/products/Win32OpenSSL.html ) 点击跳转 下载步骤 以下步骤截图,以当前官网界面为标准,后有变动请提示博主修改。 点击链接跳转后界面为 往下滚动找到安装包下载按钮…