主要内容
什么是GlusterFS
GlusterFS是一个运行于用户空间的分布式网络文件系统(FUSE),它是在用户和底层文件系统之间的一个用软件实现的基于网络传输的系统。基本架构如下:
可见,用户并不直接把文件写入硬盘,而是交由GlusterFS处理,根据不同的策略更新到文件系统中,但是GlusterFS对用户并不可见,客户端所有的文件操作和平常一样。
GlusterFS的相关概念
- Brick Brick就是一个用于在信任池(trusted storage pool)中相互共享的文件夹
- Volume Brick的集合,用户的所有文件操作都是基于Volume,可以简单理解一个Volume就是一个挂载点
- Trusted Storage Pool 信任池,用于创建Volume的主机集合,只有池中的主机可以相互通讯
- FUSE File System In User Space 运行于用户空间的文件系统
- Distributed File System 分布式文件系统,数据可以保存在不同的网络节点上,用户像访问普通文件一样而无需知道具体的节点
Volume的种类
为了满足不同的生产场景,GlusterFS提供了不同的Volume种类,常用的有
- 复制卷
- 分布式复制卷
- 条带化卷
Distributed Volume(分布式卷)
结构图:
这是默认的glusterfs volume,分布式卷的特点是:文件只保存在一个brick上。假如一个volume包含两个brick(brick1和brick2),文件会随机选取其中一个作为保存节点。当brick1损坏,brick1中的数据就会完全丢失,同理brick2也如此。
分布式卷的优点:
- 速度较快,其中一个brick可以作为另一个brick的负载均衡节点
- 空间利用率高,可用空间等于brick数量的和
分布式卷的缺点:
- 数据安全性较低
Replicated Volume(复制卷)
结构图:
复制卷中任一个brick中的数据在另外一个brick都有一个副本,因此数据比较安全,当其中一个brick损坏了,我们还可以通过另一个brick访问这些数据。因此,在创建卷的时候brick至少需要两个,越多越安全。
复制卷的优点:
- 数据安全
复制卷的缺点:
- 速度较慢,因为相同的数据需要同时写入两个brick中
- 空间利用率低,保存等量的数据,复制卷比分布式卷需要更多的空间
分布式复制卷(Distributed Replicated Volume)
同时拥有分布式卷和复制卷的优点:保证文件安全的同时提升文件的写入速度。
结构图:
分布式复制卷的创建方法:
1 2 3 4 |
gluster volume create test-volume replica 2 server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data |
创建卷的时候不能忽略了brick的排列顺序,上面的命令中我们指定了复制卷的数量是2,那么,相邻的两个brick就会成为复制卷,也就是说:server1:/exp1
和server2:/exp2
是一个复制卷,server3:/exp3
和 server4:/exp4
是另一个复制卷,最后这两个volume就自动成为分布式volume。
注意:brick的数量必须是replica中指定数字的倍数。
Striped Volume(条带化卷)
条带化卷类似于Raid设备中的Raid 0,一个文件会被拆分成多个部分,这些部分会保存在不同的brick中。因此,条带化卷是极端不安全的,但它的写入速度所有卷种类中最快的。
结构图:
Distributed Striped Volume(分布式条带化卷)
和条带化卷类似,唯一不同的是文件可以保存到更多的brick中。
结构图:
创建方法:
1 2 3 4 |
gluster volume create test-volume stripe 2 server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data. |
和分布式复制卷一样,相邻的两个卷会成为一个striped volume,因此brick的数量也应该是stripe指定数量的倍数。
在CentOS7中创建复制卷
只需要简单的几个步骤,就可以搭建一个可用的分布式文件系统。准备环境:
- 两台主机,centos7-host1和centos7-host2
- 关闭selinux和防火墙
安装glusterfs-server
centos7中的默认仓库没有glusterfs-server软件包,因此需要先添加仓库
1 2 3 4 5 6 7 8 9 |
#添加仓库 yum install centos-release-gluster # 安装软件包 版本是4.1.3 yum install -y glusterfs-server # 运行glusterd服务 systemctl start glusterd |
创建brick
以下命令需要在两台服务器中执行。这个步骤可选,如果没有事先创建brick,会在创建volume的过程同时自动帮你创建
1 2 |
mkdir -p /home/brick/brick1 |
配置信任池
在centos7-host1中执行以下命令
1 2 |
gluster peer probe centos7-host2 |
执行完毕之后,centos7-host2节点会自动添加centos7-host1到自己的信任池中
也可以在centos7-host2中添加
1 2 |
gluster peer probe centos7-host1 |
这样,centos7-host1就会自动添加centos7-host2为信任节点
创建volume
以下命令只需要在任意一个节点中执行
注意:
- 现有版本建议使用3个节点创建replicated volume,以防止裂脑的问题
- 不建议在根节点创建brick,否则创建volume过程需要使用force强制执行
1 2 3 4 5 6 |
# 创建volume gluster volume create repVol replica 2 centos7-host1:/home/brick/brick1 centos7-host2:/home/brick/brick1 # 启动volume 只有启动后的volume才能使用mount挂载 gluster volume start repVol |
注意:在创建volume的过程中,如果brick路径不存在,gluster命令会自动帮你创建。
查看volume信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@centos7-host1 ~]# gluster volume info Volume Name: repVol Type: Replicate Volume ID: f3dd8640-4a65-482d-8a18-e506138d38a8 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: centos7-host1:/home/brick/brick1 Brick2: centos7-host2:/home/brick/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off |
测试文件系统是否可用
建议使用一台单独的客户端进行测试,我们挂载的是volume,并不是brick,不要搞混了。
1 2 3 4 5 6 7 8 |
# 挂载glusterfs文件系统 mount.glusterfs centos7-host1:/repVol /mnt #也可以这样挂载 mount -t glusterfs centos7-host1:/repVol /mnt # 写入测试文件 echo "the content" >> /mnt/test.txt |
然后分别在两个节点的brick路径中查看是否有这个文件,如果有,表示replicated volume运作成功
1 2 |
ls /home/brick/brick1 |
转载请注明:Pure nonsense » 分布式文件系统GlusterFS