目录
3.4 分布式条带卷(Distribute Stripe volume)
3.5 分布式复制卷(Distribute Replica volume)
3.6 条带复制卷(Stripe Replca volume)
3.7 分布式条带复制卷(Distribute Stripe Replicavolume)
4.3 安装、启动GlusterFS(所有node节点上操作)
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
GFS的新颖之处并不在于它采用了多么令人惊讶的新技术,而在于它采用廉价的商用计算机集群构建分布式文件系统,在降低成本的同时经受了实际应用的考验。
GFS是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用,在传统的解决方案中,GFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储。
GFS由三个组件组成:
① 存储服务器(Brick Server)
② 客户端(不在本地)(且,有客户端,也会有服务端,这点类似于 NFS,但是更为复杂)
③ 存储网关(NFS/Samaba)
注:没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。
无元数据服务器:
元数据是核心,描述对象的信息,影响其属性;
例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失;
反过来看,所以无元数据服务不会有单点故障。
那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器
传统的分布式文件系统大多通过元服务器来存储元数据,元数据包含存储节点上的目录信息、目录结构等。这样的设计在浏览目录时效率高,但是也存在一些缺陷,例如单点故障。一旦元数据服务器出现故障,即使节点具备再高的冗余性,整个存储系统也将崩溃。而 GlusterFS 分布式文件系统是基于无元服务器的设计,数据横向扩展能力强,具备较高的可靠性及存储效率。
GlusterFS同时也是Scale-Out(横向扩展)存储解决方案Gluster的核心,在存储数据方面具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。
GlusterFS支持借助TCP/IP或InfiniBandRDMA网络(一种支持多并发链接的技术,具有高带宽、低时延、高扩展性的特点)将物理分散分布的存储资源汇聚在一起,统一提供存储服务,并使用统一全局命名空间来管理数据。
Gluster利用双重特性来提供高容量存储解决方案。
总结: 可扩展性,扩展节点,通过多节点提高性能
总结:不存在单点故障,有备份机制,类似Raid的容灾机制
分布式存储中,将所有节点的命名空间整合为统一命名空间,将整个系统的所有节点的存储容量组成一个大的虚拟存储池,供前端主机访问这些节点完成数据读写操作
总结:类比 API 的性质/概念,系统里根据他命名所定义的隔离区域,是一个独立空间;统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器
总结:方便扩容及对后端存储集群的管理与维护,较为复杂
总结:基于标准化的文件使用协议,让 CentOS 兼容 GFS
实际存储用户数据的服务器
本地文件系统的"分区”
一个逻辑卷是一组Brick的集合。卷是数据存储的逻辑设备,类似于LVM中的逻辑卷。大部分Gluster管理操作是在卷上进行的。
是一个内核模块,允许用户创建自己的文件系统,无需修改内核代码
空间的文件系统(类比EXT4),“这是一个伪文件系统”;以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上;而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上
内核空间对用户空间提供的访问磁盘的接口
内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储
在存储集群中的每个节点上都要运行
GlusterFS 采用模块化、堆栈式的架构。
通过对模块进行各种组合,即可实现复杂的功能。例如 Replicate 模块可实现 RAID1,Stripe 模块可实现 RAID0, 通过两者的组合可实现 RAID10 和 RAID01,同时获得更高的性能及可靠性。
GlusterFS Client客户端
VFS(虚拟文件系统):为各类文件系统提供了一个统一的操作界面和应用编程接口
I/O cache(I/O缓存,Input/Output):用于数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。
read ahead(内核文件预读)
Distribute/Stripe:分布式、条带化
replicate:复制功能
网络层
Gige(千兆网/千兆接口)
TCP/IP(网络协议)
InfiniBand(网络协议):与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通信协议可能导致通信变慢,而IB使用基于信任的、流控制的机制来保证连接完整性
RDMA(Remote Direct Memory Access,远程直接数据存取)负责数据传输。功能:为了解决传输过程中客户端与服务器端数据处理的延迟
Server服务端
posix(可移植操作系统接口):解决客户端与服务端系统兼容性问题
Brick:块存储
1、GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比方大文件存储、海量小文件存储、云存储、多传输协议应用等。
2、每一个功能以模块形式实现,然后以积木方式进行简单的组合,就可以实现复杂的功能。比方,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同一时候获得高性能和高可靠性。
3、然后以请求的方式与客户端进行交互,客户端与服务端进行交互时,通过posix来解决出现的系统兼容性问题,让客户端的命令通过posix过滤后可以在服务端执行

① 客户端或应用程序通过 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文件系统中。
简单版本:
- (1)客户端或应用程序通过 GlusterFS 的挂载点访问数据。
- (2)linux系统内核通过 VFS API 收到请求并处理。
- (3)VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,
- 而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。
- 可以将 FUSE 文件系统理解为一个代理。
- (4)GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理。
- (5)经过 GlusterFS client 处理后,通过网络将数据传递至远端的
- GlusterFS Server,并且将数据写入到服务器存储设备上。
举例说明:
1、外来一个请求,例:用户端申请创建一个文件,客户端或应用程序通过GFS的挂载点访问数据
2、linux系统内容通过VFSAPI收到请求并处理
3、VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
4、GlusterFS client端收到数据后,会根据配置文件的配置对数据进行处理
5、再通过网络,将数据发送给远端的ClusterFS server,并将数据写入到服务器储存设备上
6、server再将数据转交给VFS伪文件系统,再由VFS进行转存处理,最后交给EXT3
弹性HASH算法是Davies-meyer算法的具体实现,通过Hash算法可以得到一个32位的整数范围的Hash值,假设逻辑卷中有N个存储单位Brick,则32位的整数范围将划分为N个连续的子空间,每个空间对应一个Brick。
当用户或应用程序访问某一个命名空间时,同对该命名空间计算Hash值,根据该Hash值所对应的的32位整数空间定位数据所在的Brick。
保证数据平均分布在每一个Brick中。
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈。
GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。
基本卷:
(1) distribute volume:分布式卷
(2) stripe volume: 条带卷
(3) replica volume: 复制卷
复合卷:
(4) distribute stripe volume:分布式条带卷
(5 ) distribute replica volume:分布式复制卷
(6) stripe replica volume:条带复制卷
(7) distribute stripe replicavolume:分布式条带复制卷
文件通过HASH算法分布到所有Brick Server上,这种卷是GFS的基础;文件没有被分片,直接根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,并不具备容错能力,属于文件级RAID 0 。
在该模式下,并没有对文件进行分块处理,文件直接存储在某个 Server 节点上。 由于直接使用本地文件系统进行文件存储,所以存取效率并没有提高,反而会因为网络通信的原因而有所降低。
分布式卷的特点:
创建分布式卷:
创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中
gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
原理:
File1 和 File2 存放在 Server1,而 File3 存放在 Server2,文件都是随机存储,一个文件(如 File1)要么在 Server1 上,要么在 Server2 上,不能分块同时存放在 Server1和 Server2 上。
类似 RAID0,文件被分成数据块并以轮询的方式分布到多个 Brick Server 上,文件存储以数据块为单位,支持大文件存储, 文件越大,读取效率越高,但是不具备冗余性。
条带卷特点:
创建命令:
创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
原理:
File 被分割为 6 段,1、3、5 放在 Server1,2、4、6 放在 Server2
将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降。
复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低。
复制卷特点:
创建命令:
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
原理:
File1 同时存在 Server1 和 Server2,File2 也是如此,相当于 Server2 中的文件是 Server1 中文件的副本。
Brick Server 数量是条带数(数据块分布的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。 主要用于大文件访问处理,创建一个分布式条带卷最少需要 4 台服务器。
创建命令:
创建了一个名为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倍甚至更多,那么将创建的是分布式条带卷或分布式复制卷。
原理:
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 目录中。
Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点。主要用于需要冗余的情况下。
创建分布式复制卷:
建一个名为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
原理:
File1 和 File2 通过分布式卷的功能分别定位到 Server1 和 Server2。在存放 File1 时,File1 根据复制卷的特性,将存在两个相同的副本,分别是 Server1 中的exp1 目录和 Server2 中的 exp2 目录。在存放 File2 时,File2 根据复制卷的特性,也将存在两个相同的副本,分别是 Server3 中的 exp3 目录和 Server4 中的 exp4 目录。
类似RAID 10,同时具有条带卷和复制卷的特点
三种基本卷的复合卷通常用于类Map Reduce应用
- Node1节点: node1/192.168.111.15 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /dev/sdd1
- /dev/sde1 /data/sde1
- Node2节点:node2/192.168.111.20 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /dev/sdd1
- /dev/sde1 /data/sde1
-
- Node3节点: node3/192.168.111.30 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /dev/sdd1
- /dev/sde1 /data/sde1
- Node4节点: node3/192.168.111.40 磁盘:/dev/sdb1 挂载点:/data/sdb1
- /dev/sdc1 /data/sdc1
- /dev/sdd1 /dev/sdd1
- /dev/sde1 /data/sde1
-
- 客户端节点:192.168.111.50
1. 关闭防火墙
- systemctl stop firewalld
- setenforce 0
2. 磁盘分区,并挂载(以node1为例)
- [root@localhost ~]# 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
-
- [root@localhost ~]# chmod +x /opt/fdisk.sh
- [root@localhost ~]# cd /opt/
- [root@localhost ~]# ./fdisk.sh
- [root@localhost ~]# df -hT
- 文件系统 类型 容量 已用 可用 已用% 挂载点
- /dev/sda3 xfs 56G 16G 40G 28% /
- devtmpfs devtmpfs 978M 0 978M 0% /dev
- tmpfs tmpfs 993M 0 993M 0% /dev/shm
- tmpfs tmpfs 993M 9.0M 984M 1% /run
- tmpfs tmpfs 993M 0 993M 0% /sys/fs/cgroup
- /dev/sda1 xfs 497M 151M 346M 31% /boot
- tmpfs tmpfs 199M 8.0K 199M 1% /run/user/42
- tmpfs tmpfs 199M 0 199M 0% /run/user/0
- /dev/sdb1 xfs 20G 33M 20G 1% /data/sdb1
- /dev/sdc1 xfs 20G 33M 20G 1% /data/sdc1
- /dev/sdd1 xfs 20G 33M 20G 1% /data/sdd1
- /dev/sde1 xfs 20G 33M 20G 1% /data/sde1
或者:
- #!/bin/bash
- echo "the disks exist list:"
- ##grep出系统所带磁盘
- fdisk -l |grep '磁盘 /dev/sd[a-z]'
- echo "=================================================="
- PS3="chose which disk you want to create:"
- ##选择需要创建的磁盘编号
- select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
- do
- case $VAR in
- sda)
- ##本地磁盘就退出case语句
- fdisk -l /dev/sda
- break ;;
- sd[b-z])
- #create partitions
- echo "n ##创建磁盘
- p
-
-
-
- w" | fdisk /dev/$VAR
-
- #make filesystem
- ##格式化
- mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
- #mount the system
- mkdir -p /data/${VAR}"1" &> /dev/null
- ###永久挂载
- echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
- ###使得挂载生效
- mount -a &> /dev/null
- break ;;
- quit)
- break;;
- *)
- echo "wrong disk,please check again";;
- esac
- done
3. 修改主机名,配置/etc/hosts文件
以Node1节点为例:
- [root@localhost ~]# hostnamectl set-hostname node1
- [root@localhost ~]# su
- [root@node1 ~]# echo "192.168.111.15 node1" >> /etc/hosts
- [root@node1 ~]# echo "192.168.111.20 node2" >> /etc/hosts
- [root@node1 ~]# echo "192.168.111.30 node3" >> /etc/hosts
- [root@node1 ~]# echo "192.168.111.40 node4" >> /etc/hosts
以Node1为例:
- 将gfsrepo 软件上传到/opt目录下
- 上传gfsrepo.zip 至/opt解压缩
- unzip gfsrepo.zip
- [root@node1 opt]# cd /etc/yum.repos.d/
- [root@node1 yum.repos.d]# mkdir repo.bak
- [root@node1 yum.repos.d]# mv *.repo repo.bak
- [root@node1 yum.repos.d]# vim glfs.repo
-
- [glfs]
- name=glfs
- baseurl=file:///opt/gfsrepo
- gpgcheck=0
- enabled=1
-
- [root@node1 opt]# yum clean all && yum makecache
- [root@node1 opt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
- #如采用官方YUM源安装,使用命令“yum -y install centos-release-gluster”可以直接指向互联网仓库
- [root@node1 opt]# systemctl start glusterd.service
- [root@node1 opt]# systemctl enable glusterd.service
如果安装的时候由于版本原因报错

解决方法,卸载高版本,重新安装
- rpm -e --nodeps glusterfs-api
- rpm -e --nodeps glusterfs-libs
- rpm -e --nodeps glusterfs-fuse
- rpm -e --nodeps glusterfs-cli
- yum -y install glusterfs-client-xlators.x86_64
- yum -y install glusterfs-api.x86_64
- yum install -y glusterfs-cli
- 如果还有其他软件包版本过高,直接卸载,重新安装即可
只要在一台node节点上添加其他节点即可
- [root@node1 opt]# gluster peer probe node1
- peer probe: success. Probe on localhost not needed
- [root@node1 opt]# gluster peer probe node2
- peer probe: success.
- [root@node1 opt]# gluster peer probe node3
- peer probe: success.
- [root@node1 opt]# gluster peer probe node4
- peer probe: success.
在每个Node节点上查看群集状态:每个节点都看
- [root@node1 opt]# gluster peer status
- Number of Peers: 3
-
- Hostname: node2
- Uuid: 486aa2fa-0546-4e94-890f-c1ffcd3ac902
- State: Peer in Cluster (Connected)
-
- Hostname: node3
- Uuid: 0c1a170e-44f0-45d0-b2c6-10cb8604ac4e
- State: Peer in Cluster (Connected)
-
- Hostname: node4
- Uuid: 5c384839-75fd-45dd-b4af-92f6f5dba9d7
- State: Peer in Cluster (Connected)
根据规划创建如下卷:
| 卷名称 | 卷类型 | 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) |
- 1.创建卷
- 无需指定类型,默认创建的是分布式卷
- [root@node1 opt]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
- volume create: dis-volume: success: please start the volume to access data
-
- 2. 查看卷列表
- [root@node1 opt]# gluster volume list
- dis-volume
-
- 3. 启动卷
- [root@node1 opt]# gluster volume start dis-volume
- volume start: dis-volume: success
-
- 4.查看卷信息
- [root@node1 opt]# gluster volume info dis-volume
-
- Volume Name: dis-volume
- Type: Distribute
- Volume ID: 90d587e8-8cb0-4d6e-b403-a7d3d3879946
- Status: Started
- Snapshot Count: 0
- Number of Bricks: 2
- Transport-type: tcp
- Bricks:
- Brick1: node1:/data/sdb1
- Brick2: node2:/data/sdb1
- Options Reconfigured:
- transport.address-family: inet
- nfs.disable: on
- 1. 创建卷
- 指定类型为stripe,数值为2,且后面跟了2个Brick Server,所以创建的是条带卷
-
- [root@node1 opt]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
- volume create: stripe-volume: success: please start the volume to access data
-
- 2.查看卷列表
- [root@node1 opt]# gluster volume list
- dis-volume
- stripe-volume
-
- 3.启动卷
- [root@node1 opt]# gluster volume start stripe-volume
- volume start: stripe-volume: success
-
- 4.查看卷信息
- [root@node1 opt]# gluster volume info stripe-volume
-
- Volume Name: stripe-volume
- Type: Stripe
- Volume ID: bab0722b-12f2-4675-936e-6aa5a9724a89
- Status: Started
- Snapshot Count: 0
- Number of Bricks: 1 x 2 = 2
- Transport-type: tcp
- Bricks:
- Brick1: node1:/data/sdc1
- Brick2: node2:/data/sdc1
- Options Reconfigured:
- transport.address-family: inet
- nfs.disable: on
- 1. 创建卷
- 指定类型为replica,数值为2,且后面跟了2个Brick Server,所以创建的是复制卷
- [root@node1 opt]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
- volume create: rep-volume: success: please start the volume to access data
-
- 2.查看卷列表
- [root@node1 opt]# gluster volume list
- dis-volume
- rep-volume
- stripe-volume
-
- 3. 启动卷
- [root@node1 opt]# gluster volume start rep-volume
- volume start: rep-volume: success
-
- 4.查看卷信息
- [root@node1 opt]# gluster volume info rep-volume
-
- Volume Name: rep-volume
- Type: Replicate
- Volume ID: 2c346f51-327c-41b1-9e70-fc138dbb325d
- Status: Started
- Snapshot Count: 0
- Number of Bricks: 1 x 2 = 2
- Transport-type: tcp
- Bricks:
- Brick1: node3:/data/sdb1
- Brick2: node4:/data/sdb1
- Options Reconfigured:
- transport.address-family: inet
- nfs.disable: on
- 1. 创建卷
- 指定类型为stripe,数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式条带卷
- [root@node1 opt]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
- volume create: dis-stripe: success: please start the volume to access data
-
- 2. 查看卷列表
- [root@node1 opt]# gluster volume list
- dis-stripe
- dis-volume
- rep-volume
- stripe-volume
-
- 3. 启动卷
- [root@node1 opt]# gluster volume start dis-stripe
- volume start: dis-stripe: success
-
- 4. 查看卷信息
- [root@node1 opt]# gluster volume info dis-stripe
-
- Volume Name: dis-stripe
- Type: Distributed-Stripe
- Volume ID: 0f79449e-ba43-4d98-8f72-a6f029230168
- Status: Started
- Snapshot Count: 0
- Number of Bricks: 2 x 2 = 4
- Transport-type: tcp
- Bricks:
- Brick1: node1:/data/sdd1
- Brick2: node2:/data/sdd1
- Brick3: node3:/data/sdd1
- Brick4: node4:/data/sdd1
- Options Reconfigured:
- transport.address-family: inet
- nfs.disable: on
- 1. 创建卷
- 指定类型为replica,数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式复制卷
- [root@node1 opt]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
- volume create: dis-rep: success: please start the volume to access data
-
- 2.查看卷列表
- [root@node1 opt]# gluster volume list
- dis-rep
- dis-stripe
- dis-volume
- rep-volume
- stripe-volume
-
- 3. 启动卷
- [root@node1 opt]# gluster volume start dis-rep
- volume start: dis-rep: success
-
- 4. 查看卷信息
- [root@node1 opt]# gluster volume info dis-rep
-
- Volume Name: dis-rep
- Type: Distributed-Replicate
- Volume ID: f9554773-7c66-40b9-bb4c-b534a9994ffe
- Status: Started
- Snapshot Count: 0
- Number of Bricks: 2 x 2 = 4
- Transport-type: tcp
- Bricks:
- Brick1: node1:/data/sde1
- Brick2: node2:/data/sde1
- Brick3: node3:/data/sde1
- Brick4: node4:/data/sde1
- Options Reconfigured:
- transport.address-family: inet
- nfs.disable: on
- 将gfsrepo软件上传到/opt目录下
- [root@client ~]# cd /etc/yum.repos.d/
- [root@client yum.repos.d]# mkdir repo.bak
- [root@client yum.repos.d]# mv *.repo repo.bak
- [root@client yum.repos.d]# vim glfs.repo
-
- [glfs]
- name=glfs
- baseurl=file:///opt/gfsrepo
- gpgcheck=0
- enabled=1
-
- [root@client yum.repos.d]# yum clean all && yum makecache
- [root@client yum.repos.d]# yum -y install glusterfs glusterfs-fuse
- [root@client yum.repos.d]# mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
- [root@client yum.repos.d]# ls /test
- dis dis_rep dis_stripe rep stripe
- [root@client yum.repos.d]# echo "192.168.111.15 node1" >> /etc/hosts
- [root@client yum.repos.d]# echo "192.168.111.20 node2" >> /etc/hosts
- [root@client yum.repos.d]# echo "192.168.111.30 node3" >> /etc/hosts
- [root@client yum.repos.d]# echo "192.168.111.40 node4" >> /etc/hosts
临时挂载
- [root@client yum.repos.d]# mount.glusterfs node1:dis-volume /test/dis
- [root@client yum.repos.d]# mount.glusterfs node1:stripe-volume /test/stripe
- [root@client yum.repos.d]# mount.glusterfs node1:rep-volume /test/rep
- [root@client yum.repos.d]# mount.glusterfs node1:dis-stripe /test/dis_stripe
- [root@client yum.repos.d]# mount.glusterfs node1:dis-rep /test/dis_rep
- [root@client yum.repos.d]# df -hT
- 文件系统 类型 容量 已用 可用 已用% 挂载点
- /dev/sda3 xfs 56G 5.0G 51G 9% /
- devtmpfs devtmpfs 978M 0 978M 0% /dev
- tmpfs tmpfs 993M 0 993M 0% /dev/shm
- tmpfs tmpfs 993M 9.0M 984M 1% /run
- tmpfs tmpfs 993M 0 993M 0% /sys/fs/cgroup
- /dev/sda1 xfs 497M 151M 346M 31% /boot
- tmpfs tmpfs 199M 12K 199M 1% /run/user/42
- tmpfs tmpfs 199M 0 199M 0% /run/user/0
- node1:dis-volume fuse.glusterfs 40G 65M 40G 1% /test/dis
- node1:stripe-volume fuse.glusterfs 40G 65M 40G 1% /test/stripe
- node1:rep-volume fuse.glusterfs 20G 33M 20G 1% /test/rep
- node1:dis-stripe fuse.glusterfs 80G 130M 80G 1% /test/dis_stripe
- node1:dis-rep fuse.glusterfs 40G 65M 40G 1% /test/dis_rep
永久挂载:
- [root@client yum.repos.d]# 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
- [root@client ~]# cd /opt
- [root@client opt]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
- 记录了40+0 的读入
- 记录了40+0 的写出
- 41943040字节(42 MB)已复制,0.0330454 秒,1.3 GB/秒
- [root@client opt]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
- 记录了40+0 的读入
- 记录了40+0 的写出
- 41943040字节(42 MB)已复制,0.156284 秒,268 MB/秒
- [root@client opt]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
- 记录了40+0 的读入
- 记录了40+0 的写出
- 41943040字节(42 MB)已复制,0.169784 秒,247 MB/秒
- [root@client opt]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
- 记录了40+0 的读入
- 记录了40+0 的写出
- 41943040字节(42 MB)已复制,0.168353 秒,249 MB/秒
- [root@client opt]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=40
- 记录了40+0 的读入
- 记录了40+0 的写出
- 41943040字节(42 MB)已复制,0.197665 秒,212 MB/秒
- [root@client opt]# ls -lh /opt
- 总用量 201M
- -rw-r--r-- 1 root root 40M 6月 29 18:23 demo1.log
- -rw-r--r-- 1 root root 40M 6月 29 18:23 demo2.log
- -rw-r--r-- 1 root root 40M 6月 29 18:24 demo3.log
- -rw-r--r-- 1 root root 40M 6月 29 18:24 demo4.log
- -rw-r--r-- 1 root root 40M 6月 29 18:24 demo5.log
- drwxr-xr-x 3 root root 8.0K 6月 29 17:26 gfsrepo
- drwxr-xr-x. 2 root root 6 3月 26 2015 rh
- [root@client opt]# cp /opt/demo* /test/dis/
- [root@client opt]# cp /opt/demo* /test/stripe/
- [root@client opt]# cp /opt/demo* /test/rep/
- [root@client opt]# cp /opt/demo* /test/dis_stripe/
- [root@client opt]# cp /opt/demo* /test/dis_rep/
node1
- [root@node1 ~]# ls -lh /data/sdb1
- #数据没有被分片
- 总用量 160M
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo4.log
node2
- [root@node2 opt]# ls -lh /data/sdb1
- #数据没有被分片
- 总用量 40M
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo5.log
node1
- [root@node1 ~]# ls -lh /data/sdc1
- #数据局被分片50%,没副本,没冗余
- 总用量 100M
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo4.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo5.log
node2
- [root@node2 opt]# ls -lh /data/sdc1
- #数据局被分片50%,没副本,没冗余
- 总用量 100M
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo4.log
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo5.log
node3
- [root@node3 opt]# ls -lh /data/sdb1
- #数据没有被分片,有副本,有冗余
- 总用量 200M
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo4.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo5.log
node4
- [root@node4 opt]# ls -lh /data/sdb1
- #数据没有被分片,有副本,有冗余
- 总用量 200M
- -rw-r--r--. 2 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r--. 2 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r--. 2 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r--. 2 root root 40M 6月 29 18:40 demo4.log
- -rw-r--r--. 2 root root 40M 6月 29 18:40 demo5.log
node1
- [root@node1 ~]# ls -lh /data/sdd1
- #数据被分片50%,没副本,没冗余
- 总用量 80M
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo4.log
node2
- [root@node2 opt]# ls -lh /data/sdd1
- #数据被分片50%,没副本,没冗余
- 总用量 80M
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 20M 6月 29 18:40 demo4.log
node3
- [root@node3 opt]# ls -lh /data/sdd1
- #数据被分片50%,没副本,没冗余
- 总用量 20M
- -rw-r--r-- 2 root root 20M 9月 29 18:40 demo5.log
node4
- [root@node4 opt]# ls -lh /data/sdd1
- #数据被分片50%,没副本,没冗余
- 总用量 20M
- -rw-r--r--. 2 root root 20M 6月 29 18:40 demo5.log
node1
- [root@node1 ~]# ls -lh /data/sde1
- #数据没有被分片,有副本,有冗余
- 总用量 160M
- -rw-r--r-- 2 root root 40M 9月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 40M 9月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 40M 9月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 40M 9月 29 18:40 demo4.log
node2
- [root@node2 opt]# ls -lh /data/sde1
- #数据没有被分片,有副本,有冗余
- 总用量 160M
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo4.log
node3
- [root@node3 opt]# ls -lh /data/sde1
- #数据没有被分片,有副本,有冗余
- 总用量 40M
- -rw-r--r-- 2 root root 40M 6月 29 18:40 demo5.log
node4
- [root@node4 opt]# ls -lh /data/sde1
- #数据没有被分片,有副本,有冗余
- 总用量 40M
- -rw-r--r--. 2 root root 40M 9月 29 18:40 demo5.log
1. 故障模拟
挂起node2节点或者关闭glusterd服务来模拟故障
[root@node2 opt]# systemctl stop glusterd.service
1. 分布式卷
- [root@client opt]# ls -lh /test/dis/
- #在客户机上发现少了demo5.log,该文件保存在node2中
- 总用量 160M
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo4.log
2. 条带卷
- [root@client opt]# ls -lh /test/stripe/
- #无法访问,条带卷不具备冗余性
- 总用量 0
3. 分布式条带卷
- [root@client opt]# ls -lh /test/dis_stripe/
- #无法访问,分布式条带卷不具备冗余性
- 总用量 40M
- -rw-r--r-- 1 root root 40M 9月 29 18:40 demo5.log
4. 分布式复制卷
- [root@client opt]# ls -lh /test/dis_rep/
- #可以访问,分布式复制卷具备冗余性
- 总用量 200M
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo4.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo5.log
1. 故障模拟
挂起node2和node4节点,在客户端上查看文件是否正常
2. 查看文件
复制卷
- [root@client opt]# ls -lh /test/rep
- 总用量 200M
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo4.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo5.log
分布式卷
- [root@client opt]# ls -lh /test/dis_stripe/
- 总用量 0
分布式复制卷
- [root@client opt]# ls -lh /test/dis_rep/
- 总用量 200M
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo1.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo2.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo3.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo4.log
- -rw-r--r-- 1 root root 40M 6月 29 18:40 demo5.log
上述实验测试,凡是带复制数据,相比而言,数据比较安全
gluster volume list
gluster volume info
gluster volume status
gluster volume stop dis-stripe
注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe
仅拒绝
gluster volume set dis-rep auth.allow 192.168.111.30
仅允许
- gluster volume set dis-rep auth.allow 192.168.163.*
- #设置192.168.163.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)
例如要创建一个包含3个服务器的存储池,则需要从第一个服务器server1中把另外两个服务器加入存储池中
gluster peer probe node2
gluster peer detach node1
GFS数据流向
①mysql服务器——>存储数据到挂载目录中/data
②mysql数据会优先交给内核的文件系统处理——>GFS客户端处理(本地)
③GFS客户端会和GFS服务端进行交互,GFS服务端接收到数据,然后再通过挂载的卷的类型,对应保存在后端block块节点服务器上
分布式卷:属于文件级的RAID0,不具备容错能力,如果有一块磁盘损坏,数据就丢失
条带卷:类似RAID0,文件将被分成数据块并以轮询方式分布到Brick server上
复制卷:将文件同步到多个Brick上,属于文件RAID1,数据分数在多个Brick中
分布式条带卷:Brick server 数量是条带数兼具分布式卷和条带卷的特定
分布式复制卷:Brick server数量是镜像数,兼具分布式卷和复制卷的特点
条带复制卷: 类似RAID10,同时具有条带卷和复制卷的特点
分布式条带复制卷:三种基本卷的集合
在企业中数据的安全性是非常重要的,不具备冗余的卷是不会被企业所接受,所以使用频率较高的就是冗余性好的几种,例如本章讲的复制卷、分布式复制卷,还有没讲的条带复制卷和分布式条带复制卷了。