GlusterFS install and config

GlusterFS install and config

GlusterFS是一个分布式文件系统,通过 RDMA 和 TCP/IP 方式将分布到不同服务器上的存储空间汇集成一个大的网络并行文件系统,它的安装配置简单,扩展性和性能也都还不错,从Oracle DBA的角度看,在有些场景下还是可以考虑的,比如存放OGG的trail文件,比如存放归档或逻辑备份什么的。本文简单介绍一下GlusterFS在RedHat 7下的安装和使用。

实验环境:

主机 网络 OS 存储
192.168.0.18 服务器 192.168.0.18 1Gb eth

192.168.1.18 56Gb IB

192.168.2.18 56Gb IB

Redhat 7.4 /dev/sdb
192.168.0.19 服务器 192.168.0.19 1Gb eth

192.168.1.19 56Gb IB

192.168.2.19 56Gb IB

Redhat 7.4 /dev/sdb
192.168.0.97 服务器 192.168.0.97 1Gb eth

192.168.1.97 56Gb IB

192.168.2.97 56Gb IB

Redhat 7.4 /dev/sdb
192.168.0.98 服务器 192.168.0.98 1Gb eth

192.168.1.98 56Gb IB

192.168.2.98 56Gb IB

Redhat 7.4 /dev/sdb
192.168.0.17 客户端 192.168.0.17 1Gb eth

192.168.1.17 56Gb IB

192.168.2.17 56Gb IB

Redhat 7.4

从源码安装

首先是安装依赖的包:

  • Linux发布中自带的包

yum install automake libtool git flex bison openssl-devel libuuid-devel libacl-devel libxml2-devel python-devel libaio-devel sqlite-devel

  • 需要单独下载的包

userspace-rcu-0.7.16-1.el7.x86_64.rpm

userspace-rcu-devel-0.7.16-1.el7.x86_64.rpm

可以在这个地址找到:https://centos.pkgs.org/7/epel-x86_64/48/

不要安装更新的版本,比如使用源码安装userspace-rcu的1.0版本,会导致glusterfs编译报错。

下载GlusterFS源码地址:https://github.com/gluster/glusterfs/archive/v4.1.3.zip

解压缩,安装:

# unzip glusterfs-4.1.3.zip

# cd glusterfs-4.1.3

# ./autogen.sh

# ./configure

# make

# make install

安装就完成了。

启动glusterd服务:

# service glusterd start

使用源码安装,server和client的步骤都是一样的,只是在客户端不用启动glusterd服务。

GlusterFS架构

介绍配置方法之前,先介绍一下基本概念

trusted storage pool(TSP)

TSP就是由存储服务器组成的网络,在开始配置GlusterFS之前,需要将所有存储服务器加入到这个网络。

Peer

Peer就是指的每一个存储服务器

Brick

Brick可以理解为GlusterFS管理的存储单元,brick一般表现形式是一个文件系统,brick底层是如何组成的,GlusterFS不管,可以是一个物理磁盘,也可以是做完RAID后的逻辑磁盘,也可以是ZFS卷。

Volume

Volume就是客户端可以使用的存储单元,volume是由多个brick组成的,volume的类型有分布,复制,分布复制等几种,3.7以后条带类型的卷没有了,取而代之的是shard特性。

分布卷是将文件分布到不同的brick上,所有brick组成volume,没有数据冗余,我理解类似RAID0,但是,注意单纯的分布卷并不做条带化,也就是不会切割大文件。

clip_image002

复制卷就是在多个brick上存放文件副本,我理解类似RAID1,复制卷的副本数可以2或者3。

clip_image004

分布复制卷就是既做复制又做分布,brick个数必须是副本数的整数倍。我理解类似RAID10

clip_image006

虽然类似RAID,但是注意上述三种卷都不做条带化,glusterfs 3.7 之前还有一种条带卷,可以做条带化,3.7之后,用shard功能取代了条带卷,上述三种卷都可以启用shard功能,将大文件分片。

配置步骤

  • 将存储服务器加入TSP

在 192.168.0.18上执行:

# gluster peer probe 192.168.1.19

# gluster peer probe 192.168.1.97

# gluster peer probe 192.168.1.98

本机不用加入,直接就在TSP里面:

# gluster peer probe 192.168.1.18

peer probe: success. Probe on localhost not needed

查看pool情况:

# gluster pool list

UUID Hostname State

68b97090-fc52-439c-a32d-db003a174676 192.168.1.19 Connected

3b619849-b9b4-41b9-88d5-394fe75670b6 192.168.1.97 Connected

0d33bada-be28-4641-8e19-f693b2c8aea4 192.168.1.98 Connected

42ac25aa-de7c-4853-91c1-a978afd117c4 localhost Connected

  • 准备bricks

在每台存储服务器执行:

# mkfs.xfs /dev/sda

# mount /dev/sda /gfsdata

# mkdir –p /gfsdata/data1

  • 创建卷

创建一个分布复制卷:

# gluster volume create gv1 replica 2 transport rdma 192.168.1.97:/gfsdata/data1 192.168.1.18:/gfsdata/data1 192.168.1.98:/gfsdata/data1 192.168.1.19:/gfsdata/data1

其中replica 2,代表副本数是2。

其中transport的取值可以是“rdma” 或 “tcp” 或 “tcp,rdma”,如果使用普通万兆网络,就是tcp,使用带RDMA功能的融合以太或ib,就使用rdma来得到更好的性能。

# gluster volume info gv1

Volume Name: gv1

Type: Distributed-Replicate

Volume ID: 2a5466c0-3637-4369-8fe8-2594b8964a8a

Status: Started

Snapshot Count: 0

Number of Bricks: 2 x 2 = 4

Transport-type: rdma

Bricks:

Brick1: 192.168.1.97:/gfsdata/data1

Brick2: 192.168.1.18:/gfsdata/data1

Brick3: 192.168.1.98:/gfsdata/data1

Brick4: 192.168.1.19:/gfsdata/data1

Options Reconfigured:

nfs.disable: on

performance.client-io-threads: off

  • 启动glusterfs卷

# gluster volume start gv1

  • 挂载glusterfs卷

在192.168.0.17挂载卷:

# mkdir /test

# mount –t glusterfs –o transport=rdma 192.168.2.97:/gv1 /test

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/ol-root 50G 44G 6.6G 87% /

devtmpfs 16G 0 16G 0% /dev

tmpfs 16G 0 16G 0% /dev/shm

tmpfs 16G 18M 16G 1% /run

tmpfs 16G 0 16G 0% /sys/fs/cgroup

/dev/sda2 1014M 230M 785M 23% /boot

/dev/sda1 200M 8.5M 192M 5% /boot/efi

/dev/mapper/ol-home 491G 26G 466G 6% /home

tmpfs 3.1G 12K 3.1G 1% /run/user/42

tmpfs 3.1G 0 3.1G 0% /run/user/0

192.168.2.97:/gv1.rdma 1.8T 638G 1.2T 36% /test

我在这里用了另一个ib链路mount glusterfs卷,对应192.168.2.x的地址,glusterfs内网使用192.168.1.x 链路,也就是private和public网络分开,避免争用。

为了得到更好的大文件操作性能,我们还可以打开shard功能:

# gluster volume set gv1 features.shard on

volume set: success

系统会自动计算一个合适的块大小来做分片,也可以通过参数设定。

  • 测试

创建一个大文件:

# cd /test

# fallocate –l 100G disk01

# ls -l

total 104857600

-rw-r–r– 1 root root 107374182400 Aug 30 2018 disk01

文件在bricks上存储会被分片,如果没启用shard功能,这个100g的大文件只会在两个brick上存在,因为分布复制卷,会分布多个文件,单一文件是不拆散的,我们是4个brick,所以会有一个brick复制这个文件,所以只有两个brick上有这个100g的大文件。如果启用了shard功能,系统会将文件分成若干份,在2个互为复制的brick上只放文件的第一个分片,其他分片会均匀第分布到所有的brick上,存放在brick对应的目录下的隐藏目录.shard下。

我们到192.168.0.18上查看:

# pwd

/gfsdata/data1

# ls -al

total 65620

drwxr-xr-x 4 root root 52 Aug 28 23:36 .

drwxr-xr-x 4 root root 31 Aug 28 18:57 ..

-rw-r–r– 2 root root 67108864 Aug 28 23:36 disk01

drw——- 263 root root 8192 Aug 28 23:36 .glusterfs

drwxr-xr-x 2 root root 45056 Aug 28 23:36 .shard

# cd ./.shard

# du -sh

49G .

可以看到./shard目录下大概是49G的文件,加上文件的第一个分片,2个节点100G,双副本,所以每个节点都会有50G左右的文件。

Comments are closed.