理论
优点:
分布式卷具有更好的性能、高扩展性以及可靠性,而且无元服务器(存放所有目录的结构,类似书的目录,方便找到所需数据在哪个节点),某种类型的分布式卷不但支持高扩展而且,具备副本功能,提高了可靠性。
类型:
分布式卷(distribute volume) 文件分布在不同服务器,不具备冗余性;更容易扩展卷的大小
条带卷 (stripe volume) 数据被分割成更小块分布到块服务器群中的不同条带区;分布减少了负载且更小的文件加速了存取的速度;没有数据冗余
复制卷 (replica volume) 卷中所有的服务器均保存一个完整的副本;卷的副本数量可由客户创建的时候决定;至少由两个块服务器或更多服务器;具备冗余性
分布式条带卷 (distribute stripe volume) 兼具分布式卷和条带卷的功能,主要用于大文件访问处理,创建一个分布式条带卷最少需要4台服务器
分布式复制卷 (distribute replica volume) 兼具分布式卷和复制卷的功能,主要用于需要冗余的情况
条带复制卷 (stripe replica volume) 兼具分布式卷和条带卷的功能,主要用于大文件访问处理
分布式条带复制卷 (distribute stripe replica volume) 兼具分布式卷和条带卷的功能,主要用于需要冗余的情况
决定一个文件每块分多大、多少块,放到哪些节点存储块,用弹性HASH算法。
工作流程:五步骤(可简单了解)
案例:
拓扑图
设备列表
要求:搭建GFS为Apache服务,为其提供高可用性。
一、服务器端配置
1、 搭建环境
开启4台虚拟机,在所有节点执行以下操作
根据上述表添加磁盘,通过fdisk分区,mkfs格式化,创建相应的挂载目录,并将格式化的磁盘挂载到相应的目录中,也可修改/etc/fstab配置文件,使其永久生效。
推荐步骤:
1)配置IP地址(以node1为例)
2)以虚拟机为例,设置里添加四块硬盘,使用ISO映象文件-选择glusterfs镜像文件。注意:开机添加的硬盘需要重启。
3)使用fdisk分区(以第一块为例,其余省略)
3)vim编辑脚本
[root@localhost ~]# vim install.sh
粘贴以下脚本命令:注意,配置node3和node4时,没/dev/sde1设备,删掉格式化分区命令mkfs.xfs /dev/sde1
#激活网卡
ifdown ens33;ifup ens33
systemctl stop firewalld
setenforce 0
sed -i '2a 192.168.8.134 node1' /etc/hosts
sed -i '3a 192.168.8.136 node2' /etc/hosts
sed -i '4a 192.168.8.139 node3' /etc/hosts
sed -i '5a 192.168.8.141 node4' /etc/hosts
#创建目录,格式化分区
mkdir -p /b3 /c4 /d5 /e6
mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdc1
mkfs.xfs /dev/sdd1
mkfs.xfs /dev/sde1
#配置yum仓库
cd /etc/yum.repos.d
rm -f *
cat >>z.repo<<OK
[z]
name=z
baseurl=file:///mnt
gpgcheck=0
OK
#安装软件,在所有的服务器上都要安装
#挂载光盘
mount /dev/cdrom /mnt/
echo "正在清除yum缓存...."
yum clean all &>/dev/null
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#启动glusterfs(在所有节点上)
systemctl start glusterd
systemctl enable glusterd &>/dev/null
echo " glusterfs启动成功!"
执行,完成如下:
2、 添加node1—node4集群节点(在任意节点执行,以node1为例)
3、 查看群集状态(显示除了本身,还有三个节点)
[root@node1 ~]# gluster peer status
4、 创建卷
1)创建分布式卷 (没指定卷的类型,默认创建分布式卷)
[root@localhost ~]# gluster volume create dis-volume node1:/e6 node2:/e6 force
启用卷
[root@localhost ~]# gluster volume start dis-volume
2)创建条带卷注意:加force选项,忽略警告强制操作,不加它,会出现下图报错
翻译:创建卷:条带卷:失败:节点1上的谋划失败。错误:正在根分区中创建块节点1:/d5。建议您不要将系统的根分区用于存储后端。或者如果您想覆盖此行为,请在命令末尾使用“force”。
节点2上的转移失败。错误:正在根分区中创建块节点2:/d5。建议您不要将系统的根分区用于存储后端。或者如果您想覆盖此行为,请在命令末尾使用“force”。gluster volume create stripe-volume node1:/d5 node2:/d5 force
翻译:卷创建:条带卷:成功:请启动卷来访问数据
未启用卷,查看卷的信息:
[root@localhost ~]# gluster volume info stripe-volume
使用命令启用卷,再次查看卷的信息:
[root@localhost ~]# gluster volume start stripe-volume
3)创建复制卷
[root@localhost ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
启用复制卷:
[root@localhost ~]# gluster volume start rep-volume
4)创建分布式条带卷
[root@localhost ~]# gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 force
启用分布式条带卷:
[root@localhost ~]# gluster volume start dis-stripe
5)创建分布式复制卷
[root@localhost ~]# gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
启用分布式复制卷:
[root@localhost ~]# gluster volume start dis-rep
二、客户端配置(client:192.168.8.142)
1、安装Apache服务(省略)
编辑脚本,修改hosts文件,命令如下:
sed -i '2a 192.168.8.134 node1' /etc/hosts
sed -i '3a 192.168.8.136 node2' /etc/hosts
sed -i '4a 192.168.8.139 node3' /etc/hosts
sed -i '5a 192.168.8.141 node4' /etc/hosts
2、安装客户端软件
创建yum仓库,安装glusterfs
[root@node5 yum.repos.d]# yum -y install glusterfs glusterfs-fuse
3、测试复制卷
将其挂载到Apache的网页目录
[root@localhost ~]# mount -t glusterfs node1:rep-volume /var/www/html/
编辑网页首页内容:
[root@localhost ~]# vim /var/www/html/index.html
启动Apache服务
[root@localhost ~]# systemctl start httpd
验证:
复制卷特点之一:同一份文件保存一份或多份副本。
卷的类型如下图:
由图得知,复制卷分布在存储服务器,node3和node4的d5目录,若从两台节点服务器的目录,查到网站首页index.html文件,证明,卷创建成功!
故障模拟:若两台节点服务器的首页文件,在任意一台损失,另外复制卷的服务器仍可提供服务,实现了高可用性。
在管理员电脑,访问192.168.8.142能正常访问Apache服务
三、扩展知识(在客户端配置client:192.168.8.142)
测试gluster文件系统性能
1.创建挂载目录
[root@node5 ~]# mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep}
2.挂载gluster文件系统
[root@node5 test]# mount -t glusterfs node1:dis-volume /test/dis
[root@node5 test]# mount -t glusterfs node1:stripe-volume /test/stripe
[root@node5 test]# mount -t glusterfs node1:rep-volume /test/rep
[root@node5 test]# mount -t glusterfs node1:dis-volume /test/dis_and_stripe
[root@node5 test]# mount -t glusterfs node1:dis-rep /test/dis_and_rep
[root@node5 test]#
3.永久挂载(重启系统)
[root@node5 test]# vim /etc/fstab //编辑配置文件
添加如下内容:
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:strip-volume /test/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /test/dis_and_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_and_rep glusterfs defaults,_netdev 0 0
4.创建五个文件,大小43M
[root@node5 ~]# dd if=/dev/zero of=demo1.log bs=43M count=1
[root@node5 ~]# dd if=/dev/zero of=demo2.log bs=43M count=1
[root@node5 ~]# dd if=/dev/zero of=demo3.log bs=43M count=1
[root@node5 ~]# dd if=/dev/zero of=demo4.log bs=43M count=1
[root@node5 ~]# dd if=/dev/zero of=demo5.log bs=43M count=1
查看文件属性:
1)卷中写入文件
[root@node5 ~]#cp demo* /test/dis
[root@node5 ~]#cp demo* /test/stripe
[root@node5 ~]#cp demo* /test/rep
[root@node5 ~]#cp demo* /test/dis_and_stripe
[root@node5 ~]#cp demo* /test/dis_and_rep
2)查看文件分布
验证分布式卷:没分片,原始大小43M,文件分布在不同服务器
验证条带卷:大小被分片成22M
验证复制卷:没有分片,原始大小43M,卷中所有的服务器均保存一个完整的副本
验证分布式条带卷:大小被分片成22M,文件分布在不同服务器
验证分布式复制卷:
3)破坏性测试挂起node2节点,在客户端测试文件是否可以正常使用。
以分布式卷为例,没分片,文件分布在不同服务器(node1、node2,一旦故障损失部分数据,不具备冗余性)
4)其他维护命令查看glusterfs集群卷的列表
查看卷的状态(显示所有卷的工作状态,内容过多,仅以dis-rep卷为例)
停止/删除卷(会提示,是/否,选择y,表示确定)
设置卷的访问
仅允许192.168.8.0和10.1.1.0网段访问