1、无元数据设计
GlusterFS设计没有集中或分布式元数据,取而代之的是弹性哈希算法。集群中的任何服务器、客户端都可利用哈希算法、路径及文件名进行计算,就可以对数据进行定位,并执行读写访问操作。
结论:
2、服务器间的部署
GlusterFS集群服务器之间是对等的,每个节点服务器都掌握了集群的配置信息。
所有信息都可以在本地查询。每个节点的信息更新都会向其他节点通告,保证节点信息的一致性。
但是集群规模较大后,信息同步效率会下降,非一致性概率会提高。
3、客户端访问
首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是远端服务器上。
读写操作会被交给VFS(Virtual File System,虚拟文件系统) 来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client计算,并最终通过网络将请求或数据发送到GlusterFS Servers上。
关于glusterfs的原理详情,可以参考以下文章
glusterfs架构和原理
换个视角深入理解GlusterFS,GlusterFS缺点分析
glusterfs中文资料推荐刘爱贵博士的GlusterFS原创资源系列
网上大部分文章都是基于3.x版本部署的,但是3.x版本已经在centos7中的阿里云的epel源中消失了,最低的也是4.0版本
[root@kaifa-supply ~]# yum search centos-release-gluster
......
centos-release-gluster-legacy.noarch : Disable unmaintained Gluster repositories from the CentOS Storage SIG
centos-release-gluster40.x86_64 : Gluster 4.0 (Short Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster41.noarch : Gluster 4.1 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster5.noarch : Gluster 5 packages from the CentOS Storage SIG repository
centos-release-gluster6.noarch : Gluster 6 packages from the CentOS Storage SIG repository
centos-release-gluster7.noarch : Gluster 7 packages from the CentOS Storage SIG repository
并且明确的提示,4.0版本也是短期支持板,所以我们选择更新一些的4.1版本来部署
存储类型介绍详见:Setting Up Volumes - Gluster Docs
在老版本中,共有7种卷类型
在新版本中,共有5种卷类型
共有的卷类型是:
不同的卷类型是:
不过我们不用考虑那么多,因为常规都用分布式复制卷,优点如下
当然Dispersed(纠错卷 类似于RAID5)从3.6开始一直更新到7.x版本,花费了gluster吞对大量心血,想了解的可以看这篇文章
参考 官方:快速部署指南
操作系统 | IP | 主机名 | 附加硬盘 |
---|---|---|---|
centos 7.4 | 10.0.0.101 | gf-node1 | sdb:5G |
centos 7.4 | 10.0.0.102 | gf-node2 | sdb:5G |
centos 7.4 | 10.0.0.103 | gf-node3 | sdb:5G |
5台服务器都做以下相同操作
# 关闭防火墙、selinux等不解释
# 完成hosts解析
cat >>/etc/hosts <<EOF
10.0.0.101 gf-node01
10.0.0.102 gf-node02
10.0.0.103 gf-node03
EOF
# 安装4.1yum源和程序
yum install -y centos-release-gluster41
yum install -y glusterfs glusterfs-libs glusterfs-server
# 启动服务并开机启动
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
总共创建3个目录,brick1用来挂载sdb,另外两个目录作为本地文件夹
格式化磁盘
# 查看磁盘列表
[root@gf-node01 ~]# fdisk -l
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
# 不分区直接格式化磁盘
mkfs.xfs -i size=512 /dev/sdb
挂载磁盘
# 创建目录并挂载
mkdir -p /data/brick{1..3}
echo ‘/dev/sdb /data/brick1 xfs defaults 0 0‘ >> /etc/fstab
mount -a && mount
# 查看结果
[root@gf-node01 ~]# df -h|grep sd
/dev/sda2 48G 1.7G 47G 4% /
/dev/sdb 5.0G 33M 5.0G 1% /data/brick1
在任意一台主机上,执行以下命令都可以建立信任池,建立并不需要账号密码,因为默认是将部署环境考虑为安全的可信环境
# 建立可信池
gluster peer probe gf-node02
gluster peer probe gf-node03
# 查看状态
[root@gf-node01 ~]# gluster peer status
......
[root@gf-node01 ~]# gluster pool list
UUID Hostname State
4068e219-5141-43a7-81ba-8294536fb054 gf-node02 Connected
e3faffeb-4b16-45e2-9ff3-1922791e05eb gf-node03 Connected
3e6a4567-eda7-4001-a5d5-afaa7e08ed93 localhost Connected
注意: 一旦信任池建立后,只有在信任池中的节点才能添加新服务器信任池中
只实验GlusterFs的分布式复制卷,其他卷类型有需要的话参考百度自行测试
gluster volume create gv1 replica 3 DIR1 DIR2 DIR3 ....
replica 3
,否则会阻止创建,因为可能脑裂,会提示Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this
force
参数,否则会提示错误volume create: gv1: failed:
The brick gf-node01:/data/brick2/gv1 is being created in the root partition. It is recommended that you don‘t use the system‘s root partition for storage backend. Or use ‘force‘ at the end of the command if you want to override this behavior.
# 创建分布式复制卷
gluster volume create gv1 replica 3 gf-node01:/data/brick1/gv1 gf-node01:/data/brick2/gv1 gf-node02:/data/brick1/gv1 gf-node02:/data/brick2/gv1 gf-node03:/data/brick1/gv1 gf-node03:/data/brick2/gv1 force
# 启动卷
gluster volume start gv1
# 查看卷的状态
[root@gf-node01 ~]# gluster volume info
Volume Name: gv1
Type: Distributed-Replicate
Volume ID: e1e004fa-5588-4629-b7ff-048c4e17de91
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: gf-node01:/data/brick1/gv1
Brick2: gf-node01:/data/brick2/gv1
Brick3: gf-node02:/data/brick1/gv1
Brick4: gf-node02:/data/brick2/gv1
Brick5: gf-node03:/data/brick1/gv1
Brick6: gf-node03:/data/brick2/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
# 挂载卷
[root@gf-node01 ~]# mount -t glusterfs gf-node01:/gv1 /mnt
# 写入数据测试
[root@gf-node01 ~]# touch /mnt/test{1..9}
[root@gf-node01 ~]# ls /mnt/test{1..9}
/mnt/test1 /mnt/test2 /mnt/test3 /mnt/test4 /mnt/test5 /mnt/test6 /mnt/test7 /mnt/test8 /mnt/test9
# 验证测试数据
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
test1 test2 test4 test5 test8 test9
[root@gf-node02 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
[root@gf-node03 ~]# ls /data/brick*/*
/data/brick1/gv1:
test3 test6 test7
/data/brick2/gv1:
test3 test6 test7
结论: 可以看出前三个为一个复制集,后三个为一个复制集,所以创建卷的时候,卷的顺序很关键
原文:https://www.cnblogs.com/noah-luo/p/12671005.html