目录
3.4.分布式条带卷(Distribute Stripe volume)
3.5.分布式复制卷(Distribute Replica volume)
3.6.条带复制卷(Stripe Replica volume)和分布式条带复制卷(Distribute Stripe Replicavolume)
无元数据服务器:
元数据是核心,描述对象的信息,影响其属性;
例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失;
反过来看,所以无元数据服务不会有单点故障。
那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器
① 客户端或应用程序通过 GlusterFS 的挂载点访问数据;
② linux系统内核**通过 VFS API 虚拟接口收到请求并处理;
③ VFS 将数据递交给 FUSE 内核文件系统,这是一个伪文件系统,这个伪文件系统主要用来转存,它提供一个虚拟接口,映射出来/dev/fuse这样一个虚拟路径,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理
④ GlusterFS client 会实时监听/dev/fuse下的数据,一旦数据更新,会把数据拿过来,client 根据配置文件的配置对数据进行处理
⑤ 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,server会先转存到本地的vfs虚拟文件系统中**,然后再通过vfs转存到EXT3上。EXT3指的是各个block块中的EXT3文件系统中。
简单来说,就是如果有10个文件,如果不用分布式卷,这是个文件会放在一台服务器上,对于分布式而言,这是个文件是会分布在不同的服务器节点上进行保存。
①特点
文件分布在不同的服务器,不具备冗余性更容易和廉价地扩展卷的大小单点故障会造成数据丢失以来低层的数据保护
②原理
File1 和 File2 存放在 Server1,而 File3 存放在 Server2,文件都是随机存储,一个文件(如 File1)要么在 Server1 上,要么在 Server2 上,不能分块同时存放在 Server1和 Server2 上
③创建分布式卷
创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
类似 RAID0,文件被分成数据块并**以轮询的方式分布到多个 Brick Server 上**,文件存储以数据块为单位,支持大文件存储, 文件越大,读取效率越高,但是不具备冗余性。
File 被分割为 6 段,1、3、5 放在 Server1,2、4、6 放在 Server2
②特点
根据偏移量将文件分成N块(N个条带点),轮询的存储在每个Brick Serve 节点.分布减少了负载,在存储大文件时,性能尤为突出.没有数据冗余,类似于Raid 0
③创建条带卷
创建了一个名为stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
将文件同步到多个 Brick 上,比如说我有五个文件,这5个文件是一个整体,放在服务器A上,复制卷会帮我们复制一份复制在服务器B上。属于文件级 RAID 1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降。复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低
①原理
File1 同时存在 Server1 和 Server2,File2 也是如此,相当于 Server2 中的文件是 Server1 中文件的副本
②特点
卷中所有的服务器均保存一个完整的副本。具备冗余性.卷的副本数量可由客户创建的时候决定,但复制数必须等于卷中 Brick 所包含的存储服务器数。至少由两个块服务器或更多服务器。若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为改卷的总容量
③创建复制卷
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
Brick Server 数量是条带数(数据块分布的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。 主要用于大文件访问处理,创建一个分布式条带卷最少需要 4 台服务器
①原理
File1 和 File2 通过分布式卷的功能分别定位到Server1和 Server2。在 Server1 中,File1 被分割成 4 段,其中 1、3 在 Server1 中的 exp1 目录中,2、4 在 Server1 中的 exp2 目录中。在 Server2 中,File2 也被分割成 4 段,其中 1、3 在 Server2 中的 exp3 目录中,2、4 在 Server2 中的 exp4 目录中
②创建分布式条带卷
创建一个名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)。Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),条带数为 2(stripe 2)gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
创建卷时,存储服务器的数量如果等于条带或复制数,那么创建的是条带卷或者复制卷;如果存储服务器的数量是条带或复制数的 2 倍甚至更多,那么将创建的是分布式条带卷或分布式复制卷
分布式复制卷(Distribute Replica volume):Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点,主要用于需要冗余的情况下
①原理
File1 和 File2 通过分布式卷的功能分别定位到 Server1 和 Server2。在存放 File1 时,File1 根据复制卷的特性,将存在两个相同的副本,分别是 Server1 中的exp1 目录和 Server2 中的 exp2 目录。在存放 File2 时,File2 根据复制卷的特性,也将存在两个相同的副本,分别是 Server3 中的 exp3 目录和 Server4 中的 exp4 目录
②创建分布式复制卷
建一个名为dis-rep的分布式复制卷,配置分布式的复制卷时,卷中Brick所包含的存储服务器数必须是复制数的倍数(>=2倍)。Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),复制数为 2(replica 2)gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
条带复制卷(Stripe Replica volume)类似 RAID 1 0,同时具有条带卷和复制卷的特点。
分布式条带复制卷(Distribute Stripe Replicavolume)三种基本卷的复合卷,通常用于类 Map Reduce 应用
- Node1节点: node1/192.168.10.4 磁盘: /dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /data/sdd1
- /dev/sde1 /data/sde1
-
- Node2节点: node2/192.168.10.5 磁盘: /dev/sdb1 挂载点: /data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /data/sdd1
- /dev/sde1 /data/sde1
-
- Node3节点: node3/192.168.10.6 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /data/sdd1
- /dev/sde1 /data/sde1
-
- Node4节点: node4/192.168.10.7 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /data/sdd1
- /dev/sde1 /data/sde1
-
- 客户端节点: 192.168.10.8
准备环境(所有node节点上操作)
1.关闭防火墙
systemctl stop firewalld
setenforce 0
vim /opt/fdisk.sh
- #!/bin/bash
- NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
- for VAR in $NEWDEV
- do
- echo -e "n\np\n\n\n\nw\n"| fdisk /dev/$VAR &> /dev/null
- mkfs.xfs /dev/${VAR}"1" &> /dev/null
- mkdir -p /data/${VAR}"1" &> /dev/null
- echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
- done
- mount -a &> /dev/null
chmod +x /opt/fdisk.sh
cd /opt/
./fdisk.sh
3.修改主机名,配置/etc/hosts文件
- #以Node1节点为例:
- hostnamectl set-hostname node1
- su
- echo "192.168.10.4 node1" >> /etc/hosts
- echo "192.168.10.5 node2" >> /etc/hosts
- echo "192.168.10.6 node3" >> /etc/hosts
- echo "192.168.10.7 node4" >> /etc/hosts
- cd /etc/yum.repos.d/
- mkdir repo.bak
- mv *.repo repo.bak
- vim glfs.repo
- [glfs]
- name=glfs
- baseurl=file:///opt/gfsrepo
- gpgcheck=0
- enabled=1
- yum clean all && yum makecache
- yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
- 如采用官方YUM源安装,可以直接指向互联网仓库
- yum -y install centos-release-gluster
- yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
- systemctl start glusterd.service
- systemctl enable glusterd.service
- systemctl status glusterd.service
- 只要在一台Node节点上添加其它节点即可
- gluster peer probe node1
- gluster peer probe node2
- gluster peer probe node3
- gluster peer probe node4
-
-
- 在每个Node节点上查看群集状态
- gluster peer status
- 卷名称 卷类型 Brick
- dis-volume 分布式卷 node1(/data/sdb1)、node2(/data/sdb1)
- stripe-volume 条带卷 node1(/data/sdc1)、node2(/data/sdc1)
- rep-volume 复制卷 node3(/data/sdb1)、node4(/data/sdb1)
-
- dis-stripe 分布式条带卷
- node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/ sdd1)
-
- dis-rep 分布式复制卷
- node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)
创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
查看卷列表
gluster volume list
启动新建分布式卷
gluster volume start dis-volume
查看创建分布式卷信息
gluster volume info dis-volume
指定类型为stripe,数值为2,且后面跟了2个Brick Server,所以创建的是条带卷
- gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
- gluster volume start stripe-volume
- gluster volume info stripe-volume
指定类型为replica,数值为2,且后面跟了2个Brick Server,所以创建的是复制卷
- gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
- gluster volume start rep-volume
- gluster volume info rep-volume
指定类型为stripe,数值为2,而且后面跟了4个BrickServer,是2的两倍,所以创建的是分布式条带卷
- gluster volume create dis-stripe stripe 2 nodel:/data/sdd1 node2:/data/ sdd1 node3:/data/sdd1 node4:/data/sdd1 force
- gluster volume start dis-stripe
- gluster volume info dis-stripe
指定类型为replica,数值为2,而且后面跟了4个BrickServer,是2的两倍,所以创建的是分布式复制卷
- gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
- gluster volume start dis-rep
- gluster volume info dis-rep
gluster volume list
将gfsrepo软件上传到/opt目下
- cd /etc/yum.repos.d/
- mkdir repo.bak
- mv *.repo repo.bak
-
- vim glfs.repo
- [glfs]
- name=glfs
- baseurl=file:///opt/gfsrepo
- gpgcheck=0
- enabled=1
-
- yum clean all && yum makecache
-
- yum -y install glusterfs glusterfs-fuse
-
- mkdir -p /test/{dis, stripe, rep,dis_stripe,dis_ rep}
- ls /test
- echo "192.168.10.4 node1" >> /etc/hosts
- echo "192.168.10.5 node2" >> /etc/hosts
- echo "192.168.10.6 node3" >> /etc/hosts
- echo "192.168.10.7 node4" >> /etc/hosts
- mount.glusterfs node1:dis-volume /test/dis
- mount.glusterfs node1:stripe-volume /test/stripe
- mount.glusterfs node1:rep-volume /test/rep
- mount.glusterfs node1:dis-stripe /test/dis_stripe
- mount.glusterfs node1:dis-rep /test/dis_rep
-
- df -Th
- vim /etc/fstab
- node1:dis-volume /test/dis glusterfs defaults,netdev 0 0
- node1:stripe-volume /test/stripe glusterfs defaults,netdev 0 0
- node1:rep-volume /test/rep glusterfs defaults,netdev 0 0
- node1:dis-stripe /test/dis_stripe glusterfs defaults,netdev 0 0
- node1:dis-rep /test/dis_rep glusterfs defaults,netdev 0 0
- cd /opt
- dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
- dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
- dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
- dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
- dd if=/dev/ ero of=/opt/demo5.log bs=1M count=40
-
- ls -lh /opt
-
- cp /opt/demo* /test/dis
- cp /opt/demo* /test/stripe/
- cp /opt/demo* /test/rep/
- cp /opt/demo* /test/dis_stripe/
- cp /opt/demo* /test/dis_rep/
[root@node1 ~]# ls -lh /data/sdb1 #数据没有被分片
总用量160M
[root@node1 ~]# ls -lh /data/sdc1 #数据被分片50%没副本没冗余
总用量101M
[ root@node3 ~]# ll -h /data/sdb1 #数据没有被分片有副本有冗余
总用量201M
[ root@node4 ~]# ll -h /data/sdb1 #数据没有被分片有副本有冗余
总用量201M
[root@node1 ~]# ll -h /data/sdd1 #数据被分片50%没副本没冗余
总用量81M
[root@node2 ~]# ll -h /data/sdd1
总用量81M
[ root@node3 ~] # ll -h /data/sdd1
总用量21M
[ root@node4 ~] # ll -h /data/sdd1
总用量21M
[root@node1 ~]# ll -h /data/sde1 #数据没有被分片 有副本 有冗余
总用量161M
挂起node2节点或者关闭glusterd服务来模拟故障
[ root@node2 ~] # systemctl stop glusterd.service
在客户端上查看文件是否正常
[root@localhost test]# ll /test/dis/ #在客户机上发现少了demo5.log文件,这个是在node2上的
总用量163840
[root@ localhost test]# cd /test/stripe/ #无法访问,条带卷不具备冗余性
[ root@localhost stripe]# ll
总用量0
[root@localhost test]# ll /test/dis_stripe/ #无法访问,分布条带卷不具备冗余性
总用量40960
-rw-r–r-- 1 root root 41943040 12月18 14:51 demo5. log
[root@localhost test]# ll /test/dis_rep/ #可以访问,分布式复制卷具备冗余性
总用量204800
挂起node2和node4节点,在客户端上查看文件是否正常
[root@localhost rep]# ls -l /test/rep/
#在客户机上测试正常 数据有
总用量204800
[ root@localhost dis_stripe]# ll /test/dis_stripe/ #在客户机上测试没有数据
总用量 0
[root@localhost dis_rep]# ll /test/dis_rep/ #在客户机上测试正常 有数据
总用量204800
上述实验测试,凡是带复制数据,相比而言,数据比较安全
- 1.查看GlusterFS卷
- gluster volume list
-
- 2.查看所有卷的信息
- gluster volume info
-
- 3.查看所有卷的状态
- gluster volume status
-
- 4.停止一个卷
- gluster volume stop dis-stripe
-
- 5.删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
- gluster volume delete dis-stripe
-
- 6.设置卷的访问控制
-
- 仅拒绝
- gluster volume set dis-rep auth.deny 192.168.10.10
-
- 仅允许
- gluster volume set dis-rep auth.allow 192.168.10.*
- #设置192.168.10.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)