大兵是
一个想全能的运维

GlusterFS基础及卷类型操作

理论基础

一、文件系统基础

    计算机通过分文件系统管理和存储数据,而现在人们可以获取到的数据信息正以爆炸式的指数成倍的增长,单纯的依靠单机添加硬盘的方式扩展计算机的文件系统的存储容量的方式已近不能满足当前的需求了,此时分布式文件系统横空出世,分布式文件系统可以有效解决数据的存储和管理问题,将固定于某个地点的某个文件系统扩展到任意多个地点或多个文件系统,众多的节点组成一个文件系统网络,每个几点可以分布在不同的地点,通过网络进行节点间的通信和数据传输,人们在使用分布式文件系统的时候,不需要关心数据是存储在哪个节点上或者是从哪个节点获取到的数据,只需要像使用本地文件系统一样管理、存储和访问文件系统中的数据。

二、NFS

    NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP协议共享资源和访问资源,在NFS应用中,本地NFS可客户端应用可以透明的读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS的优点:

  • 节约使用的磁盘空间;
  • 节约硬件资源;
  • 挂载使用;

NFS的缺点:

  • 服务器的磁盘问题;
  • 服务器的单点故障;
  • 服务器的I/O瓶颈问题

三、分布式文件系统之GlusterFS

    GlusterFS是一种横向扩展scale-out的解决方案Gluster的核心,是一个开源的分布式文件系统,在2011年10月4号被redhat宣布以1.36亿美金收购,2014年4月30日,红帽公司以1.75亿美元的价格将Ceph的企业级产品提供商Inktank收入囊中,以将Inktank的存储产品整合在其基于GlusterFS,此次收购后,红帽或将成为最大的开源存储产品提供商,包括对象存储、块存储和文件存储,GlusterFS具有强大的横向扩展能力,通过扩展能够支持PB(1PB=1024TB,1TB=1024GB)级别的存储容量和处理数千客户端,GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储组员聚集在一起,使用单一全局命名空间来管理数据,GlusterFS基于可堆叠的用户空间设计,可以为各种不同的数据负载提供优益的性能。
    GlusterFS支持运行在任何标志的IP网络上的标准应用程序的标准客户端,用户可以在全局唯一的命名空间中使用NFS/CIFS等标准协议来访问应用程序,GlusterFS使得用户可以摆脱原有的独立、高成本的封闭存储系统,能够利用普通低廉价的存储设备来部署可集中管理、横向扩展、虚拟化的存储池,存储容量可以扩展到TB/PB级别,官方网址是https://www.gluster.org/。

企业应用场景:

  • 媒体数据:文档、图片、音频、视频
  • 共享存储:云储存、虚拟化存储、HPC(高性能计算)
  • 大数据:日志文件、RFID(射频识别)数据

缺点:

    不适用于存储大量小文件的场景,因为GlusterFS的设计之初就是用于存储大数据的,对小文件的优化不是很好,推荐保存单个文件至少1MB以上的环境,如果是大量小文件的场景建议使用FastDFS、MFS等。

Gusterfs安装配置

一、环境准备

    本文测试使用四台服务器,每块挂两块10G的硬盘。

[root@storage1 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@storage1 ~]# uname -r
2.6.32-642.el6.x86_64
[root@storage1 ~]# getenforce 
Disabled
[root@storage1 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
#每台服务器挂载两块10G的硬盘,方便测试glusterfs卷类型
[root@storage1 ~]# cat /etc/hosts #配置主机名和hosts解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.35   storage1
10.0.0.36   storage2
10.0.0.37   storage3
10.0.0.38   storage4
#没有eplel源,安装epel源
[root@storage1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

二、安装GlusterFS

    https://download.gluster.org/pub/gluster/glusterfs/

#安装gluster源
[root@storage1 ~]# yum install -y centos-release-gluster37.noarch
#安装glusterfs
[root@storage1 ~]# yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
[root@storage1 ~]# rpm -qa|grep glusterfs #安装完成检查,可以把这些包留存下来,以便环境统一和以后不提供这个版本的下载
glusterfs-3.7.20-1.el6.x86_64
glusterfs-libs-3.7.20-1.el6.x86_64
glusterfs-fuse-3.7.20-1.el6.x86_64
glusterfs-cli-3.7.20-1.el6.x86_64
glusterfs-geo-replication-3.7.20-1.el6.x86_64
glusterfs-client-xlators-3.7.20-1.el6.x86_64
glusterfs-api-3.7.20-1.el6.x86_64
glusterfs-server-3.7.20-1.el6.x86_64
[root@storage1 ~]# glusterfs -V #查看版本
glusterfs 3.7.20 built on Jan 30 2017 15:39:27
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

如果大家上面下载不下载的话,我这个准备好rpm包了,链接:http://pan.baidu.com/s/1nuPFyml 密码:p7vx。
解压,rpm -ivh *rpm即可。

三、配置Glusterfs

[root@storage1 ~]# /etc/init.d/glusterd start #启动glusterd
Starting glusterd:                                         [  OK  ]
[root@storage1 ~]# /etc/init.d/glusterd status
glusterd (pid  1563) is running...
[root@storage1 ~]# chkconfig glusterd on #开机启动
#添加到信任池,只需要在一台机器上添加,其他的包含的会自动信任
[root@storage1 ~]# gluster peer probe storage2
peer probe: success. 
[root@storage1 ~]# gluster peer probe storage3
peer probe: success. 
[root@storage1 ~]# gluster peer probe storage4
peer probe: success. 
#查看信任
[root@storage1 ~]# gluster peer status
Number of Peers: 3

Hostname: storage2
Uuid: 6c66940f-cca4-4515-85b2-6c7afd4f1068
State: Peer in Cluster (Connected)

Hostname: storage3
Uuid: 53baff62-98d6-46fb-b4da-b6e2c1744c72
State: Peer in Cluster (Connected)

Hostname: storage4
Uuid: a7caf9c6-ffef-4130-99bd-2641f73cadaf
State: Peer in Cluster (Connected)
#如果添加错误,那么删除,重新添加
[root@storage1 ~]# gluster peer detach storage2

四、GlusterFS卷类型

Distributed 分布式卷:文件通过hash算法随机分不到bricks组成的卷上
Replicated 复制式卷:类似RAID1,relica数必须等于volume中brick所包含的服务器数,可用性高。
Striped 条带式卷:类似RAID0,stripe数必须等于volume中包含的brick数,文件被切成数据块,被分布在不同的brick中,大文件性能好。
Distributed Striped 分布式条带卷:volume中brick所包含的存储服务器必须是stripe的倍数(>=2),兼顾分布式和条带式的功能。
Distributed Replicated 分布式的复制卷,volume中所包含的存储服务器必须是relica的倍数(>=2),兼顾分布式和复制时的功能。

    注意:当你为分布式复制卷和分布式条带卷增加bricks的时候,你增加的bricks的户数必须要复制和条带数目的倍数。例如:你给分布式复制卷的replica为2,那么你增加bricks的时候数量就必须是2、4、6、8等。

    我们是不是就可以创建卷了呢?不行,但是之前我们新增的硬盘,还没有分区格式化呢。

    我们用的centos6的系统,文件系统默认是ext4,没有xfs那么我们要格式化为xfs怎么办呢?

[root@storage1 ~]# yum install  xfsprogs -y

    格式化磁盘,是否要分区呢?

#分区
[root@storage1 ~]# mkfs.xfs /dev/sdb
[root@storage1 ~]# mkfs.xfs /dev/sdc
#建立要挂载硬盘的目录
[root@storage1 ~]# mkdir  /storage/brick1 -p
[root@storage1 ~]# mkdir  /storage/brick2 -p
#写到开机挂载任务
[root@storage1 ~]# echo "/dev/sdb  /storage/brick1  xfs  defaults  0  0" >>/etc/fstab
[root@storage1 ~]# echo "/dev/sdc  /storage/brick2  xfs  defaults  0  0" >>/etc/fstab
#该参数加载/etc/fstab文件
[root@storage1 ~]# mount -a
#挂载成功
[root@storage1 ~]# df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4   9.4G  1.6G  7.4G  18% /
tmpfs          tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1      ext4   190M   33M  147M  19% /boot
/dev/sdb       xfs     10G   33M   10G   1% /storage/brick1
/dev/sdc       xfs     10G   33M   10G   1% /storage/brick2

    ok,真的要创建卷了。

分布

    什么是卷,跨主机整合磁盘。

#默认是分布式卷
[root@storage1 ~]# gluster volume create test1 storage1:/storage/brick1 storage2:/storage/brick1 force
volume create: test1: success: please start the volume to access data
#启动卷
[root@storage1 ~]# gluster volume start test1
volume start: test1: success
#查看卷的信息
[root@storage1 ~]# gluster volume info test1
[root@storage1 ~]# gluster volume info test1
Volume Name: test1
Type: Distribute
Volume ID: da089bf0-a300-4662-b7da-6c85db54dd69
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage1:/storage/brick1
Brick2: storage2:/storage/brick1
Options Reconfigured:
performance.readdir-ahead: on
#可以查看状态
[root@storage1 ~]# gluster volume status test1

    测试。

#创建挂载分布式卷的目录
[root@storage1 ~]# mkdir /gfsdir1
#挂载方式之一
[root@storage1 ~]# mount -t glusterfs 10.0.0.35:/test1 /gfsdir1/
#挂载方式之二,默认的nfs是开启的
[root@storage3 ~]# mount -o mountproto=tcp -t nfs 10.0.0.38:/test1 /gfsdir1/
[root@storage1 ~]# cd /gfsdir1/
#写入测试,分析
[root@storage1 gfsdir1]# dd if=/dev/zero of=/gfsdir1/5m.test count=5 bs=1M

分布式复制

[root@storage1 ~]# gluster volume create test2 replica 2 storage3:/storage/brick1/ storage4:/storage/brick1/ force
volume create: test2: success: please start the volume to access data
[root@storage1 ~]# gluster volume start test2
volume start: test2: success
[root@storage1 ~]# gluster volume info test2
 
Volume Name: test2
Type: Replicate
Volume ID: 4fd51b01-1446-4689-823b-c4c150872592
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: storage3:/storage/brick1
Brick2: storage4:/storage/brick1
Options Reconfigured:
performance.readdir-ahead: on

    挂载测试,读者自行测试。

[root@storage1 ~]# mkdir /gfsdir2
[root@storage1 ~]# mount -t glusterfs 10.0.0.35:/test2 /gfsdir2
[root@storage1 ~]# df -h
Filesystem        Size  Used Avail Use% Mounted on
/dev/sda3         9.4G  1.6G  7.4G  18% /
tmpfs             491M     0  491M   0% /dev/shm
/dev/sda1         190M   33M  147M  19% /boot
/dev/sdb           10G   43M   10G   1% /storage/brick1
/dev/sdc           10G   33M   10G   1% /storage/brick2
10.0.0.35:/test1   20G   85M   20G   1% /gfsdir1
10.0.0.35:/test2   10G   33M   10G   1% /gfsdir2

分布式条带卷

[root@storage1 ~]# gluster volume create test3 stripe 2 storage3:/storage/brick2/ storage4:/storage/brick2 force
volume create: test3: success: please start the volume to access data
[root@storage1 ~]# gluster volume info  test3
Volume Name: test3
Type: Stripe
Volume ID: 94ac1606-e2b4-4a61-88fa-5a4947ef59b2
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: storage3:/storage/brick2
Brick2: storage4:/storage/brick2
Options Reconfigured:
performance.readdir-ahead: on

    测试。

[root@storage1 ~]# mkdir /gfsdir3
[root@storage1 ~]# mount -t glusterfs 10.0.0.35:/test3 /gfsdir3
[root@storage1 ~]# df -h
Filesystem        Size  Used Avail Use% Mounted on
......
10.0.0.35:/test1   20G   85M   20G   1% /gfsdir1
10.0.0.35:/test2   10G   33M   10G   1% /gfsdir2
10.0.0.35:/test3   20G   65M   20G   1% /gfsdir3
#文件测试
[root@storage1 ~]# cd /gfsdir3
[root@storage1 gfsdir3]# dd if=/dev/zero of=/gfsdir3/10.test count=10 bs=1M
[root@storage1 gfsdir3]# ll
total 10240
-rw-r--r-- 1 root root 10485760 Apr  3 08:18 10.test
#storage3
[root@storage3 gfsdir1]# cd /storage/brick2
[root@storage3 brick2]# ll -h
total 5.1M
-rw-r--r-- 2 root root 5.0M Apr  3 08:18 10.test

卷的扩容

    扩容。

#需要停止数据卷
[root@storage1 ~]# gluster volume stop test2
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: test2: success
#扩容
[root@storage1 ~]# gluster volume add-brick test2 replica 2 storage1:/storage/brick2 storage2:/storage/brick2 force
volume add-brick: success
[root@storage1 ~]# gluster volume start  test2
volume start: test2: success
[root@storage1 ~]# gluster volume info test2
 
Volume Name: test2
Type: Distributed-Replicate
Volume ID: 4fd51b01-1446-4689-823b-c4c150872592
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: storage3:/storage/brick1
Brick2: storage4:/storage/brick1
Brick3: storage1:/storage/brick2
Brick4: storage2:/storage/brick2
Options Reconfigured:
performance.readdir-ahead: on

    数据扩容之磁盘平衡。

[root@storage1 gfsdir2]# gluster volume rebalance test2 start
[root@storage1 gfsdir2]# gluster volume rebalance test2 status

移除及删除卷

#停止卷
[root@storage1 ~]# gluster volume stop test2
#移除节点,数据还是在的
[root@storage1 ~]# gluster volume remove-brick test2 replica 2 storage3:/storage/brick1 storage4:/storage/brick1 force
#删除卷
[root@storage1 ~]# gluster volume delete test2

    经过测试,条带卷删掉之后重新改了同名的 还可以使用。不同的名字的不能使用,修改为不同名字,再修改回来同名的还可以使用。

打赏

未经允许不得转载: » GlusterFS基础及卷类型操作

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)