glusterfs分布式存储部署

glusterfs简介

 GlusterFS是一个高层次的分布式文件系统解决方案。通过增加一个逻辑层,对上层使用者掩盖了下面的实现,使用者不用了解也不需知道,文件的存储形式、分布。

 内部实现是整合了许多存储块(server)通过Infiniband RDMA或者 Tcp/Ip方式互联的一个并行的网络文件系统,这样的许多存储块可以通过许多廉价的x86主机,通过网络搭建起来

 其相对于传统NAS 、SAN、Raid的优点就是:

  1.容量可以按比例的扩展,且性能却不会因此而降低。

  2.廉价且使用简单,完全抽象在已有的文件系统之上。

  3.扩展和容错设计的比较合理,复杂度较低。扩展使用translator方式,扩展调度使用scheduling接口,容错交给了本地的文件系统来处理。

   4.适应性强,部署方便,对环境依赖低,使用,调试和维护便利。

 支持主流的linux系统发行版,包括 fc,ubuntu,debian,suse等,并已有若干成功应用。

glusterfs安装配置

 一般在企业中,采用的是分布式复制卷,因为有数据备份,数据相对安全,分布式条带卷目前对 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  - / 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 五种卷  

  • Distributed:分布式卷,文件通过 hash 算法随机分布到由 bricks 组成的卷上。
  • Replicated: 复制式卷,类似 RAID 1,replica 数必须等于 volume 中 brick 所包含的存储服务器数,可用性高。
  • Striped: 条带式卷,类似 RAID 0,stripe 数必须等于 volume 中 brick 所包含的存储服务器数,文件被分成数据块,以 Round Robin 的方式存储在 bricks 中,并发粒度是数据块,大文件性能好。
  • Distributed Striped: 分布式的条带卷,volume中 brick 所包含的存储服务器数必须是 stripe 的倍数(>=2倍),兼顾分布式和条带式的功能。
  • Distributed Replicated: 分布式的复制卷,volume 中 brick 所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。

 分布式复制卷的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  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

你可能感兴趣的:(glusterfs分布式存储部署)