搜索
您的当前位置:首页正文

GlusterFS分布式存储系统

来源:小奈知识网
GlusterFS分布式存储系统

⼀,分布式⽂件系统理论基础

1.1 分布式⽂件系统出现

计算机通过⽂件系统管理,存储数据,⽽现在数据信息爆炸的时代中⼈们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机⽂件系统的存储容量的⽅式,已经不能满⾜⽬前的需求。

分布式⽂件系统可以有效解决数据的存储和管理难题,将固定于某个地点的某个⽂件系统,扩展到任意多个地点/多个⽂件系统,众多的节点组成⼀个⽂件系统⽹络。每个节点可以分布在不同的地点,通过⽹络进⾏节点间的通信和数据传输。⼈们在使⽤分布式⽂件系统时,⽆需关⼼数据是存储在哪个节点上,或者是从哪个节点从获取的,只需要像使⽤本地⽂件系统⼀样管理和存储⽂件系统中的数据。

1.2 典型代表NFS

NFS(Network File System)即⽹络⽂件系统,它允许⽹络中的计算机之间通过TCP/IP⽹络共享资源。在NFS的应⽤中,本地NFS的客户端应⽤可以透明地读写位于远端NFS服务器上的⽂件,就像访问本地⽂件⼀样。NFS的优点如下:

(1)节约使⽤的磁盘空间

客户端经常使⽤的数据可以集中存放在⼀台机器上,并使⽤NFS发布,那么⽹络内部所有计算机可以通过⽹络访问,不必单独存储。

(2)节约硬件资源

NFS还可以共享软驱,CDROM和ZIP等的存储设备,减少整个⽹络上的可移动设备的数量。

(3)⽤户主⽬录设定

对于特殊⽤户,如管理员等,为了管理的需要,可能会经常登陆到⽹络中所有的计算机,若每个客户端,均保存这个⽤户的主⽬录很繁琐,⽽且不能保证数据的⼀致性。实际上,经过NFS服务的设定,然后在客户端指定这个⽤户的主⽬录位置,并⾃动挂载,就可以在任何计算机上使⽤⽤户主⽬录的⽂件。

1.3 ⾯临的问题

存储空间不⾜,需要更⼤容量的存储

直接⽤NFS挂载存储,有⼀定风险,存在单点故障 某些场景不能满⾜需求,⼤量的访问磁盘IO是瓶颈

1.4 GlusterFS概述

GlusterFS是Scale-Out存储解决⽅案Gluster的核⼼,它是⼀个开源的分布式⽂件系统,具有强⼤的横向扩展能⼒,通过扩展能够⽀持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA⽹络将物理分布的存储资源聚集在⼀起,使⽤单⼀全局命名空间来管理数据。

GlusterFS⽀持运⾏在任何标准IP⽹络上标准应⽤程序的标准客户端,⽤户可以在全局统⼀的命令空间中使⽤NFS/CIFS等标准协议来访问应⽤程序。GlusterFS使得⽤户可摆脱原有的独⽴,⾼成本的封闭存储系统,能够利⽤普通廉价的存储设备来部署可集中管理,横向扩展,虚拟化的存储池,存储容量可扩展⾄TB/PB级。超⾼性能(64个节点时吞吐量也就是带宽甚⾄达到32GB/s)

1.5 GlusterFS企业主要应⽤场景

理论和实践上分析,GlusterFS⽬前主要适⽤⼤⽂件存储场景,对于⼩⽂件尤其是海量⼩⽂件(⼩于1M),存储效率和访问性能都表现不佳。海量⼩⽂件LOSF问题是⼯业界和学术界公认的难题,GlusterFS作为通⽤的分布式⽂件系统,并没有对⼩⽂件作额外的优化措施(⼩于1M),性能不好也是可以理解的。

Media

⽂档,图⽚,⾳频,视频

Shared storage

云存储,虚拟化存储,HPC(⾼性能计算)Big data

⽇志⽂件,RFID(射频识别)数据

⼆,部署安装

GlusterFS所有包

2.1 GlusterFS安装前的准备(四台都需要)

1. 电脑⼀台,内存>=4G,可⽤磁盘空间⼤于50G2. 安装VMWARE Workstation虚拟机软件

3. 安装好四台CentOS-6-x86_64(6.2-6.8都可以)的虚拟机4. 基本系统:1核CPU+1024M内存+10G硬盘5. ⽹络选择:⽹络地址转换(NAT)6. 关闭iptables和SELinux7. 预装glusterfs软件包描述

IP

主机名

需求

GlusterFS01192.168.200.69GlusterFS01多添加两块各10G的sdb和sdcGlusterFS02192.168.200.92GlusterFS02多添加两块各10G的sdb和sdcGlusterFS03192.168.200.93GlusterFS03多添加两块各10G的sdb和sdcGlusterFS04192.168.200.94GlusterFS04多添加两块各10G的sdb和sdcWebClient

192.168.200.95WebClient

多添加两块各10G的sdb和sdc

为了实验的准确性,请尽量和我⽤⼀个版本的Linux操作系统(四台都需要)

并⽤上⽂下载链接⾥给的rpm包作为yum源cat /etc/redhat-releaseuname -rpwdls

1. dbench-4.0-12.el6.x86_64.rpm libaio-0.3.107-10.el6.x86_64.rpm2. glusterfs-3.7.20-1.el6.x86_64.rpm libevent-1.4.13-4.el6.x86_64.rpm3. glusterfs-api-3.7.20-1.el6.x86_64.rpm libgssglue-0.1-11.el6.x86_64.rpm

4. glusterfs-api-devel-3.7.20-1.el6.x86_64.rpm libntirpc-1.3.1-1.el6.x86_64.rpm5. glusterfs-cli-3.7.20-1.el6.x86_64.rpm libntirpc-devel-1.3.1-1.el6.x86_64.rpm

6. glusterfs-client-xlators-3.7.20-1.el6.x86_64.rpm libtirpc-0.2.1-13.el6_9.x86_64.rpm

7. glusterfs-coreutils-0.0.1-0.1.git0c86f7f.el6.x86_64.rpm nfs-utils-1.2.3-75.el6_9.x86_64.rpm8. glusterfs-coreutils-0.2.0-1.el6_37.x86_64.rpm nfs-utils-lib-1.1.5-13.el6.x86_64.rpm9. glusterfs-devel-3.7.20-1.el6.x86_64.rpm python-argparse-1.2.1-2.1.el6.noarch.rpm10. glusterfs-extra-xlators-3.7.20-1.el6.x86_64.rpm python-gluster-3.7.20-1.el6.noarch.rpm11. glusterfs-fuse-3.7.20-1.el6.x86_64.rpm pyxattr-0.5.0-1.el6.x86_64.rpm12. glusterfs-ganesha-3.7.20-1.el6.x86_64.rpm repodata

13. glusterfs-geo-replication-3.7.20-1.el6.x86_64.rpm rpcbind-0.2.0-13.el6_9.1.x86_64.rpm14. glusterfs-libs-3.7.20-1.el6.x86_64.rpm rsync-3.0.6-12.el6.x86_64.rpm

15. glusterfs-rdma-3.7.20-1.el6.x86_64.rpm userspace-rcu-0.7.16-2.el6.x86_64.rpm

16. glusterfs-resource-agents-3.7.20-1.el6.noarch.rpm userspace-rcu-0.7.7-1.el6.x86_64.rpm17. glusterfs-server-3.7.20-1.el6.x86_64.rpm userspace-rcu-devel-0.7.16-2.el6.x86_64.rpm18. keyutils-1.4-5.el6.x86_64.rpm userspace-rcu-devel-0.7.7-1.el6.x86_64.rpm19. keyutils-libs-1.4-5.el6.x86_64.rpm

2.2 GlusterFS 安装

2.2.1 修改主机名

2.2.2 添加hosts⽂件实现集群主机之间相互能够解析(四台都需要)

vim /etc/hosts

1. 192.168.200.69 glusterfs012. 192.168.200.92 glusterfs023. 192.168.200.93 glusterfs034. 192.168.200.94 glusterfs04

cat /etc/hosts

scp /etc/hosts 192.168.200.92:/etc/scp /etc/hosts 192.168.200.93:/etc/scp /etc/hosts 192.168.200.94:/etc/

2.2.3 关闭selinux和防⽕墙(四台都需要)

service iptables stopsetenforce 0

2.2.4 利⽤教程附带的rpm软件包组,充当本地定制化yum源(四台都需要)

cd /etc/yum.repos.d

vim /etc/yum.repos.d/CentOS-Media.repotail -15 CentOS-Media.repo

1. [c6-media]

2. name=CentOS-$releasever - Media3. baseurl=file:///media/CentOS/4. file:///media/cdrom/5. file:///media/cdrecorder/6. gpgcheck=17. enabled=0

8. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-69.

10. [rpm]

11. name=rpm

12. baseurl=file:///root/rpm13. gpgcheck=014. enabled=1

yum -y install glusterfs-server glusterfs-cli glusterfs-geo-replication 如果安装时候有冲突,把冲突的软件包卸载了就可以 rpm -qa | grep 冲突的软件包 rpm -e 冲突的软件包 --nodepswhich glusterfs

2.3 配置glusterfs

2.3.1 查看glusterfs版本信息

which glusterfsglusterfs -V

2.3.2 启动服务(四台都需要)

/etc/init.d/glusterd status --->查看服务状态/etc/init.d/glusterd start --->启动/etc/init.d/glusterd status

chkconfig glusterd on --->添加开机启动chkconfig glusterd --list

2.3.3 存储主机加⼊信任存储池

虚拟机添加信任存储池

特别提⽰:只需要让⼀个虚拟机进⾏添加操作即可。但⾃⼰并不需要添加信任⾃⼰确保所有的虚拟机的glusterd服务都处于开启状态,然后执⾏如下操作gluster peer probe glusterfs02gluster peer probe glusterfs03

gluster peer probe glusterfs04

2.3.4 查看虚拟机信任状态添加结果

gluster peer status

可以查看每台虚拟机的信任状态,他们此时彼此都应该已经互有信任记录了

2.3.5 配置前的准备⼯作

xfsprogs格式化(⼯作中也许会⽤到)

链接光盘源,安装xfs⽀持包(Centos7已经不再需要安装) 所有都要装

yum -y install xfsprogs

在企业⾥我们还需要分区然后才能进⾏格式化。但是我们这⾥就省略了,我们直接格式化每台虚拟机的那块10G硬盘

ext4格式化sdb(四台都需要)

ll /dev/sd*mkfs.ext4 /dev/sdb

建⽴挂在块设备的⽬录并把sdb磁盘挂载到此⽬录上

在四台机器上执⾏mkdir -p /gluster/brick1 建⽴挂在块设备的⽬录 挂载磁盘到⽂件系统(4台都做,步骤相同)mkdir -p /gluster/brick1mount /dev/sdb /gluster/brick1df -h

ext4格式化sdc(四台都需要)

ll /dev/sd*mkfs.ext4 /dev/sdc

建⽴挂在块设备的⽬录并把sdc磁盘挂载到此⽬录上

在四台机器上执⾏mkdir -p /gluster/brick2 建⽴挂在块设备的⽬录 挂载磁盘到⽂件系统(4台都做,步骤相同)mkdir -p /gluster/brick2mount /dev/sdc /gluster/brick2df -h

4台虚拟机加⼊开机⾃动挂载

echo \"mount /dev/sdb /gluster/brick1\" >> /etc/rc.localecho \"mount /dev/sdc /gluster/brick2\" >> /etc/rc.localtail -2 /etc/rc.local

2.3.6 创建volume分布式卷

基本卷:

分布式卷(Distributed): --->相当于raid0读写速度复制卷(Replicated): --->相当于raid1

条带式卷(Striped): --->针对⼤⽂件才会⽤复合卷: --->通常⼯作中都是⽤复合卷

分布式复制卷(Distributed Replicated): --->相当于raid1+0分布式条带卷(Distributed Striped): --->⼤⽂件复制条带卷(Replicated Striped):

分布式复制条带卷(Distributed Replicated Striped): --->三种⽅式总和

创建分布式卷(在glusterfs01上操作)

gluster volume create gs1 glusterfs01:/gluster/brick1 glusterfs02:/gluster/brick1 force

启动创建的卷(在glusterfs01上操作)

gluster volume start gs1

然后我们发现4台虚拟机都能看到如下信息(在任意虚拟机上操作)

gluster volume info

1. Volume Name: gs1 #卷名2. Type: Distribute #分布式

3. Volume ID: 0f0adf7a-3b8f-4016-ac72-83f633e90fac #ID号4. Status: Started #启动状态

5. Number of Bricks: 2 #⼀共两个块设备6. Transport-type: tcp #tcp的连接⽅式7. Bricks: #块信息

8. Brick1: glusterfs01:/gluster/brick19. Brick2: glusterfs02:/gluster/brick110. Options Reconfigured:

11. performance.readdir-ahead: on

2.3.7 volume的两种挂载⽅式

(1)以glusterfs⽅式挂载

挂载卷到/mnt⽬录下并查看(在glusterfs01上操作)

mount -t glusterfs 127.0.0.1:/gs1 /mnt -t参数是指定挂载类型

挂载成功后,我们看到磁盘空间已经整合

在挂载好的/mnt⽬录⾥创建实验⽂件(在glusterfs01上操作)

touch /mnt/{1..5}ls /mnt

在其他虚拟机上挂载分布式卷gs1,查看同步挂载结果

mount -t glusterfs 127.0.0.1:/gs1 /mntls /mnt

在glusterfs01和02上查询实验⽂件结果

ls /gluster/brick1

(2)以NFS⽅式进⾏挂载

在挂载之前我们先来看⼀下如何打开glusterfs的NFS挂载⽅式

在glusterfs01上执⾏如下操作

gluster volume status --->查看分布式卷的状态

以上结果是是什么原因呢?

如果NFS Server的挂载端⼝显⽰N/A表⽰未开启挂载功能,这是由于要先进⾏nfs挂载是需要装两个nfs的软件包的rpcbind和nfs-utils

当然就算系统装了这两个软件包,那么我们也需要开启rpcbind服务,然后在重启glusterfs服务才能够进⾏nfs挂载的操作。

开启glusterfs01的nfs挂载功能

rpm -qa nfs-utils rpcbind #查看是否安装nfs-utils rpcbind/etc/init.d/rpcbind status #查看rpcbind服务状态/etc/init.d/rpcbind start #开启rpcbind服务/etc/init.d/glusterd stop #停⽌glusterd服务/etc/init.d/glusterd start #开启glusterd服务

gluster volume status #这⾥需要等⼏秒再查看,就会发现nfs挂载⽅式开启了

在WebServer服务器上进⾏nfs⽅式的挂载

rpm -qa nfs-utils #查看nfs-utils是否安装yum -y install nfs-utils

mount -t nfs 192.168.200.69:/gs1 /mnt #以nfs⽅式远程挂载分布式卷

1. mount.nfs: rpc.statd is not running but is required for remote locking.2. mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

3. mount.nfs: an incorrect mount option was specified #根据提⽰我们加上-o nolock参数

mount -o nolock -t nfs 192.168.200.69:/gs1 /mntls /mnt #挂载成功df -hT

2.3.8 创建分布式复制卷

在任意⼀台gluster虚拟机上进⾏如下操作

gluster volume create gs2 replica 2 glusterfs03:/gluster/brick1 glusterfs04:/gluster/brick1 forcegluster volume start gs2 #启动卷gluster volume info gs2

1. Volume Name: gs2

2. Type: Replicate #复制卷

3. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b84. Status: Created

5. Number of Bricks: 1 x 2 = 26. Transport-type: tcp7. Bricks:

8. Brick1: glusterfs03:/gluster/brick19. Brick2: glusterfs04:/gluster/brick110. Options Reconfigured:

11. performance.readdir-ahead: on

2.3.9 创建分布式条带卷

gluster volume create gs3 stripe 2 glusterfs01:/gluster/brick2 glusterfs02:/gluster/brick2 forcegluster volume start gs3 #启动卷gluster volume info gs3

1. Volume Name: gs32. Type: Stripe #条带卷

3. Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed4. Status: Created

5. Number of Bricks: 1 x 2 = 26. Transport-type: tcp7. Bricks:

8. Brick1: glusterfs01:/gluster/brick29. Brick2: glusterfs02:/gluster/brick210. Options Reconfigured:

11. performance.readdir-ahead: on

三,进⾏卷的数据写⼊测试

在WebServer服务器挂载创建的三种类型卷gs1,gs2,gs3,进⾏数据写⼊测试gs1

gs2

gs3

3.1 分布式卷gs1的数据写⼊测试

在WebServer上进⾏数据写⼊操作

mount -o nolock -t nfs 192.168.200.69:gs1 /mntdf -h

touch /mnt/{1..10}ls /mnt/

在glusterfs01和glusterfs02上进⾏查看(看看数据到底写⼊了哪个盘)

ls /gluster/brick1

结论:分布式卷的数据存储⽅式是将数据平均写⼊到每个整合的磁盘中,类似于raid0,写⼊速度快,但这样磁盘⼀旦损坏没有纠错能⼒。

3.2 分布式复制卷gs2的数据写⼊测试

在WebServer上进⾏数据写⼊操作

mount -o nolock -t nfs 192.168.200.69:gs2 /mntdf -hls /mnt

touch /mnt/{1..10}ls /mnt

在glusterfs03和glusterfs04上进⾏查看(看看数据到底写⼊了哪个盘)

ls /gluster/brick1

结论:分布式复制卷的数据存储⽅式为,每个整合的磁盘中都写⼊同样的数据内容,类似于raid1,数据⾮常安全,读取性能⾼,占磁盘容量。

3.3 分布式条带卷gs3的数据写⼊测试

在WebServer上进⾏数据写⼊操作

umount /mnt

mount -o nolock -t nfs 192.168.200.69:gs3 /mntdf -h

dd if=/dev/zero of=/root/test bs=1024 count=262144 #创建⼤⼩为256M的⽂件ls

cp test /mnt/ #复制到/mnt⽬录下ls /mnt

du -sh /mnt/test #查看⼤⼩为256M

在glusterfs01和glusterfs02上进⾏查看(看看数据到底是怎么存的)

du -sh /gluster/brick2/test

结论:我们发现分布式条带卷,是将数据的容量平均分配到了每个整合的磁盘节点上。⼤幅提⾼⼤⽂件的并发读访问。

四,存储卷中brick块设备的扩容

4.1 分布式复制卷的扩容

gluster volume add-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force #添加两个块设备gluster volume info gs2

1. Volume Name: gs2

2. Type: Distributed-Replicate

3. Volume ID: 0b425dac-fe4b-4e97-882e-39a8d35cc15a4. Status: Started

5. Number of Bricks: 2 x 2 = 4 #已经扩容6. Transport-type: tcp7. Bricks:

8. Brick1: glusterfs03:/gluster/brick19. Brick2: glusterfs04:/gluster/brick110. Brick3: glusterfs03:/gluster/brick211. Brick4: glusterfs04:/gluster/brick212. Options Reconfigured:

13. performance.readdir-ahead: on

特别提⽰:

对分布式复制卷和分布式条带卷进⾏扩容时,要特别注意,如果创建卷之初的时候选择的是replica 2 或者stripe 2。那么扩容时,就必须⼀次性扩容两个或两个的倍数的块设备。

例如你给⼀个分布式复制卷的replica为2,你在增加bricks的时候数量必须为2,4,6,8等。

4.2 查看扩容后的容量并进⾏写⼊测试

在WebServer上挂载gs2并查看挂载⽬录的容量

umount /mnt

mount -o nolock -t nfs 192.168.200.69:gs2 /mntdf -hT

在WebServer上进⾏数据写⼊操作

touch /mnt/{11..20}ls /mnt

在glusterfs03和glusterfs04上查看数据存到哪⾥去了

gluster volume info gs2

1. Volume Name: gs2

2. Type: Distributed-Replicate

3. Volume ID: 0b425dac-fe4b-4e97-882e-39a8d35cc15a4. Status: Started

5. Number of Bricks: 2 x 2 = 46. Transport-type: tcp7. Bricks:

8. Brick1: glusterfs03:/gluster/brick1 #组成gs2的块设备就在03和04上9. Brick2: glusterfs04:/gluster/brick110. Brick3: glusterfs03:/gluster/brick211. Brick4: glusterfs04:/gluster/brick212. Options Reconfigured:

13. performance.readdir-ahead: on

ls /gluster/brick1ls /gluster/brick2

通过对扩容的gs2进⾏写⼊测试,我们发现数据并没有被写⼊到新加⼊的块设备中,这是为甚什么?

这是因为,为了数据的安全,新扩容块设备的卷,默认必须先做⼀次磁盘平衡(块设备同步),如此才能正常开始使⽤。

4.3 进⾏磁盘存储的平衡

注意:平衡布局是很有必要的,因为布局结构是静态的,当新的bricks加⼊现有卷,新创建的⽂件会分布到旧的bricks中,所以需要平衡布局结构,使新加⼊的bricks⽣效。布局平衡只是使新布局⽣效,并不会在新的布局移动⽼的数据,如果你想在新布局⽣效后,重新平衡卷中的数据,还需要对卷中的数据进⾏平衡。

对gs2进⾏磁盘存储平衡

gluster volume rebalance gs2 start

检查gs2块设备磁盘平衡结果

ls /gluster/brick1ls /gluster/brick2

执⾏磁盘存储平衡以后(要想写⼊⽂件需要重新挂载),我们发现数据被复制成了4份在4个块设备中。

五,存储卷的缩减与删除

(1)对存储卷中的brick进⾏缩减

注意:你可能想在线缩⼩卷的⼤⼩,例如:当硬件损坏或者⽹络故障的时候,你可能想在卷中移除相关的bricks。注意,当你移除bricks的时候,你在gluster的挂载点将不能继续访问是数据,只有配置⽂件中的信息移除后你才能继续访问bricks的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的bricks数⽬必须是replica或者stripe的倍数。例如:⼀个分布式条带卷的stripe是2,当你移除bricks的时候必须是2,4,6,8等。

1. #先停⽌卷gs2

2. [root@glusterfs01 ~]# gluster volume stop gs2

3. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y4. volume stop: gs2: success

5. #然后移除卷,因为是复制卷且replica为2,因此每次移除必须是2的倍数

6. [root@glusterfs01 ~]# gluster volume remove-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force7. Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y8. volume remove-brick commit force: success9. #我们发现gs2的卷已经被移除

10. [root@glusterfs01 ~]# gluster volume info gs211. Volume Name: gs212. Type: Replicate

13. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b814. Status: Stopped

15. Number of Bricks: 1 x 2 = 216. Transport-type: tcp17. Bricks:

18. Brick1: glusterfs03:/gluster/brick119. Brick2: glusterfs04:/gluster/brick120. Options Reconfigured:

21. performance.readdir-ahead: on22. #重新启动卷gs2

23. [root@glusterfs01 ~]# gluster volume start gs224. volume start: gs2: success

(2)对存储卷进⾏删除

1. #停⽌卷gs1

2. [root@glusterfs01 ~]# gluster volume stop gs1

3. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y4. volume stop: gs1: success5. #删除卷gs1

6. [root@glusterfs01 ~]# gluster volume delete gs1

7. Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y8. volume delete: gs1: success9. #查看卷信息,发现gs1已经没了

10. [root@glusterfs01 ~]# gluster volume info11. Volume Name: gs212. Type: Replicate

13. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b814. Status: Started

15. Number of Bricks: 1 x 2 = 216. Transport-type: tcp17. Bricks:

18. Brick1: glusterfs03:/gluster/brick119. Brick2: glusterfs04:/gluster/brick120. Options Reconfigured:

21. performance.readdir-ahead: on22. Volume Name: gs323. Type: Stripe

24. Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed25. Status: Started

26. Number of Bricks: 1 x 2 = 2

27. Transport-type: tcp28. Bricks:

29. Brick1: glusterfs01:/gluster/brick230. Brick2: glusterfs02:/gluster/brick231. Options Reconfigured:

32. performance.readdir-ahead: on

*特别提⽰

⽆论是缩减卷还是删除卷,并不会是清除卷中的数据。数据仍旧会保存在对应磁盘上。

六,构建企业级分布式存储

6.1 硬件要求

⼀般选择2U的机型,磁盘STAT盘4T,如果I/O要求⽐较⾼,可以采购SSD固态硬盘。为了充分保证系统的稳定性和性能,要求所有glusterfs服务器硬件配置尽量⼀致,尤其是硬盘数量和⼤⼩。机器的RAID卡需要带电池,缓存越⼤,性能越好。⼀般情况下,建议做RAID10,如果出于空间要求考虑,需要做RAID5,建议最好能有1-2块硬盘的热备盘。

6.2 系统要求和分区划分

系统要求使⽤CentOS6.x,安装完成后升级到最新版本,安装的时候,不要使⽤LVM,建议/boot分区200M,根分区

100G,swap分区和内存⼀样⼤⼩,剩余空间给gluster使⽤,划分单独的硬盘空间。系统安装软件没有特殊要求,建议除了开发⼯具和基本的管理软件,其他软件⼀律不装。

6.3 ⽹络环境

⽹络要求全部千兆环境,gluster服务器⾄少有2块⽹卡,1块⽹卡绑定供gluster使⽤,剩余⼀块分配管理⽹络ip,⽤于系统管理。如果有条件购买万兆交换机,服务器配置万兆⽹卡,存储性能会更好。⽹络⽅⾯如果安全性要求⾼,可以多⽹卡绑定。

6.4 服务器摆放分布

服务器主备机器要放在不同的机柜,连接不同的交换机,即使⼀个机柜出现问题,还有⼀份数据正常访问。

6.5 构建⾼性能,⾼可⽤存储

⼀般在企业中,采⽤的是分布式复制卷,因为有数据备份,数据相对安全,分布式条带卷⽬前对glusterfs来说没有完全成熟,存在⼀定的是数据安全风险。

6.5.1 开启防⽕墙端⼝

⼀般在企业应⽤中Linux防⽕墙是打开的,开通服务器之间访问的端⼝

1. iptables -I INPUT -p tcp --dport 24007:24011 -j ACCEPT2. iptables -I INPUT -p tcp --dport 49152:49162 -j ACCEPT

1. [root@glusterfs01 ~]# cat /etc/glusterfs/glusterd.vol2. volume management3. type mgmt/glusterd

4. option working-directory /var/lib/glusterd5. option transport-type socket,rdma

6. option transport.socket.keepalive-time 107. option transport.socket.keepalive-interval 28. option transport.socket.read-fail-log off9. option ping-timeout 010. option event-threads 1

11. # option base-port 49152 #默认端⼝可以在这⾥改,因为这个端⼝可能会和企业⾥的kvm端⼝冲突

6.5.2 Glusterfs⽂件系统优化

Performance.quick-read:优化读取⼩⽂件的性能

Performance.read-ahead:⽤预读的⽅式提⾼读取的性能,有利于应⽤频繁持续性的访问⽂件,当应⽤完成当前数据块读取的时候,下⼀个数据块就已经准备好了。

Performance.write-behind:写⼊数据时,先写⼊缓存内,再写⼊硬盘内,以提⾼写⼊的性能。Performance.io-cache:缓存已经被读过的。

⽂件系统优化调整⽅法

Glusster volume set <卷> <参数>

1. [root@glusterfs01 ~]# gluster volume info gs22. Volume Name: gs23. Type: Replicate

4. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b85. Status: Started

6. Number of Bricks: 1 x 2 = 27. Transport-type: tcp8. Bricks:

9. Brick1: glusterfs03:/gluster/brick110. Brick2: glusterfs04:/gluster/brick111. Options Reconfigured:

12. performance.readdir-ahead: on

13. [root@glusterfs01 ~]# gluster volume set gs2 performance.read-ahead on #设置预缓存优化14. volume set: success

15. [root@glusterfs01 ~]# gluster volume info gs216. Volume Name: gs217. Type: Replicate

18. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b819. Status: Started

20. Number of Bricks: 1 x 2 = 221. Transport-type: tcp22. Bricks:

23. Brick1: glusterfs03:/gluster/brick124. Brick2: glusterfs04:/gluster/brick125. Options Reconfigured:

26. performance.read-ahead: on #已经添加上了27. performance.readdir-ahead: on

28. [root@glusterfs01 ~]# gluster volume set gs2 performance.cache-size 256MB #设置读缓存⼤⼩29. volume set: success

30. [root@glusterfs01 ~]# gluster volume info gs231. Volume Name: gs232. Type: Replicate

33. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8

34. Status: Started

35. Number of Bricks: 1 x 2 = 236. Transport-type: tcp37. Bricks:

38. Brick1: glusterfs03:/gluster/brick139. Brick2: glusterfs04:/gluster/brick140. Options Reconfigured:

41. performance.cache-size: 256MB #已经添加上了42. performance.read-ahead: on43. performance.readdir-ahead: on

6.5.3 监控及⽇常维护

使⽤Zabbix⾃带模板即可。Cpu,内存,主机存活,磁盘空间,主机运⾏时间,系统load。⽇常情况要查看服务器的监控值,遇到报警要及时处理。

1. #以下命令在复制卷的场景下才会有2.

3. #gluster volume status gs2 查看节点NFS是否在线4. (开没开端⼝)5.

6. #gluster volume heal gs2 full 启动完全修复7.

8. #gluster volume heal gs2 info 查看需要修复的⽂件9.

10. #gluster volume heal gs2 info healed 查看修复成功的⽂件11.

12. #gluster volume heal gs2 info heal-failed 查看修复失败⽂件13.

14. #gluster volume heal gs2 info split-brain 查看脑裂的⽂件15.

16. #gluster volume quota gs2 enable --激活quota功能17.

18. #gluster volume quota gs2 disable --关闭quota功能19.

20. #gluster volume quota gs2 limit-usage /data 10GB --/gs2/data ⽬录限制21.

22. #gluster volume quota gs2 list --quota 信息列表23.

24. #gluster volume quota gs2 list /data --限制⽬录的quota信息25.

26. #gluster volume set gs2 features.quota-timeout 5 --设置信息的超时事实上时间27.

28. #gluster volume quota gs2 remove /data -删除某个⽬录的quota设置29.

30. 备注:

31. 1)quota 功能,主要是对挂载点下的某个⽬录进⾏空间限额。如:/mnt/glusterfs/data⽬录,⽽不是对组成卷组的空间进⾏限制

七 ⽣产环境遇到常见故障处理

7.1 硬盘故障

因为底层做了raid配置,有硬件故障,直接更换硬盘,会⾃动同步数据。(raid5)

7.2 ⼀台主机故障

⼀台节点故障的情况包括以下类型:

1,物理故障

2,同时有多块硬盘故障,造成是数据丢失 3,系统损坏不可修复

解决⽅法:

找⼀台完全⼀样的机器,⾄少要保证硬盘数量和⼤⼩⼀致,安装系统,配置和故障机同样的ip,安装gluster软件,保证配置⼀样,在其他健康的节点上执⾏命令gluster peer status,查看故障服务器的uuid

1. #例如:

2. [root@glusterfs03 ~]# gluster peer status3. Number of Peers: 34. Hostname: glusterfs02

5. Uuid: 0b52290d-96b0-4b9c-988d-44062735a8a86. State: Peer in Cluster (Connected)7. Hostname: glusterfs04

8. Uuid: a43ac51b-641c-4fc4-be56-f6873423b4629. State: Peer in Cluster (Connected)10. Hostname: glusterfs01

11. Uuid: 198f2c7c-1104-4671-8989-b430b77540e912. State: Peer in Cluster (Connected)13. [root@glusterfs03 ~]#

修改新加机器的/var/lib/glusterd/glusterd.info和故障机器的⼀样

1. [root@glusterfs04 ~]# cat /var/lib/glusterd/glusterd.info2. UUID=a43ac51b-641c-4fc4-be56-f6873423b4623. operating-version=30712

在新机器挂载⽬录上执⾏磁盘故障的操作(任意节点)

1. [root@glusterfs04 ~]# gluster volume heal gs2 full

2. Launching heal operation to perform full self heal on volume gs2 has been successful3. Use heal info commands to check status

就会⾃动开始同步,但是同步的时候会影响整个系统的性能 可以查看状态

1. [root@glusterfs04 ~]# gluster volume heal gs2 info2. Brick glusterfs03:/gluster/brick13. Status: Connected4. Number of entries: 0

5. Brick glusterfs04:/gluster/brick16. Status: Connected7. Number of entries: 0

因篇幅问题不能全部显示,请点此查看更多更全内容

Top