CentOS6.6 Glusterfs详解
CentOS6.6 安装Glusterfs,从原理到实践。
五、一些设计与讨论
6、主要模块介绍
Gluterfs总体采用堆栈式架构,模仿的函数调用栈,各个功能模块耦合度低,且非常多模块可自由结合形成不同的功能。
以下主要介绍一下Glusterfs的主要模块:
1 DHT模块
该xlator主要实现了文件的哈希分布,将0到2的32次方依据子卷的个数平均划分若干个区间,文件到达DHT时,会依据文件名称计算所得的哈希值所在的区间,来决定该文件落在哪个子卷上。当中各个子卷的哈希区间记录在父文件夹的扩展属性中。此外,该模块还实现了数据迁移和扩容功能。
gluster volume create mamm-volume node1:/media node2:/media node3:/media ...
2 AFR模块
该xlator主要实现了文件级别的镜像冗余功能,类似raid1功能,只是不是块级别的。数据到达AFR时,会将ChangeLog加1,然后写数据,待所有子卷所有写成功后,再将ChangeLog减1。若须要修复时,依据ChangeLog推断哪个是source卷。实际的修复流程很复杂,包含meta,entry等。冗余卷没有主从之分,不论什么一个子卷都能够保证上层的读写请求,可在不影响上层应用的情况下运行修复功能。
gluster volume create mamm-volume repl 2 node1:/media node2:/media
3 Stripe模块
该xlator主要实现了文件的写条带,即文件到达Stripe时,会将文件按固定大小的条带写入各个子卷,类似raid0功能。在高版本号中,有两种模式:写空洞文件模式和聚合模式。该模块原理和实现都较DHT和AFR模块简单,且代码量较少。
gluster volume create mamm-volume stripe 2 node1:/media node2:/media
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7、Glusterfs安装相关软件包下载地址:http://pan.baidu.com/s/1kVCBmxp
1.安装相关依赖包
yum install -y libibverbs librdmacm xfsprogsnfs-utils rpcbind libaio liblvm2app lvm2-devel
2.安装服务器端软件包
glusterfs-3.4.6-1.el6.x86_64.rpm
glusterfs-api-3.4.6-1.el6.x86_64.rpm
glusterfs-cli-3.4.6-1.el6.x86_64.rpm
glusterfs-fuse-3.4.6-1.el6.x86_64.rpm
glusterfs-libs-3.4.6-1.el6.x86_64.rpm
glusterfs-server-3.4.6-1.el6.x86_64.rpm
3.安装客户端软件包
glusterfs-3.4.6-1.el6.x86_64.rpm
glusterfs-fuse-3.4.6-1.el6.x86_64.rpm
glusterfs-libs-3.4.6-1.el6.x86_64.rpm
强制安装:
rpm -ivh * --force --nodeps
4.磁盘配置
磁盘分区:
1)EXT4格式化工具目前最大支持16TB
2)使用parted进行磁盘分区
3)分区格式化
4)每个服务器上面都需要至少添加一块硬盘 我们这边是用的1块1.5T硬盘 现在每台都格式化
# mkfs.ext4 -L brick01 /dev/sdb
#mkdir share_disk
4)自动挂载分区
# vim /etc/fstab
LABEL=brick01 /share_disk ext4 defaults 0 0
#mount -a
5)安装成功启动GlusterFS
# service glusterd start
Starting glusterd: [ OK ]
# chkconfig glusterd on
5.组建集群扩展
在GlusterFS-01服务器上面操作 选择192.168.56.35 作为当前集群节点
添加另外一台台服务器
# gluster peer probe 192.168.56.35
peer probe: success
gluster peer status
6.创建卷
#gluster
>volume create qianzhi_disk replica 2 192.168.56.34:/share_disk/qianzhi_disk 192.168.56.35:/share_disk/qianzhi_disk
7.根据卷限制
gluster> volume start
gluster> volume quota qianzhi_disk enable
gluster> volume quota qianzhi_disk limit-usage /qianzhi_disk 100GB
8.访问限制
gluster volume setqianzhi_disk allth.allow 192.168.56.30
9.查看卷信息
gluster> volume info
10.客户端挂载
# mkdir /data1
# mount -t glusterfs 192.168.56.34:/qianzhi_disk(卷名称) /data1
---------------------------------------------------------------------------------------------------------------------------------------
还有个小问题,如何一个客户端同时挂在两个服务端,当第一个服务端故障,可以自动切换?
手动配置主备挂载
mount -t glusterfs -o backupvolfile-server=192.168.56.35,fetch-attempts=3 192.168.56.34:/yingyong_disk /test
自动配置主备挂载
vi /etc/fstab
192.168.56.34:/yingyong_disk /MemberCardDir glusterfs defaults,_netdev,backupvolfile-server=192.168.56.35,fetch-attempts=3 0 0
这篇命令解释的不错,可以参看下
https://fossies.org/linux/glusterfs/doc/mount.glusterfs.8
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上述这种方式,当客户端挂载时,看到的全部是一块磁盘的大小,虽然有限额,可是看不到使用的真实大小;不如说你的一块整盘是1T ,你给用某客户机分配100G,客户端挂载完毕后,看到的大小还是1T,尽管使用的时候只能用到100G。
换种方式实现,使客户端看到的就是真实使用大小:
服务端配置:
fdisk /dev/sdb
然后创建LVM,针对不同的客户端,分配不同的文件大小,这里的LVM相当于磁盘限额。
pvcreate /dev/sdb5
vgcreate share_disk /dev/sdb5
lvcreate -L 100G -n qianzhi_disk share_disk
lvcreate -L 300G -n yingyong_disk share_disk
mkfs.ext4 /dev/share_disk/qianzhi_disk
mkfs.ext4 /dev/share_disk/yingyong_disk
vi /etc/fstab
/dev/mapper/share_disk-qianzhi_disk /qianzhi_disk ext4 defaults 0 0
/dev/mapper/share_disk-yingyong_disk /yingyong_disk ext4 defaults 0 0
mount -a
volume create yingyong_disk replica 2 192.168.56.34:/yingyong_disk/yy_disk 192.168.56.35:/yingyong_disk/yy_disk
volume start yingyong_disk
接下来再有不同客户端挂载,就在服务器上创建逻辑卷,然后格式化,然后服务器把盘挂载,最后创建VOL。
当然原磁盘需要扩展,可以使用逻辑卷扩展方式实现。
附
- $gluster volume start mamm-volume
- $gluster volume stop mamm-volume
- $gluster volume delete mamm-volume
- $gluster volume add-brick mamm-volume [strip|repli <count>] brick1...
- $gluster volume remove-brick mamm-volume [repl <count>] brick1...
- gluster volume replace-brick mamm-volume old-brick new-brick [start|pause|abort|status|commit]
- #迁移需要完成一系列的事务,假如我们准备将mamm卷中的brick3替换为brick5
- #启动迁移过程
- $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 start
- #暂停迁移过程
- $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 pause
- #中止迁移过程
- $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 abort
- #查看迁移状态
- $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 status
- #迁移完成后提交完成
- $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 commit
- $gluster volume rebalane mamm-volume start|stop|status
- $gluster volume heal mamm-volume #只修复有问题的文件
- $gluster volume heal mamm-volume full #修复所有文件
- $gluster volume heal mamm-volume info#查看自愈详情
- $gluster volume heal mamm-volume info healed|heal-failed|split-brain
- $gluster volume set mamm-volume key value
问题解决
如果创建了一个卷,删掉了,再次创建,会报错
volume create: nfsp: failed: /glusterfs/nfsp or a prefix of it is already part of a volume
因为创建volume时,在brick对应的存储目录上,增加了"trusted.glusterfs.volume-id"和"trusted.gfid"两个扩展属性,在删除volume时并未移除这两个属性,再次创建时,对brick的存储目录进行校验,发现已经有了扩展属性,因此会有brick已经是volume的一部分的提示。
在改卷涉及的所有节点执行以下操作
# setfattr -x trusted.glusterfs.volume-id /glusterfs/nfsp
# setfattr -x trusted.gfid /glusterfs/nfsp
# rm -rf /glusterfs/nfsp/.glusterfs
# /etc/init.d/glusterd restart
文章最后提几款测试工具:atop, iperf, iozone, fio, 链接如下
atop http://blog.****.net/miltonzhong/article/details/9167419
iperf http://man.linuxde.net/iperf
iozone http://blog.sina.com.cn/s/blog_667725170100ttet.html
fio http://michaelkang.blog.51cto.com/1553154/1640479/
【完】