Glusterfs 逻辑卷配置管理
实验环境
四台主机上配置对应的主机名,并在hosts文件中添加,每台主机上添加一个10G的硬盘
192.168.137.13 linux-node3 linux-node3.example.com
192.168.137.14 linux-node4 linux-node4.example.com
192.168.137.15 linux-node5 linux-node5.example.com
192.168.137.16 linux-node6 linux-node6.example.com
四台主机上安装Glusterfs
# yum install –y centos-release-gluster37.noarch
# yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
一、配置Glusterfs
1.基础管理
# glusterfs -V # 查看版本信息
# /etc/init.d/glusterd start # 启动
# /etc/init.d/glusterd status # 状态
# /etc/init.d/glusterd stop # 停止
# chkconfig glusterd on # 添加开机启动
2.linux-node3主机配置
# gluster peer probe linux-node4 //存储主机加入信任存储池
# gluster peer probe linux-node5
# gluster peer probe linux-node6
# gluster peer status //查看状态
# yum -y install xfsprogs //centos 6为ext文件系统,需要安装xfs。 centos 7默认为xfs文件系统,不需要安装xfsprog
# mkfs.xfs -f /dev/sdb //格式化磁盘
# mkdir -p /storage/brick1 //建立挂载块设备的目录
# mount /dev/sdb /storage/brick1 //挂载
# echo "/dev/sdb /storage/brick1 xfs defaults 0 0" >> /etc/fstab //开机自动挂载
三、分布式卷管理
Distributed:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上。
Replicated:复制式卷,类似raid1,replica数必须等于volume中brick所包含的存储服务器数,可用性高。
Striped:条带式卷,类似与raid0,stripe数必须等于volume中brick所包含的存储服务器数,文件被分成数据块,以Round Robin的方式存储在bricks中,并发粒度是数据块,大文件性能好。
Distributed Striped:分布式的条带卷,volume中brick所包含的存储服务器数必须是stripe的倍数(>=2倍),兼顾分布式和条带式的功能。
Distributed Replicated:分布式的复制卷,volume中brick所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。
1.分布式巻
分布式卷:将多个主机的硬盘资源整合成一个大存储目录,如果其中一台主机的硬盘损坏,应用程序无法访问这部分数据。
linux-node3主机配置
# mkdir /gv1
# gluster volume create gv1 linux-node3:/storage/brick1 linux-node4:/storage/brick1 force //将linux-node3和linux-node4主机的硬盘合并使用
# gluster volume start gv1 //启动卷
# gluster volume info //查看卷信息
测试
# mount -t glusterfs 127.0.0.1:/gv1 /gv1 //linux-node3上挂载
# cd /gv1 && touch a b dfs df //linux-node3上创建文件
# mount -o mountproto=tcp -t nfs 192.168.137.16:/gv1 /gv1 //在192.168.137.16测试,NFS方式挂载
2.分布式复制卷
分布式复制卷:将多个主机的硬盘资源整合进行数据备份,可以将一份数据分成2份或者多份数据放在不同的主机上。可使用硬盘空间 = 总硬盘空间 / 份数
如100G硬盘,需要分成2份,实际可使用硬盘空间为50G
linux-node3主机配置
# mkdir /gv2
# gluster volume create gv2 replica 2 linux-node5:/storage/brick1 linux-node6:/storage/brick1 force //创建复制卷,2就表示两块硬盘
# gluster volume start gv2 //启动卷
# gluster volume info //查看卷信息
# mount -t glusterfs 127.0.0.1:/gv2 /gv2 //挂载卷到目录
gv2做了跨主机的raid 1,所以显示的硬盘空间是10G,数据存2份
测试
# cd /gv2/
# touch ewqr dsfs
linux-node5和linux-node6主机上的/storage/brick1目录中都存储2个文件
3.分布式条带卷
将四台主机再次添加10G新硬盘并格式化
# fdisk -l
# mkfs.xfs -f /dev/sdc
# mkdir -p /storage/brick2
# echo "/dev/sdc /storage/brick2 xfs defaults 0 0" >> /etc/fstab
# mount -a
# df -h
linux-node3主机配置
# mkdir /gv3
# gluster volume create gv3 stripe 2 linux-node3:/storage/brick2 linux-node4:/storage/brick2 force //创建条带卷
# gluster volume start gv3 //启动卷
# gluster volume info
# mount -t glusterfs 127.0.0.1:/gv3 /gv3 //挂载卷到目录
测试
# cd /gv3
# dd if=/dev/zero bs=1024 count=10000 of=/gv3/10M.file
查看linux-node3和linux-node4主机/storage/brick2目录文件,从上图可以看出,一个9.8M文件在两个主机各存储4.9M
4.扩展卷
以gv2为例
# gluster volume stop gv2 //停止应用程序数据写入gv2后,再停止卷
# gluster volume add-brick gv2 replica 2 linux-node5:/storage/brick2 linux-node6:/storage/brick2 force //添加剩余硬盘
备注:当你给分布式复制卷和分布式条带卷中增加bricks时,你增加的bricks的数目必须是复制或者条带数目的倍数,例如:你给一个分布式复制卷的replica为2,你在增加bricks的时候数量必须为2、4、6、8等。
# gluster volume info gv2 //查看卷
# gluster volume start gv2 //启动卷
在做磁盘存储的平衡前,在gv2创建新的文件,是不会加入到新扩展的卷中
dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M-1.file
dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M-2.file
dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M-3.file
dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M-4.file
执行上面命令后,新建的4个文件还是存在linux-node5和linux-node6主机的/storage/brick1目录中
# gluster volume rebalance gv2 start //磁盘存储的平衡
# gluster volume rebalance gv2 status //查看
此时查看brick1和brick2目录,可以看到文件被转移到新加入的硬盘中
备注:平衡布局是很有必要的,因为布局结构是静态的,当新的bricks加入现有卷,新创建的文件会分布到旧的bricks中,所以需要平衡布局结构,使新加入的bricks生效。布局平衡只是使新布局生效,并不会在新的布局移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡
5.移除brick
# gluster volume stop gv2 //停止应用程序数据写入gv2后,再停止卷
# gluster volume remove-brick gv2 replica 2 linux-node5:/storage/brick1 linux-node6:/storage/brick1 force //移除linux-node5和linux-node6的/storage/brick1
# gluster volume info gv2 //查看gv2
# gluster volume start gv2 //启动卷
可以看到10M-2.file文件不显示在gv2目录中,但它没有丢失,还存在linux-node5和linux-node6的/storage/brick1中。
备注:你可能想在线缩小卷的大小,例如:当硬件损坏或者网络故障的时候,你可能想在卷中移除相关的bricks。注意:当你移除bricks的时候,你在 gluster的挂载点将不能继续访问数据,只有配置文件中的信息移除后你才能继续访问bricks的数据。当移除分布式复制卷或者分布式条带卷的时候, 移除的bricks数目必须是replica或者stripe的倍数。例如:一个分布式条带卷的stripe是2,当你移除bricks的时候必须是2、 4、6、8等。
6.删除卷
# umount /gv1 //移除挂载卷
# gluster volume stop gv1 //停止卷
# gluster volume delete gv1 //删除卷
# gluster volume info gv1 //查看卷