gfs分布式文件系统(理论+实验+故障模拟)(代码片段)

TaKe___Easy TaKe___Easy     2023-02-20     669

关键词:

GFS

一、前言理论概述

1.1 概述

  • GFS(GlusterFS)是一款开源的分布式文件系统。
  • FS:文件系统。由文件系统接口(API)、对对象管理的软件集合、对象及属性组成
  • 文件系统作用
    • 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
    • 具体的说文件系统就是负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
  • 文件系统的挂载使用
    • 除根(/)文件系统以外的文件系统创建后要使用的话,需要先挂载到挂载点后才可以被访问
    • 挂载点即分区设备文件关联的某个目录文件
  • GFS组成
    • 存储服务器
    • 客户端(其中客户端的定位比较重要,因为它是无元数据服务器)
    • NFS/Samba存储网关
  • 元数据服务器的作用
    • 存储元数据,帮用户定位文件的位置、索引等信息
    • 有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用
  • GFS提供了一个全局统一命名空间。此命名空间提供了一个API,此API是用户访问GFS服务器中数据的唯一入口
  • 弹性卷管理:RAIN(基于容错、读写性能等技术)可以在分布式文件系统之上可以使用RAID卷的集中管理
  • 基于标准协议:客户端和存储服务器交互需要借助网络,而相关的网络协议包括TCP/IP协议

1.2 GFS特点

  • 1.扩展性和高性能
    • 可扩展性,扩展节点
    • 通过多节点提高性能
  • 2.高可用性
    • 不存在单点故障,有备份机制
    • 类似 Raid 的容灾机制
  • 3.全局统一命名空间
    • 集中化管理,类比 API 的性质/概念
    • 系统里根据他命名所定义的隔离区域,是一个独立空间
    • 统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器
  • 4.弹性卷管理
    • 方便扩容及对后端存储集群的管理与维护
    • 较为复杂
  • 5.基于标准协议
    • 基于标准化的文件使用协议

1.3 GFS术语

  • 1.Brick(块存储服务器):实际存储用户数据的服务器
  • 2.Volume:本地文件系统的“分区”
  • 3.FUSE:用户空间的文件系统(类比EXT4),这是一个伪文件系统,用户端的交换模块
  • 4.VFS(虚拟端口):虚拟的内核态文件系统。
  • 5.Glusterd(服务):运行在存储节点的进程(客户端运行的是gluster client)

1.4 GFS构成与架构

  • GFS的架构
    • 存储服务器
    • 存储节点信息
  • GFS是模块化堆栈式架构
    • 模块化:类似linux的编译安装。很多功能都可以做定制的,通过软件开发的方式封装为模块,然后按需使用或者不使用。GFS也是这样把功能封装为一个个模块,通过加载/调用/启动的方式就可以实现对应的功能
    • 堆栈式架构设计:通过对模块不同功能的组合来实现复杂功能

二、GFS的卷类型

2.1 分布式卷

  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等等
  • 特点:
    • 文件分布在不同的服务器,不具备冗余性
    • 更容易和廉价地扩展卷的大小
    • 单点故障会造成数据丢失
    • 依赖底层的数据保护

2.2 条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,开始Raid0
  • 特点
    • 数据被分割成更小块分布到块服务器群中的不同条带区
    • 分布减少了负载且更小的文件加速了存取的速度
    • 没有数据冗余

2.3 复制卷

  • 同一文件保存一份或多份副本
  • 因为要保存副本,所以磁盘利用率较低
  • 若多个节点上的存储空间不一致,将按照木桶消息取最低节点的容量作为该卷的总容量
  • 特点
    • 卷中所有的服务器均保存一个完整的副本
    • 卷的副本数量可由客户在创建的时候决定
    • 至少有两个块服务器或更多服务器
    • 具备冗余性

2.4 分布式条带卷

  • 兼顾分布式卷和条带卷的功能
  • 主要用于大文件访问处理
  • 至少需要4台服务器

2.5 分布式复制卷

  • 健步分布式卷和复制卷的功能
  • 用于需要冗余的情况

三、GFS工作原理(工作流程)

  • 1、客户端或应用程序通过GlusterFS的挂载点访问数据
  • 2、linux系统内核通过VFS API收到请求并处理
  • 3、VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给GlusterFS client端
  • 4、GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
  • 5、通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上

四、弹性HASH算法

  • 通过HASH算法得到一个32位的整数
  • 划分为N个连续的子空间,每个空间对应一个Brick
  • 弹性HASH算法的优点
  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

五、 GFS群集部署

5.1 部署环境

  • node1 IP:192.168.131.10 五块磁盘大小分别为30G,40G,50G,60G
  • node2 IP:192.168.131.11 五块磁盘大小分别为30G,40G,50G,60G
  • node3 IP:192.168.131.12 五块磁盘大小分别为30G,40G,50G,60G
  • node4 IP:192.168.131.13 五块磁盘大小分别为30G,40G,50G,60G
  • 以上四台为GFS服务端,以下一台为GFS客户端(测试用)
  • Server IP:192.168.131.14

5.2 脚本批量格式化创建(所有节点执行)

[root@localhost ~]# hostnamectl set-hostname node1     【分别将4台node节点主机名修改】
[root@localhost ~]# su
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld.service 
[root@node1 ~]# vim /opt/fdisk.sh

#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEVdo
   echo -e "n\\np\\n\\n\\n\\nw\\n" | fdisk /dev/$VAR &> /dev/null
   mkfs.xfs /dev/$VAR"1" &> /dev/null   mkdir -p /data/$VAR"1" &> /dev/null
   echo "/dev/$VAR"1" /data/$VAR"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
[root@node1 ~]# chmod +x /opt/fdisk.sh 
[root@node1 ~]# cd /opt/
[root@node1 opt]# ./fdisk.sh 
[root@node1 opt]# df -hT                      【查看下/dev/sdb-e是否创建成功】
[root@node1 opt]# mkfs.xfs /dev/sdc1          【如果不成功需要手动格式化后刷新】
[root@node1 opt]# mount -a                    【刷新】
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        26G  3.7G   22G   15% /
devtmpfs       devtmpfs  978M     0  978M    0% /dev
tmpfs          tmpfs     993M     0  993M    0% /dev/shm
tmpfs          tmpfs     993M  9.1M  984M    1% /run
tmpfs          tmpfs     993M     0  993M    0% /sys/fs/cgroup
/dev/sda1      xfs       497M  151M  346M   31% /boot
tmpfs          tmpfs     199M   12K  199M    1% /run/user/42
tmpfs          tmpfs     199M     0  199M    0% /run/user/0
/dev/sdb1      xfs        30G   33M   30G    1% /data/sdb1
/dev/sdd1      xfs        50G   33M   50G    1% /data/sdd1
/dev/sde1      xfs        60G   33M   60G    1% /data/sde1
/dev/sr0       iso9660   4.3G  4.3G     0  100% /mnt
/dev/sdc1      xfs        40G   33M   40G    1% /data/sdc1

5.3 配置host文件并安装启动GFS(所有node节点上操作)

[root@node1 opt]# vim /etc/hosts            【添加四个节点的域名解析】

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.10 node1
192.168.131.11 node2
192.168.131.12 node3
192.168.131.13 node4


[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# ls
local.repo  repos.bak
[root@node1 yum.repos.d]# mv *.repo repo.bakbak     【将所有文件移动到备份目录】
[root@node1 yum.repos.d]# ls
repo.bakbak  repos.bak
[root@node1 yum.repos.d]# vim glfs.repo             【配置glfs本地源】

[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1

[root@node1 yum.repos.d]# cd /opt/
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# ls
fdisk.sh  gfsrepo.zip  rh
[root@node1 opt]# unzip gfsrepo.zip 
[root@node1 opt]# yum clean all && yum makecache 
【本地安装GFS服务、GFS服务端、GFS客户端、GFS减少延迟工具包】
[root@node1 opt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

【开启并设置开机自启GFS服务,最后查看GFS状态】
[root@node1 opt]# systemctl start glusterd.service 
[root@node1 opt]# systemctl enable glusterd.service 
[root@node1 opt]# systemctl status glusterd.service 
● glusterd.service - GlusterFS, a clustered file-system server
   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2021-05-20 16:48:39 CST; 1min 42s ago
 Main PID: 2371 (glusterd)
   CGroup: /system.slice/glusterd.service
           └─2371 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

520 16:48:39 node1 systemd[1]: Starting GlusterFS, a clustered file-system server...
520 16:48:39 node1 systemd[1]: Started GlusterFS, a clustered file-system server.


[root@node1 opt]# ntpdate ntp1.aliyun.com       【时间同步,没有配置过DNS需先配置DNS】

5.4 在存储信任池中添加节点(Node1节点)

  • 只需再一台Node节点上添加其他节点即可
[root@node1 opt]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 opt]# gluster peer probe node2
peer probe: success. 
[root@node1 opt]# gluster peer probe node3
peer probe: success. 
[root@node1 opt]# gluster peer probe node4
peer probe: success. 
[root@node1 opt]# gluster peer status         【在每个node节点上查看群集状态,是否成功添加其他3台】
Number of Peers: 3

Hostname: node2
Uuid: 6d7cd413-66d2-427f-8948-c089dd57de09
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 74f1661c-b918-409c-84e5-0e46da1a88f7
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 13a59ff2-1b4b-40c6-8553-d94340435282
State: Peer in Cluster (Connected)

5.5 根据规划创建卷

5.5.1 规划如下表

卷名称卷类型Brick
dis-volume分布式卷node1(/data/sdb1)、node2(/data/sdb1)
stripe-volume条带卷node1(/data/sdc1)、node2(/data/sdc1)
rep-volume复制卷node3(/data/sdb1)、node4(/data/sdb1)
dis-stripe分布式条带卷node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)
dis-rep分布式复制卷node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)

5.5.2 创建分布式卷

  • 创建分布式卷,没有指定类型,默认创建的就是分布式卷
[root@node1 opt]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume list                      【查看卷列表】
dis-volume
[root@node1 opt]# gluster volume start dis-volume          【启动新建分布式卷】
volume start: dis-volume: success
[root@node1 opt]# gluster volume info dis-volume           【查看创建分布式卷信息】
 
Volume Name: dis-volume
Type: Distribute
Volume ID: 5a7fd5a6-d5b6-41e3-a7f7-dcd705e6061c
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.3 条带卷创建

  • 指定类型为stripe,数值为2,后面有2个Brick Server。所以创建的事条带卷
[root@node1 opt]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume start stripe-volume
volume start: stripe-volume: success
[root@node1 opt]# gluster volume info stripe-volume
 
Volume Name: stripe-volume
Type: Stripe
Volume ID: ea8fb539-fcbd-4349-97d3-c55570c5a0bf
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.4 复制卷创建

  • 指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
[root@node1 opt]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume start rep-volume
volume start: rep-volume: success
[root@node1 opt]# gluster volume info rep-volume
 
Volume Name: rep-volume
Type: Replicate
Volume ID: 684418dc-1e38-4294-9f87-37f582666df6
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.5 分布式条带卷创建

  • 指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
[root@node1 opt]#  gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
[root@node1 opt]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node1 opt]# gluster volume info dis-stripe
 
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: fd24e048-cec6-48ee-8924-bfd09e4dc9a1
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.6 分布式复制卷创建

  • 指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
[root@node1 opt]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 opt]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node1 opt]# gluster volume info dis-rep 
 
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: a51ac773-d8af-4f2f-8512-6394eca36423
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 opt]# gluster volume list
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume

5.6 GFS客户端部署

5.6.1 安装客户端软件

[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# su
[root@server ~]# systemctl stop firewalld.service 
[root@server ~]# setenforce 0
[root@server ~]# systemctl disable firewalld.service 
[root@server ~]# cd /opt/
[root@server opt]# rz -E
rz waiting to receive.
[root@server opt]# ls
gfsrepo.zip  rh
[root@server opt]# unzip gfsrepo.zip 
[root@server opt]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
local.repo  repos.bak
[root@server yum.repos.d]# mv * repos.bakbak
[root@server yum.repos.d]# ls
repos.bakbak
[root@server yum.repos.d]# yum clean all && yum makecache 
[root@server yum.repos.d]# yum -y install glusterfs glusterfs-fuse.x86_64 

5.6.2 创建挂载目录并配置host文件

[root@server yum.repos.d]# mkdir -p /qz/dis,stripe,rep,dis_stripe,dis_rep
[root@server yum.repos.d]# ls /qz/
dis  dis_rep  dis_stripe  rep  stripe


[root@server yum.repos.d]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.10 node1
192.168.131.11 node2
192.168.131.12 node3
192.168.131.13 node4

5.6.3 挂载Gluster文件系统

  • 查看详情

    (❤❤❤)gfs分布式文件系统理论+部署(❤❤❤)(代码片段)

    ...一命名空间④弹性卷管理⑤基于标准协议1.3、MFS(传统的分布式文件系统)1.4、GFS二、GlusterFS术语介绍①Brick(存储块)②Volume(逻辑卷)③FUSE④VFS⑤Glusterd( 查看详情

    gfs分布式文件系统集群(理论篇)(代码片段)

    GlusterFS概述GlusterFS简介开源的分布式文件系统由存储服务器,客户端以及NFS/Samba存储网关组成无元数据服务器GlusterFS的特点扩展性和高性能高可用性全局统一的命名空间弹性卷管理基于标准协议GlusterFS术语Brick:存储节点Volume:... 查看详情

    gfs分布式文件系统(相关理论及实验操作详解)(代码片段)

    目录一、GlusterFS简介二、GlusterFS特点三、GlusterFS术语四、模块化堆栈式架构五、GlusterFS的工作流程六、弹性HASH算法七、GlusterFs的卷类型八、部署GlusterFS群集1.关闭防火墙2.磁盘分区,并挂载(四个节点都做3.修改主机名... 查看详情

    gfs分布式文件系统(代码片段)

    GFS分布式文件系统GFS简介GFS特点GFS术语模块化堆栈式架构GFS的工作流程弹性HASH算法GFS的卷类型分布式卷(默认)条带卷(默认)复制卷分布式条带卷分布式复制卷条带复制卷分布式条带复制卷GFS部署GFS简介GlusterFS... 查看详情

    gfs分布式文件系统(代码片段)

    GFS分布式文件系统GFS简介GFS特点GFS术语模块化堆栈式架构GFS的工作流程弹性HASH算法GFS的卷类型分布式卷(默认)条带卷(默认)复制卷分布式条带卷分布式复制卷条带复制卷分布式条带复制卷GFS部署GFS简介GlusterFS... 查看详情

    搭建gfs分布式文件系统-----实操(代码片段)

    一、GlusterFS简介:GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。开源的分布式文件系统... 查看详情

    gfs分布式文件存储系统(实战!!!)(代码片段)

    实验环境#开启5台虚拟机(centos7),四条节点服务器分别添加四块硬盘node1:192.168.52.149node2:192.168.52.132node3:192.168.52.128node4:192.168.52.135client:192.168.52.133#分别设置虚拟机名称,方便识别hostnamectlset-hostnamenode1hostnamectlset-hostnameno... 查看详情

    gfs分布式文件系统概述以及集群部署(代码片段)

    GFS分布式文件系统概述以及集群部署一、GlusterFS概述1、文件系统组成2、文件系统的作用3、专业术语4、模块化堆栈式架构二、GFS特点三、GFS工作原理四、弹性HASH算法弹性HASH算法的优点五、GFS卷1、GFS卷类型2、三大基本卷的特点... 查看详情

    出现错误错误错误——gfs分布式文件系统实验过程出现的一些错误

    1、Hostnode1isnotin‘PeerinCluster’state.创建卷的时候出现下面的错误查看状态时不显示node1,只显示IP排查方法:1、hosts文件是否配置正确2、检查防火墙是否打开,打开的话放行24007端口。或者关闭防火墙3、经过上述方法... 查看详情

    gfs文件系统(代码片段)

    1.1分布式文件系统1.1.1什么是分布式文件系统  相对于本机端的文件系统而言,分布式文件系统(英语:Distributedfilesystem, DFS),或是网络文件系统(英语:NetworkFileSystem),是一种允许文件通过网络在多台主机上分享的文... 查看详情

    gfs分布式文件系统(代码片段)

    GFS分布式文件系统一、概述二、特点1.扩展性和高性能2.高可用性3.全局统一命名空间4.弹性卷管理5.基于标准协议三、GlusterFS术语四、GlusterFS的模块化堆栈式架构五、GlusterFS的工作流程六、后端存储定位文件的方法(HASH算法&#... 查看详情

    gfs分布式文件系统(代码片段)

    ...GlusterFS介绍1.1GlusterFS概念1.2GlusterFS特点1.3GlusterFS术语前言分布式文件系统种类有:CEPH分布式文件系统(用的多)GFS(GlusterFS)分布式文件系统M 查看详情

    gfs分布式文件系统(代码片段)

    GFS概述组成接口:文件系统接口功能模块(管理、存储的工具):对对像管理的软件集合对象及属性:(使用此文件系统的消费者)作用 从系统角度来看,文件系统是对文件存储设备的空间进行组织和备份 负责文件... 查看详情

    gfs分布式文件系统简述以及gfs的服务部署案例(代码片段)

    GFS一、概述1.1简介1.2特点1.3术语1.4工作流程1.5七种卷分布式卷(默认)条带卷(默认)复制卷(Replicavolume)分布式条带卷(DistributeStripevolume)分布式复制卷(DistributeReplicavolume)条 查看详情

    gfs分布式文件系统简述以及gfs的服务部署案例(代码片段)

    GFS一、概述1.1简介1.2特点1.3术语1.4工作流程1.5七种卷分布式卷(默认)条带卷(默认)复制卷(Replicavolume)分布式条带卷(DistributeStripevolume)分布式复制卷(DistributeReplicavolume)条 查看详情

    脑壳有点疼。。glusterfs分布式文件系统!(更新中)

    GlusterFS分布式文件系统一.文件系统简介1.组成2.作用3.挂载使用二.GlusterFS分布式文件系统1.GFS是由三部分组成(组件)2.GFS特点3.GFS专业术语4.GFS模块化堆栈式架构5.工作流程6.基本卷和复合卷三.部署GFS集群1.实验准备一.文... 查看详情

    linuxglusterfs文件系统|gfs分布式文件系统群集部署|超详细(代码片段)

    linuxGlusterFS文件系统|GFS分布式文件系统群集部署|超详细GlusterFS简介GlusterFS特点GlusterFS术语GFS工作流程GFS支持的七种卷GFS服务端部署1.1集群环境1.2更改节点名称1.3节点进行磁盘挂载,安装本地源1.4Hosts文件创建映射关系1.5创建G... 查看详情