GFS分析与分布式文件系统群集部署

目录

 

一.GFS分析

GFS文件系统的分析

GFS文件系统结构功能

GFS架构体系

GFS的卷类型

二.GFS群集部署

环境部署

node上的操作,建立关系

GFS卷的创建,只需要在node1中创建管理即可

扫描二维码关注公众号,回复: 9301542 查看本文章

配置客户端

测试GFS卷的功能

模拟故障,测试其功能

其他维护命令


一.GFS分析

GFS文件系统的分析

  • GFS全称为Google File System,为了满足Google迅速增长的数据处理要求,google设计并且实现了google文件系统(GFS)。Google文件系统是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用
  • GFS应用于廉价的普通硬件上,但可以提供容错功能,它可以给大量的用户提供总体性能较高的服务,也可以提供·容错功能
  • 谷歌三大法宝分别是“Google 文件系统”、“big table”、“mapreduce算法”。至今除了谷歌之外,在数据维护上没有那家公司开发文件系统这种十分底层的技术,有了自己的文件系统,谷歌就可以有效的组织庞大的数据,服务器和存储,并且用他们工作,因此,GFS的优势十分明显

GFS文件系统结构功能

  • GFS文件系统为分布式结构,它是一个高度容错网络文件系统,主要chunksever由一个master和众多chunkserver(大块设备)构成的
  • GFS的特点包括:扩展性和高性能、高可用性、全局统一命名空间、弹性卷管理、基于标准协议
  • GFS的工作流程,如下图

  • GFS通过弹性Hash算法地址空间的唯一性

GFS架构体系

  • 一个GFS群集由一台master服务器(有备份),多台chunk服务器组成,客户端,架构上比较简单
  • chunkserver:数据存储节点,文件被分割为固定大小的chunk,每个chunk被唯一标识,默认情况下chunk存储3个副本
  • chunk:每个·文件至少存储为一个chunk,每个chunk以普通的Linux文件存储,chunk尺寸大小选择是一个关键的设计参数,默认为64MB,每个chunk有全局64位唯一标识符
  • GFS文件系统是可以被多个用户同时访问,一般情况下,Application和chunkserver是可以在同一台机子上,主要的数据流量是通过Application和hunkserver之间,由于数据访问的是本地减少了Application和master之间的交互访问,减少了master的负荷量,提高了master的利用性能
  • master中保存着三类元数据(metadata):文件名和块的名字空间、从文件到块的映射、副本位置。所有metadata都放在内存中。操作日志的引入可以更加简单、可靠地更新master的信息
  • master作为GFS的控制和神经系统,副本为master的备份,chunk主要用和用户交换数据,网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使master的瘫痪,也会有shadow作为替补,并且shadow在一定的时候也会充当master来提供控制和数据交换。

GFS的卷类型

  • 分布式卷:没有对文件进行分块处理,通过扩展文件属性保存HASH值,支持的底层文件系统有ext3,ext4、ZFS、XFS

特点:文件分布在不同的服务器,不具备冗余性;更容易和廉价地扩展卷的大小;单点故障会造成数据丢失;依赖底层的数据保护(依赖硬件设置)

  • 条带卷:根据偏移量将文件分为N块(N个条带节点),轮询的存储在每个Brick server节点;存储大文件时,性能尤为突出;不具备冗余性,类似raid 0

特点:数据被分割为更小块分布到块服务器群中的条带区;分布减少了负载且更小的文件加速了存取的速度;没有数据冗余

  • 复制卷:同一文件保存一份或多份副本;复制模式因为要保存副本,因此磁盘利用率较低,多个节点上的存储空间不一致,那么将按照木桶效应取最低值,作为该卷的总容量

特点:卷中所有的服务器均保存一完整的副本;卷的副本数量可由客户创建的时候决定;至少由两个块服务器或者更多服务器,具备冗余性

  • 分布式条带卷:兼顾分布式和条带卷的功能;主要用于大文件访问处理,至少需要4台服务器
  • 分布式复制卷:兼顾分布式卷和复制卷的功能;用于需要冗余的情况下

二.GFS群集部署

环境部署

  • 开五台虚拟机,一台cilent,四台nodes,nodes增加四块磁盘,每块5G
角色 IP地址 磁盘
node1 192.168.43.101 5GX4
node2 192.168.43.102 5GX4
node3 192.168.43.103 5GX4

node4

192.168.43.104 5GX4
client 192.168.43.105 5GX4
  • 修改主机名,添加磁盘

  • 创建、格式化、挂载磁盘shell脚本,一键操作
vim disk.sh

#! /bin/bash
echo "the disks exist list:"
##grep出系统所带磁盘
fdisk -l |grep '磁盘 /dev/sd[a-z]'    
echo "=================================================="
PS3="chose which disk you want to create:"
 ##选择需要创建的磁盘编号
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit   
do
    case $VAR in
    sda)
 ##本地磁盘就退出case语句
        fdisk -l /dev/sda   
        break ;;
    sd[b-z])
        #create partitions
        echo "n    ##创建磁盘
                p
                
                
           
                w"  | fdisk /dev/$VAR

        #make filesystem
##格式化
        mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null    
	#mount the system
        mkdir -p /data/${VAR}"1" &> /dev/null
###永久挂载
        echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
###使得挂载生效
        mount -a &> /dev/null
        break ;;
    quit)
        break;;
    *)
        echo "wrong disk,please check again";;
    esac
done
  • 挂载完毕如下
[root@node1 ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  4.3G   16G   22% /
devtmpfs       devtmpfs  474M     0  474M    0% /dev
tmpfs          tmpfs     489M     0  489M    0% /dev/shm
tmpfs          tmpfs     489M  7.2M  481M    2% /run
tmpfs          tmpfs     489M     0  489M    0% /sys/fs/cgroup
/dev/sda3      xfs       8.0G   37M  8.0G    1% /home
/dev/sda1      xfs        10G  158M  9.9G    2% /boot
tmpfs          tmpfs      98M   12K   98M    1% /run/user/42
tmpfs          tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb1      xfs       5.0G   33M  5.0G    1% /data/sdb1
/dev/sdc1      xfs       5.0G   33M  5.0G    1% /data/sdc1
/dev/sdd1      xfs       5.0G   33M  5.0G    1% /data/sdd1
/dev/sde1      xfs       5.0G   33M  5.0G    1% /data/sde1
[root@node1 ~]# 
[root@node2 ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        10G  4.7G  5.4G   47% /
devtmpfs       devtmpfs  474M     0  474M    0% /dev
tmpfs          tmpfs     489M     0  489M    0% /dev/shm
tmpfs          tmpfs     489M  7.1M  482M    2% /run
tmpfs          tmpfs     489M     0  489M    0% /sys/fs/cgroup
/dev/sda5      xfs       4.0G   37M  4.0G    1% /home
/dev/sda1      xfs       4.0G  158M  3.9G    4% /boot
tmpfs          tmpfs      98M   28K   98M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1      xfs       5.0G   33M  5.0G    1% /data/sdb1
/dev/sdc1      xfs       5.0G   33M  5.0G    1% /data/sdc1
/dev/sdd1      xfs       5.0G   33M  5.0G    1% /data/sdd1
/dev/sde1      xfs       5.0G   33M  5.0G    1% /data/sde1
[root@node2 ~]# 
[root@node3 ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  4.3G   16G   22% /
devtmpfs       devtmpfs  474M     0  474M    0% /dev
tmpfs          tmpfs     489M     0  489M    0% /dev/shm
tmpfs          tmpfs     489M  7.2M  481M    2% /run
tmpfs          tmpfs     489M     0  489M    0% /sys/fs/cgroup
/dev/sda5      xfs       8.0G   37M  8.0G    1% /home
/dev/sda1      xfs        10G  158M  9.9G    2% /boot
tmpfs          tmpfs      98M   12K   98M    1% /run/user/42
tmpfs          tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb1      xfs       5.0G   33M  5.0G    1% /data/sdb1
/dev/sdc1      xfs       5.0G   33M  5.0G    1% /data/sdc1
/dev/sdd1      xfs       5.0G   33M  5.0G    1% /data/sdd1
/dev/sde1      xfs       5.0G   33M  5.0G    1% /data/sde1
[root@node3 ~]# 
[root@node4 ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  4.7G   16G   24% /
devtmpfs       devtmpfs  471M     0  471M    0% /dev
tmpfs          tmpfs     487M     0  487M    0% /dev/shm
tmpfs          tmpfs     487M  8.4M  478M    2% /run
tmpfs          tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   39M   10G    1% /home
/dev/sda1      xfs       8.0G  164M  7.9G    2% /boot
tmpfs          tmpfs      98M   12K   98M    1% /run/user/42
tmpfs          tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb1      xfs       5.0G   33M  5.0G    1% /data/sdb1
/dev/sdc1      xfs       5.0G   33M  5.0G    1% /data/sdc1
/dev/sdd1      xfs       5.0G   33M  5.0G    1% /data/sdd1
/dev/sde1      xfs       5.0G   33M  5.0G    1% /data/sde1
[root@node4 ~]# 

node上的操作,建立关系

  • 在四台node上映射主机名
vim /etc/hosts
192.168.43.101 node1
192.168.43.102 node2
192.168.43.103 node3
192.168.43.104 node4
  • 在四台Node上,编写GFS的源,如下,以node1为例
[root@node1 ~]# cd /opt    
[root@node1 opt]# rz

[root@node1 opt]# ls    ##在/opt防止关于gfs的软件包
gfsrepo.zip  rh
[root@node1 opt]# unzip gfsrepo.zip    ##解压
[root@node1 opt]# vim /etc/yum
yum/         yum.conf     yum.repos.d/ 
[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak    ##将原来的源移动到新建的目录中
[root@node1 yum.repos.d]# mv Cent* bak/
[root@node1 yum.repos.d]# ls
bak
[root@node1 yum.repos.d]# vim local.repo

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

[root@node1 yum.repos.d]# 
  • 在四台node上,安装GFS相关软件包
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma    ###安装
systemctl start glusterd.service      ###启动
systemctl enable glusterd.service     ###开机自启
systemctl status glusterd.service     ###查看状态
  • 设置时间同步,四台node都需要设置,以node1为例,关闭防火墙和SElinux功能
ntpdate ntp1.aliyun.com


systemctl stop firewalld
setenforce 0
  • 添加存储信任池,只要在一台主机上添加其他三台节点即可,本实验在node1上操作
[root@node1 ~]# gluster peer probe node2
peer probe: success. 
[root@node1 ~]# gluster peer probe node3
peer probe: success. 
[root@node1 ~]# gluster peer probe node4
peer probe: success. 
[root@node1 ~]# gluster peer status
Number of Peers: 3

Hostname: node2
Uuid: 557eddc0-5dfb-4dd6-a124-a192b528ecb2
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 847bde80-22fd-49dc-bbd8-47970c3ff3e6
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 122e7693-f3b8-437f-a128-1c7b79001b23
State: Peer in Cluster (Connected)
[root@node1 ~]# 

GFS卷的创建,只需要在node1中创建管理即可

  • 创建分布式卷
###利用node1和node2上的两块磁盘创建,dis-vol为磁盘名,force表示强制
[root@node1 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data

##启动dis-vol卷
[root@node1 ~]# gluster volume start dis-vol
volume start: dis-vol: success

##查看该卷的状态
[root@node1 ~]# gluster volume info dis-vol
 
Volume Name: dis-vol
Type: Distribute
Volume ID: a78f9362-8fa0-4e7b-a071-766d7e27355a
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
[root@node1 ~]# 
  • 创建条带卷
[root@node1 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1  node2:/data/sdc1 force
volume create: stripe-vol: success: please start the volume to access data
[root@node1 ~]# gluster volume start stripe-vol 
volume start: stripe-vol: success
[root@node1 ~]# gluster volume info stripe-vol 
 
Volume Name: stripe-vol
Type: Stripe
Volume ID: 3c365fca-1e83-4f3f-8d4c-e73bf10c40ed
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
[root@node1 ~]# 
  • 创建复制卷
[root@node1 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
[root@node1 ~]# 
[root@node1 ~]# gluster volume start rep-vol
volume start: rep-vol: success
[root@node1 ~]# gluster volume info rep-vol
 
Volume Name: rep-vol
Type: Replicate
Volume ID: cf8e95ca-671e-4f7c-be0a-f0d20233ce9f
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
performance.client-io-threads: off
[root@node1 ~]# 
  • 创建分布式条带卷(至少4个节点)
[root@node1 ~]# 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 ~]# 
[root@node1 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node1 ~]# gluster volume info dis-stripe
 
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 7366292b-2f30-443a-ba54-4ffd212577e5
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
  • 创建分布式复制卷(至少4个节点)
[root@node1 ~]# 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 ~]# 
[root@node1 ~]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node1 ~]# gluster volume info dis-rep
 
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: f0629dd9-af5a-46fa-b9ca-30cd21948d86
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
performance.client-io-threads: off
[root@node1 ~]# 

配置客户端

  • 配置GFS源,安装相关软件包
[root@client ~]# cd /opt
[root@client opt]# rz

[root@client opt]# ls
gfsrepo.zip  rh
[root@client opt]# unzip gfsrepo.zip
[root@client opt]# vim /etc/yum.repos.d/GLFS.repo
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@client opt]# cd
[root@client ~]# yum -y install glusterfs glusterfs-fuse
  • 做地址映射
[root@client ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.101 node1
192.168.43.102 node2
192.168.43.103 node3
192.168.43.104 node4
  • 创建临时挂载点,关闭安全性功能
[root@client ~]# mkdir -p /text/dis
##挂载分布式卷
[root@client ~]# mount.glusterfs node1:dis-vol /text/dis
[root@client ~]# mkdir -p /text/strip
##挂载条带卷
[root@client ~]# mount.glusterfs node1:stripe-vol /text/strip
[root@client ~]# mkdir /text/rep
##挂载复制卷
[root@client ~]# mount.glusterfs node3:rep-vol /text/rep/
[root@client ~]# mkdir /text/dis-str
##挂载分布式条带卷
[root@client ~]# mount.glusterfs node2:dis-stripe /text/dis-str/
[root@client ~]# mkdir /text/dis-rep
##挂载分布式复制卷
[root@client ~]# mount.glusterfs node4:dis-rep /text/dis-rep/  
      
[root@client ~]# systemctl stop firewalld
[root@client ~]# setenforce 0
[root@client ~]# 
  • 查看挂载信息
[root@client ~]# df -hT
文件系统         类型            容量  已用  可用 已用% 挂载点
/dev/sda2        xfs              10G  3.8G  6.3G   38% /
devtmpfs         devtmpfs        474M     0  474M    0% /dev
tmpfs            tmpfs           489M     0  489M    0% /dev/shm
tmpfs            tmpfs           489M  7.2M  482M    2% /run
tmpfs            tmpfs           489M     0  489M    0% /sys/fs/cgroup
/dev/sda5        xfs             4.0G   37M  4.0G    1% /home
/dev/sda1        xfs             4.0G  158M  3.9G    4% /boot
tmpfs            tmpfs            98M  4.0K   98M    1% /run/user/42
tmpfs            tmpfs            98M   20K   98M    1% /run/user/0
/dev/sr0         iso9660         4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
node1:dis-vol    fuse.glusterfs   10G  167M  9.9G    2% /text/dis
node1:stripe-vol fuse.glusterfs   10G  167M  9.9G    2% /text/strip
node3:rep-vol    fuse.glusterfs  5.0G   84M  5.0G    2% /text/rep
node2:dis-stripe fuse.glusterfs   20G  334M   20G    2% /text/dis-str
node4:dis-rep    fuse.glusterfs   10G  167M  9.9G    2% /text/dis-rep
[root@client ~]# 

测试GFS卷的功能

  • 创建5个40M的文件
[root@client ~]# dd if=/dev/zero of=/demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.119366 秒,351 MB/秒
[root@client ~]# dd if=/dev/zero of=/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.145625 秒,288 MB/秒
[root@client ~]# dd if=/dev/zero of=/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.103901 秒,404 MB/秒
[root@client ~]# dd if=/dev/zero of=/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.123886 秒,339 MB/秒
[root@client ~]# dd if=/dev/zero of=/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0815509 秒,514 MB/秒
[root@client ~]# 
  • 把创建的文件复制到不同卷上
[root@client ~]# cp /demo* /text/dis
[root@client ~]# cp /demo* /text/strip
[root@client ~]# cp /demo* /text/rep/
[root@client ~]# cp /demo* /text/dis-str
[root@client ~]# cp /demo* /text/dis-rep
  • 查看四个节点上不同卷的文件情况

分布式卷

条带卷

复制卷

分布式条带卷

分布式复制卷

模拟故障,测试其功能

其他维护命令

1、查看GlusterFS卷
[root@node1 ~]# gluster volume list 
2、查看所有卷的信息
[root@node1 ~]# gluster volume info
3.查看所有卷状态
[root@node1 ~]# gluster volume status
4. ####停止一个卷
[root@node1 ~]# gluster volume stop dis-stripe 
5. 删除一个卷
[root@node1 ~]# gluster volume delete dis-stripe   
6.黑白名单
[root@node1 ~]# gluster volume set dis-rep auth.allow 192.168.32.*     ##设置192.168.30.0网段的所有IP地址 都能访问dis-rep卷(分布式复制卷)
volume set: success           
发布了119 篇原创文章 · 获赞 132 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/104367369