目录
4、分布式条带卷(Distribute Stripe volume)
5、分布式复制卷(Distribute Replica volume)
7、分布式条带复制卷(Distribute Stripe Replicavolume)
4、添加节点到存储信任池中 (只要在一台主机上添加其他三台节点即可,其他主机不用操作)
总结:分布式卷文件分布是按照哈希算法来选择存储位置的。数据没有被分片
总结:条带卷文件分布,数据被分片50%(注意看-h显示的大小),没副本,没冗余
总结:分布式条带卷分布,数据被分片50%,没副本,没冗余(先按分布式规则进行分片,再按条带规则,分开存储)
总结:分布式复制卷,没有被分片,有副本,有冗余(先按分布式进行分开存储,再按复制卷进行复制)
概述
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
开源的分布式文件系统;由存储服务器、客户端以及 NFS/Samba 存储网关组成。
一、简介
GlusterFS是一个可扩展性的开源的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中,供用户使用。
GlusterFS是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点平等。GlusterFS配置方便,稳定性好,可轻松扩展至PB级数量,数千个节点。
二、特点
1、扩展性和高性能
GlusterFS利用双重特性来提供高容量存储解决方案
Scale-Out架构允许通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和InfiniBand等高速网络互联
2、高可用性
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问当数据出现不一致时,自我修复功能能够把数据恢复到正确的状态,数据的修复是以增量的方式在后台执行,几乎不会产生性能负载。
GlusterFS可以支持所有的存储,因为它没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、XFS等)来存储文件,因此数据可以使用传统访问磁盘的方式被访问。
3、全局统一命名空间
分布式存储中,将所有节点的命名空间整合为统一命名空间,将整个系统的所有节点的存储容量组成一个大的虛拟存储池,供前端主机访问这些节点完成数据读写操作。
4、弹性卷管理
GlusterFs通过将数据储存在逻辑卷中,逻辑卷从逻辑存储池进行独立逻辑划分而得到。
逻辑存储池可以在线进行增加和移除,不会导致业务中断。逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。
文件系统配置也可以实时在线进行更改并应用,从而可以适应工作负载条件变化或在线性能调优。
5、基于标准协议
Gluster存储服务支持NFS、CIFS、HTTP、FTP、SMB及Gluster原生协议,完全与POSIX标准(可移植操作系统接口)兼容。
现有应用程序不需要做任何修改就可以对Gluster中的数据进行访问,也可以使用专用API进行访问。
三、专业术语
名称 |
解释 |
Brick |
最基本的存储单元,(块存储服务器)实际存储用户数据的服务器 |
Volume |
逻辑卷。本地文件系统的"分区" |
Glusterd |
(服务)是运行在存储节点的管理进程,(客户端运行的是gluster client)GFS使用过 程中整个GFS之间的交换由Gluster client 和glusterd完成 |
FUSE |
用户空间的文件系统(类别EXT4),”一个伪文件系统“。一个可加载的内核模块,和内核VFS交互进行文件系统的操作 |
VFS |
(虚拟端口)内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH, 再交给GFS客户端,最后由客户端交给远端的存储 |
四、GlusterFS构成
模块化堆栈式架构:模块化、堆栈式的架构,通过对模块的组合,实现复杂的功能
①API:应用程序编程接口
②模块化:每个模块可以提供不同的功能
③堆栈式:同时启用多个模块,多个功能可以组合,实现复杂的功能
五、GlusterFS 的工作流程
1、工作流程
1、客户端或应用程序通过 GlusterFS 的挂载点访问数据 application
2、系统内核通过 VFS API 收到请求并处理
3、VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。
4、GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理
5、经过 GlusterFS client 处理后,通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上EXT3
2、弹性 HASH 算法
分布式GFS存储是依靠于弹性hash算法,通过对存储内容进行hash算法的运算,可以得到32位的整数,将32位整数平均划分到 分布式服务器中,也就是每一个brick对应一段整数范围。用户根据计算得出数字找到对应的brick块。
弹性HASH算法:
弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick。
弹性HASH算法的优点:保证数据平均分布在每一个Brick中,解决了对元数据服务器的依赖,进而解决了单点故障。
六、GlusterFS常用分布式简介
1、分布式卷
也看成为哈希卷,多个文件以文件为单位在多个brick上,使用哈希算法随机存储。
分布式卷具有如下特点:
① 文件分布在不同的服务器,不具备冗余性。
② 更容易和廉价地扩展卷的大小。
③ 单点故障会造成数据丢失。(类似RAID0)
④ 依赖底层的数据保护
使用场景:大量小文件
优点:读/写性能好
缺点:如果存储或服务器故障,该brick上的数据将丢失
默认卷:不指定卷类型,默认是分布式卷
brick数量没有限制
2、条带卷(Stripe volume)
是将文件分成条带,以轮询的方式存放在多个brick上,默认条带大小128k。文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高,但是不具备冗余性
应用场景:大文件
优点:适用于大文件存储
缺点:可靠性低,brick故障会导致数据全部丢失
stripe = birck (stripe:条带个数)
条带卷特点:① 数据被分割成更小块分布到块服务器群中的不同条带区。
② 分布减少了负载且更小的文件加速了存取的速度。
③ 没有数据冗余。
3、复制卷(Replica volume)
是将多个文件在多个brick上复制多份,brick的数目要与需要复制的份数相等,建议brick分布在不同的服务器上。
将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降。
复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低。
应用场景:对可靠性高和读写性能要求高的场景
优点:读写性能好
缺点:写性能差
replica = brick
复制卷特点:① 卷中所有的服务器均保存一个完整的副本。
② 卷的副本数量可由客户创建的时候决定,但复制数必须等于卷中Brick所包含的存储服务器数。
③ 至少由两个块服务器或更多服务器。
④ 具备冗余性。
4、分布式条带卷(Distribute Stripe volume)
是将多个文件在多个节点哈希存储,每个文件再多分条带在多个brick上存储
应用场景:读/写性能高的大量大文件场景
优点:高并发支持
缺点:没有冗余,可靠性差
brick数是stripe的倍数
5、分布式复制卷(Distribute Replica volume)
是将多个文件在多个节点上哈希存储,在多个brick复制多份存储
应用场景:大量文件读和可靠性要求高的场景
优点:高可靠,读性能高
缺点:牺牲存储空间,写性能差
brick数量是replica的倍数
6、条带复制卷(Stripe Replca volume)
是将一个大文件存储的时候划分条带,并且保存多份
应用场景:超大文件,并且对可靠性要求高
优点:大文件存储,可靠性高
缺点:牺牲空间写性能差
brick数量是stripe、replica的乘积
7、分布式条带复制卷(Distribute Stripe Replicavolume)
三种卷组合
七、GlusterFS集群
1、实验环境
每台节点添加四块磁盘(内存4G起步)
node1节点:node1/192.168.159.68 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node2节点:node2/192.168.159.11 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node3节点:node3/192.168.159.13 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node4节点:node4/192.168.159.10 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
client :192.168.159.20
2、分区
分区脚本,每个节点执行四次并挂载
vim /opt/fdisk.sh
#! /bin/bash
echo "the disks exist list:"
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)
fdisk -l /dev/sda
break ;;
sd[b-z])
echo "n
p