GlusterFS是一个高层次的分布式文件系统解决方案。通过增加一个逻辑层,对上层使用者掩盖了下面的实现,使用者不用了解也不需知道,文件的存储形式、分布。
内部实现是整合了许多存储块(server)通过Infiniband RDMA或者 Tcp/Ip方式互联的一个并行的网络文件系统,这样的许多存储块可以通过许多廉价的x86主机,通过网络搭建起来
其相对于传统NAS 、SAN、Raid的优点就是:
1.容量可以按比例的扩展,且性能却不会因此而降低。
2.廉价且使用简单,完全抽象在已有的文件系统之上。
3.扩展和容错设计的比较合理,复杂度较低。扩展使用translator方式,扩展调度使用scheduling接口,容错交给了本地的文件系统来处理。
4.适应性强,部署方便,对环境依赖低,使用,调试和维护便利。
支持主流的linux系统发行版,包括 fc,ubuntu,debian,suse等,并已有若干成功应用。
一般在企业中,采用的是分布式复制卷,因为有数据备份,数据相对安全,分布式条带卷目前对 gluster 来说没有完全成熟,存在一定的数据安全风险。
网络要求全部千兆环境,gluster 服务器至少有 2 块网卡,1 块网卡绑定供 gluster 使用,剩余一块分配管理网络 IP,用于系统管理。如果有条件购买万兆交换机,服务器配置万兆网卡,存储性能会更好。网络方面如果安全性要求较高,可以多网卡绑定。
跨地区机房配置 Gluster,在中国网络不适用。
下面对glusterfs做分布式、条带、复制等做演示如下:
1、安装glusterfs前的环境准备
首先关闭iptables和selinux,配置hosts文件如下:
1
2
3
4
5
6
7
|
[root@data
-
1
-
3
~]
# cat /etc/hosts
127.0
.
0.1
localhost localhost.localdomain localhost4 localhost4.localdomain4
::
1
localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0
.
0.154
data
-
1
-
1
10.0
.
0.155
data
-
1
-
2
10.0
.
0.142
data
-
1
-
3
10.0
.
0.143
data
-
1
-
4
|
2、安装glusterfs源
glusterfs源在阿里的epel源中是存在的,所以直接yum下载安装即可
1
2
3
4
5
6
7
8
|
yum search centos
-
release
-
gluster
centos
-
release
-
gluster310.noarch
centos
-
release
-
gluster312.noarch
centos
-
release
-
gluster36.noarch
centos
-
release
-
gluster37.noarch
centos
-
release
-
gluster38.noarch
centos
-
release
-
gluster39.noarch
|
这里我们使用glusterfs的3.10版本的源
1
|
yum install centos
-
release
-
gluster310.noarch
-
y
|
3、安装glusterfs
在安装glusterfs的时候直接指定源为glusterfs源,由于 源[centos-gluster310-test]的enable为0,所以在指定源的时候用--enablerepo来让源生效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@data
-
1
-
1
~]
# cat /etc/yum.repos.d/CentOS-Gluster-3.10.repo
# CentOS-Gluster-3.10.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more
# information
[centos
-
gluster310]
name
=
CentOS
-
$releasever
-
Gluster
3.10
baseurl
=
http:
/
/
mirror.centos.org
/
centos
/
$releasever
/
storage
/
$basearch
/
gluster
-
3.10
/
gpgcheck
=
1
enabled
=
1
gpgkey
=
file
:
/
/
/
etc
/
pki
/
rpm
-
gpg
/
RPM
-
GPG
-
KEY
-
CentOS
-
SIG
-
Storage
[centos
-
gluster310
-
test]
name
=
CentOS
-
$releasever
-
Gluster
3.10
Testing
baseurl
=
http:
/
/
buildlogs.centos.org
/
centos
/
$releasever
/
storage
/
$basearch
/
gluster
-
3.10
/
gpgcheck
=
0
enabled
=
0
gpgkey
=
file
:
/
/
/
etc
/
pki
/
rpm
-
gpg
/
RPM
-
GPG
-
KEY
-
CentOS
-
SIG
-
Storage
|
安装glusterfs
1
|
yum
-
-
enablerepo
=
centos
-
gluster
*
-
test install glusterfs
-
server glusterfs
-
cli glusterfs
-
geo
-
replication
-
y
|
4、查看glusterfs版本并启动glusterfs服务
1
2
3
4
5
|
[root@data
-
1
-
3
~]
# glusterfs -V
glusterfs
3.10
.
7
#启动glusterfs服务
/
etc
/
init.d
/
glusterd start
|
5、将分布式存储主机加入到信任主机池并查看加入的主机状态
随便在一个开启glusterfs服务的主机上将其他主机加入到一个信任的主机池里
1
2
3
4
5
6
|
[root@data
-
1
-
1
~]
# gluster peer probe data-1-2
peer probe: success.
[root@data
-
1
-
1
~]
# gluster peer probe data-1-3
peer probe: success.
[root@data
-
1
-
1
~]
# gluster peer probe data-1-4
peer probe: success.
|
查看主机池中主机的状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@data
-
1
-
1
~]
# gluster peer status
Number of Peers:
3
Hostname: data
-
1
-
2
Uuid:
08b26b41
-
1479
-
45b5
-
959f
-
03fd992f76cf
State: Peer
in
Cluster (Connected)
Hostname: data
-
1
-
3
Uuid: a59e47da
-
ba3d
-
4b23
-
bb7f
-
5d53f268dd3d
State: Peer
in
Cluster (Connected)
Hostname: data
-
1
-
4
Uuid: eaeef3f8
-
247b
-
4ff2
-
9f7b
-
6fdb678bb36a
State: Peer
in
Cluster (Connected)
|
6、在每台主机上创建几块硬盘,做接下来的分布式存储使用
创建的硬盘要用xfs格式来格式化硬盘,如果用ext4来格式化硬盘的话,对于大于16TB空间格式化就无法实现了。所以这里要用xfs格式化磁盘(centos7默认的文件格式就是xfs),并且xfs的文件格式支持PB级的数据量
centos6默认是不支持xfs的文件格式,所以要先安装xfs支持包
1
|
yum install xfsprogs
-
y
|
用fdisk -l
查看磁盘设备,例如查看data-1-1的磁盘设备,这里的sdc、sdd、sde是新加的硬盘
1
2
3
4
5
6
|
[root@data
-
1
-
1
~]
# fdisk -l
Disk
/
dev
/
sda:
8589
MB,
8589934592
bytes
Disk
/
dev
/
sdb:
3221
MB,
3221225472
bytes
Disk
/
dev
/
sdc:
2147
MB,
2147483648
bytes
Disk
/
dev
/
sdd:
3221
MB,
3221225472
bytes
Disk
/
dev
/
sde:
4294
MB,
4294967296
bytes
|
特别说明:
如果磁盘大于 2T 的话就用 parted 来分区,这里我们不用分区(可以不分区); 做分布式文件系统的时候数据盘一般不需要做 RAID,一般系统盘会做 RAID 1;
如果有raid卡的话,最好用上,raid卡有数据缓存功能,也能提高磁盘的iops,最好的话,用RAID 5;
如果都不做raid的话,也是没问题的,glusterfs也是可以保证数据的安全的。
格式化磁盘
1
2
3
|
[root@data
-
1
-
1
~]
# mkfs.xfs -f /dev/sdc
[root@data
-
1
-
1
~]
# mkfs.xfs -f /dev/sdd
[root@data
-
1
-
1
~]
# mkfs.xfs -f /dev/sde
|
在四台机器上创建挂载块设备的目录,挂载硬盘到目录
1
2
3
4
5
6
7
|
mkdir
-
p
/
storage
/
brick{
1.
.
3
}
echo
"/dev/sdb /storage/brick1 xfs defaults 0 0"
>>
/
etc
/
fstab
echo
"/dev/sdc /storage/brick2 xfs defaults 0 0"
>>
/
etc
/
fstab
echo
"/dev/sdd /storage/brick3 xfs defaults 0 0"
>>
/
etc
/
fstab
#挂载
mount
-
a
|
7、创建glusterfs卷
GlusterFS 五种卷
分布式复制卷的brick顺序决定了文件分布的位置,一般来说,先是两个brick形成一个复制关系,然后两个复制关系形成分布。
企业一般用后两种,大部分会用分布式复制(可用容量为 总容量/复制份数),通过网络传输的话最好用万兆交换机,万兆网卡来做。这样就会优化一部分性能。它们的数据都是通过网络来传输的。
配置分布式卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#在信任的主机池中任意一台设备上创建卷都可以,而且创建好后再任意设备都可以查看
[root@data
-
1
-
1
~]
# gluster volume create gv1 data-1-1:/storage/brick1/ data-1-2:/storage/brick1/ force
#启动卷gv1
[root@data
-
1
-
1
~]
# gluster volume start gv1
#查看创建的卷
[root@data
-
1
-
1
~]
# gluster volume info gv1
Volume Name: gv1
Type
: Distribute
Volume
ID
: f2c4776c
-
1f53
-
4d26
-
b5a4
-
d61b4bc77f6c
Status: Started
Snapshot Count:
0
Number of Bricks:
2
Transport
-
type
: tcp
Bricks:
Brick1: data
-
1
-
1
:
/
storage
/
brick1
Brick2: data
-
1
-
2
:
/
storage
/
brick1
Options Reconfigured:
transport.address
-
family: inet
nfs.disable: on
# 挂载卷到目录
[root@data
-
1
-
4
~]
# mount -t glusterfs 127.0.0.1:/gv1 /mnt
[root@data
-
1
-
4
~]
# df -h
Filesystem Size Used Avail Use
%
Mounted on
/
dev
/
sda3
9.1G
3.7G
4.9G
43
%
/
tmpfs
491M
0
491M
0
%
/
dev
/
shm
/
dev
/
sda1
190M
27M
153M
16
%
/
boot
/
dev
/
sdb
3.0G
33M
3.0G
2
%
/
storage
/
brick1
/
dev
/
sdc
4.0G
33M
4.0G
1
%
/
storage
/
brick2
/
dev
/
sdd
5.0G
33M
5.0G
1
%
/
storage
/
brick3
127.0
.
0.1
:
/
gv1
4.0G
65M
4.0G
2
%
/
mnt
# 在data-1-4 创建测试文件
[root@data
-
1
-
4
mnt]
# touch {a..f}
[root@data
-
1
-
4
mnt]
# ll
总用量
0
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
a
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
b
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
c
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
d
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
e
-
rw
-
r
-
-
r
-
-
1
root root
0
11
月
6
15
:
11
f
# 在data-1-2也可看到新创建的文件,信任存储池中的每一台主机挂载这个卷后都可以看到
[root@data
-
1
-
2
~]
# mount -t glusterfs 127.0.0.1:/gv1 /mnt
[root@data
-
1
-
2
~]
# ll /mnt
total
0
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
a
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
b
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
c
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
d
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
e
-
rw
-
r
-
-
r
-
-
1
root root
0
Nov
6
15
:
11
f
# 文件实际存在位置data-1-1和data-1-2上的/storage/brick1目录下,通过hash分别存到data-1-1和data-1-2上的分布式磁盘上
[root@data
-
1
-
1
~]
# ll /storage/brick1
total
0
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
a
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
b
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
c
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
e
[root@data
-
1
-
2
~]
# ll /storage/brick1
total
0
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
d
-
rw
-
r
-
-
r
-
-
2
root root
0
Nov
6
15
:
11
f
|
配置复制卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 创建复制式卷
[root@data
-
1
-
2
~]
# gluster volume create gv2 replica 2 data-1-1:/storage/brick2 data-1-2:/storage/brick2 force
# 启动创建的卷
[root@data
-
1
-
2
~]
# gluster volume start gv2
# 查看卷信息
[root@data
-
1
-
2
~]
# gluster volume info gv2
Volume Name: gv2
Type
: Replicate
Volume
ID
:
27b85504
-
0a78
-
4dae
-
9332
-
056da410be2e
Status: Started
Snapshot Count:
0
Number of Bricks:
1
x
2
=
2
Transport
-
type
: tcp
Bricks:
Brick1: data
-
1
-
1
:
/
storage
/
brick2
Brick2: data
-
1
-
2
:
/
storage
/
brick2
Options Reconfigured:
transport.address
-
family: inet
nfs.disable: on
# 挂载卷到目录,创建测试文件
[root@data
-
1
-
3
~]
# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@data
-
1
-
3
~]
# df -h
127.0
.
0.1
:
/
gv2
3.0G
33M
3.0G
2
%
/
opt
[root@data
-
1
-
3
~]
# touch /opt/{1..6}
[root@data
-
1
-
3
~]
# ls /opt
1
2
3
4
5
6
#在其他设备上通过挂载可以查看到同样的内容
[root@data
-
1
-
4
mnt]
# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@data
-
1
-
4
mnt]
# ls /opt
1
2
3
4
5
6
# 但是创建文件的实际存在位置为data-1-1和data-1-2上的/storage/brick2目录下,因为是复制卷,这两个目录下的内容是一致的。
[root@data
-
1
-
1
~]
# ls /storage/brick2
1
2
3
4
5
6
[root@data
-
1
-
2
~]
# ls /storage/brick2
1
2
3
4
5
6
|
配置条带卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 创建条带卷
[root@data
-
1
-
4
mnt]
# gluster volume create gv3 stripe 2 data-1-1:/storage/brick3 data-1-2:/storage/brick3 force
|