glusterfs架构介绍及运维说明

author author     2022-08-25     774

关键词:

官方网站:http://www.gluster.org/

下载地址:http://download.gluster.org/pub/gluster/glusterfs/

 


 

GlusterFS架构介绍


一、GlusterFS 外部架构

技术分享

   GlusterFS总体架构与组成部分如图2所示,它主要由存储服务器(BrickServer)、客户端以及NFS/Samba 存储网关组成。不难发现,GlusterFS 架构中没有元数据服务器组件,这是其最大的设计这点,对于提升整个系统的性能、可靠性和稳定性都有着决定性的意义。GlusterFS 支持TCP/IP 和InfiniBandRDMA 高速网络互联,客户端可通过原生Glusterfs 协议访问数据,其他没有运行GlusterFS客户端的终端可通过NFS/CIFS 标准协议通过存储网关访问数据。


二、GlusterFS内部架构

技术分享

    GlusterFS是模块化堆栈式的架构设计,如上图所示。模块称为Translator,是GlusterFS提供的一种强大机制,借助这种良好定义的接口可以高效简便地扩展文件系统的功能。

   1.服务端与客户端模块接口是兼容的,同一个translator可同时在两边加载。

   2.GlusterFS中所有的功能都是通过translator实现,如Cluster, Storage,Performance, Protocol, Features等。

   3.重点是GlusterFSClient端。


三、GlusterFS数据访问流程

技术分享

上图是GlusterFS数据访问的一个概要图:

    1. 首先是在客户端,用户通过glusterfs的mount point 来读写数据。

    2. 用户的这个操作被递交给本地linux系统的VFS来处理。

    3. VFS将数据递交给FUSE内核文件系统,在启动glusterfs客户端以前,需要向系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面,ext3是对实际的磁片进行处理,而fuse文件系统则是将数据通过/dev/fuse这个设备文件递交给了glusterfs client端。所以,我们可以将fuse文件系统理解为一个代理。

    4. 数据被fuse递交给Glusterfs client 后,client对数据进行一些指定的处理(所谓的指定,是按照client配置文件来进行的一系列处理)

    5. 在glusterfsclient的处理末端,通过网路将数据递交给Glusterfs Server,并且将数据写入到服务器所控制的存储设备上

 

四、技术特点

    GlusterFS在技术实现上与传统存储系统或现有其他分布式文件系统有显著不同之处,主要体现在如下几个方面。

 

完全软件实现(SoftwareOnly)

    GlusterFS认为存储是软件问题,不能够把用户局限于使用特定的供应商或硬件配置来解决。GlusterFS采用开放式设计,广泛支持工业标准的存储、网络和计算机设备,而非与定制化的专用硬件设备捆绑。对于商业客户,GlusterFS可以以虚拟装置的形式交付,也可以与虚拟机容器打包,或者是公有云中部署的映像。开源社区中,GlusterFS被大量部署在基于廉价闲置硬件的各种操作系统上,构成集中统一的虚拟存储资源池。简言之,GlusterFS是开放的全软件实现,完全独立于硬件和操作系统。

 

完整的存储操作系统栈(CompleteStorage Operating System Stack)

    GlusterFS不仅提供了一个分布式文件系统,而且还提供了许多其他重要的分布式功能,比如分布式内存管理、I/O调度、软RAID和自我修复等。GlusterFS汲取了微内核架构的经验教训,借鉴了GNU/Hurd操作系统的设计思想,在用户空间实现了完整的存储操作系统栈。

 

用户空间实现(User Space)

    与传统的文件系统不同,GlusterFS在用户空间实现,这使得其安装和升级特别简便。另外,这也极大降低了普通用户基于源码修改GlusterFS的门槛,仅仅需要通用的C程序设计技能,而不需要特别的内核编程经验。

 

模块化堆栈式架构(ModularStackable Architecture)

    GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块形式实现,然后以积木方式进行简单的组合,即可实现复杂的功能。比如,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同时获得高性能和高可性。

 

原始数据格式存储(DataStored in Native Formats)

    GlusterFS无元数据服务设计(NoMetadata with the Elastic Hash Algorithm)以原始数据格式(如EXT3、EXT4、XFS、ZFS)储存数据,并实现多种数据自动修复机制。因此,系统极具弹性,即使离线情形下文件也可以通过其他标准工具进行访问。如果用户需要从GlusterFS中迁移数据,不需要作任何修改仍然可以完全使用这些数据。

    对Scale-Out存储系统而言,最大的挑战之一就是记录数据逻辑与物理位置的映像关系,即数据元数据,可能还包括诸如属性和访问权限等信息。传统分布式存储系统使用集中式或分布式元数据服务来维护元数据,集中式元数据服务会导致单点故障和性能瓶颈问题,而分布式元数据服务存在性能负载和元数据同步一致性问题。特别是对于海量小文件的应用,元数据问题是个非常大的挑战。

    GlusterFS独特地采用无元数据服务的设计,取而代之使用算法来定位文件,元数据和数据没有分离而是一起存储。集群中的所有存储系统服务器都可以智能地对文件数据分片进行定位,仅仅根据文件名和路径并运用算法即可,而不需要查询索引或者其他服务器。这使得数据访问完全并行化,从而实现真正的线性性能扩展。无元数据服务器极大提高了GlusterFS的性能、可靠性和稳定性。

 

五、一些设计与讨论

无元数据服务器 vs 元数据服务器

    无元数据服务器设计的好处是没有单点故障和性能瓶颈问题,可提高系统扩展性、性能、可靠性和稳定性。对于海量小文件应用,这种设计能够有效解决元数据的难点问题。它的负面影响是,数据一致问题更加复杂,文件目录遍历操作效率低下,缺乏全局监控管理功能。同时也导致客户端承担了更多的职能,比如文件定位、名字空间缓存、逻辑卷视图维护等等,这些都增加了客户端的负载,占用相当的CPU 和内存。

 

用户空间 vs 内核空间

    用户空间实现起来相对要简单许多,对开发者技能要求较低,运行相对安全。用户空间效率低,数据需要多次与内核空间交换,另外GlusterFS 借助FUSE 来实现标准文件系统接口,性能上又有所损耗。内核空间实现可以获得很高的数据吞吐量,缺点是实现和调试非常困难,程序出错经常会导致系统崩溃,安全性低。纵向扩展上,内核空间要优于用户空间,GlusterFS 有横向扩展能力来弥补。

 

堆栈式 vs 非堆栈式

    这有点像操作系统的微内核设计与单一内核设计之争。GlusterFS 堆栈式设计思想源自GNU/Hurd 微内核操作系统,具有很强的系统扩展能力,系统设计实现复杂性降低很多,基本功能模块的堆栈式组合就可以实现强大的功能。查看GlusterFS卷配置文件我们可以发现,translator 功能树通常深达10层以上,一层一层进行调用,效率可见一斑。非堆栈式设计可看成类似Linux 的单一内核设计,系统调用通过中断实现,非常高效。后者的问题是系统核心臃肿,实现和扩展复杂,出现问题调试困难。

 

原始存储格式 vs 私有存储格式

    GlusterFS使用原始格式存储文件或数据分片,可以直接使用各种标准的工具进行访问,数据互操作性好,迁移和数据管理非常方便。然而,数据安全成了问题,因为数据是以平凡的方式保存的,接触数据的人可以直接复制和查看。这对很多应用显然是不能接受的,比如云存储系统,用户特别关心数据安全,这也是影响公有云存储发展的一个重要原因。私有存储格式可以保证数据的安全性,即使泄露也是不可知的。GlusterFS 要实现自己的私有格式,在设计实现和数据管理上相对复杂一些,也会对性能产生一定影响。

 

大文件 vs 小文件

    GlusterFS 适合大文件还是小文件存储?弹性哈希算法和Stripe 数据分布策略,移除了元数据依赖,优化了数据分布,提高数据访问并行性,能够大幅提高大文件存储的性能。对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS 并没有在I/O 方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是一个瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS 适合存储大文件,小文件性能较差,还存在很大优化空间。

 

可用性 vs 存储利用率

    GlusterFS使用复制技术来提供数据高可用性,复制数量没有限制,自动修复功能基于复制来实现。可用性与存储利用率是一个矛盾体,可用性高存储利用率就低,反之亦然。采用复制技术,存储利用率为1/复制数,镜像是50%,三路复制则只有33%。其实,可以有方法来同时提高可用性和存储利用率,比如RAID5的利用率是(n-1)/n,RAID6是(n-2)/n,而纠删码技术可以提供更高的存储利用率。但是,鱼和熊掌不可得兼,它们都会对性能产生较大影响。

 

六、术语表

Xlator=translator:glusterfs模块的代名词

Brick:存储目录是GlusterFS 的基本存储单元,由可信存储池中服务器上对外输出的目录表示。存储目录的格式由服务器和目录的绝对路径构成,具体如下:

SERVER:EXPORT.例如:myhostname:/exports/myexportdir/

Volume:卷是存储目录的逻辑组合。大部分gluster 管理操作是在卷上进行的。

Metadata:元数据关于数据的数据,用于描述文件、目录等的相关信息。

FUSE=Filesystem inUserspace:是一个内核模块,允许用户创建自己的文件系统无需修改内核代码。

Glusterd : Glusterfs 后台进程,运行在所有Glusterfs 节点上。

DistributeVolume: 分布式卷

ReplicateVolume: 副本卷

StripeVolume: 条带卷

DistributeReplicate Volume: 分布式副本卷

DHT=Distribute HashTable

AFR=Automatic FileReplication

SAN = Storage AreaNetwork: 存储区域网络是一种高速网络或子网络,提供在计算机与存储之间的数据传输。

NAS = Network-attachedstorage:网络附属存储是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不同主机和应用服务器进行访问的技术。

RPC =Remote ProcedureCall: 远程过程调用

XDR =eXtern DataRepresentation: RPC 传递数据的格式

CLI=Command LineInterface:控制台

argp=Argument Parser

UUID=University UnqiueIdentifier

SVC =service

CLNT =client

MGMT=management

cbks = Call Backs

ctx = context

lk = lock

attr = attribute

txn = transaction

rb = replace brick

worm = write once , readmany



运维说明


一、系统配额

1、开启/关闭系统配额

    gluster volume quota VOLNAME enable/disable

2、设置(重置)目录配额

    gluster volume quota VOLNAME limit-usage /img limit-value
    gluster volume quota img limit-usage /quota 10GB

    设置img 卷下的quota 子目录的限额为10GB。这个目录是以系统挂载目录为根目录”/”,所以/quota 即客户端挂载目录下的子目录quota

3、配额查看

    gluster volume quota VOLNAME list
    gluster volume quota VOLNAME list

    可以使用如上两个命令进行系统卷的配额查看,第一个命令查看目的卷的所有配额设置,第二个命令则是执行目录进行查看。可以显示配额大小及当前使用容量,若无使用容量(最小0KB)则说明设置的目录可能是错误的(不存在)。


二、地域复制

    gluster volume geo-replication MASTER SLAVE start/status/stop

    地域复制是系统提供的灾备功能,能够将系统的全部数据进行异步的增量备份到另外的磁盘中。


    gluster volume geo-replication img 192.168.10.8:/data1/brick1 start

    如上,开始执行将img 卷的所有内容备份到10.8 下的/data1/brick1 中的task,需要注意的是,这个备份目标不能是系统中的Brick。


三、平衡卷

    平衡布局是很有必要的,因为布局结构是静态的,当新的bricks 加入现有卷,新创建的文件会分布到旧的bricks 中,所以需要平衡布局结构,使新加入的bricks 生效。布局平衡只是使新布局生效,并不会在新的布局移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。

    当你扩展或者缩小卷之后,需要重新在服务器直接重新平衡一下数据,重新平衡的操作被分为两个步骤:

    1、Fix Layout

    修改扩展或者缩小后的布局,以确保文件可以存储到新增加的节点中。

    2、Migrate Data

    在新加入bricks 节点之后需要重新平衡数据。

    * Fix Layout and Migrate Data

 先重新修改布局然后移动现有的数据(重新平衡)

# gluster volume rebalance VOLNAME fix-layout start
# gluster volume rebalance VOLNAME migrate-data start

 也可以两步合一步同时操作

# gluster volume rebalance VOLNAME start
# gluster volume rebalance VOLNAME status //你可以在在平衡过程中查看平衡信息

# gluster volume rebalance VOLNAME stop //你也可以暂停平衡,再次启动平衡的时候会从上次暂停的地方继续开始平衡。


四、I/O 信息查看

    Profile Command 提供接口查看一个卷中的每一个brick 的IO 信息

#gluster volume profile VOLNAME start //启动profiling,之后则可以进行IO 信息查看
#gluster volume profile VOLNAME info //查看IO 信息,可以查看到每一个Brick 的IO 信息

#gluster volume profile VOLNAME stop //查看结束之后关闭profiling 功能

 

五、Top监控

    Top command 允许你查看bricks 的性能例如:read, write, fileopen calls, file read calls, file,write calls,directory open calls, and directory real calls

    所有的查看都可以设置top 数,默认100

# gluster volume top VOLNAME open [brick BRICK-NAME] [list-cnt cnt] //查看打开的fd
# gluster volume top VOLNAME read [brick BRICK-NAME] [list-cnt cnt] //查看调用次数最多的读调用
# gluster volume top VOLNAME write [brick BRICK-NAME] [list-cnt cnt] //查看调用次数最多的写调用
# gluster volume top VOLNAME opendir [brick BRICK-NAME] [list-cnt cnt] //查看次数最多的目录调用
# gluster volume top VOLNAME readdir [brick BRICK-NAME] [list-cnt cnt] //查看次数最多的目录调用
# gluster volume top VOLNAME read-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每个Brick 的读性能

# gluster volume top VOLNAME write-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每个Brick 的写性能

 

六、性能优化配置选项

gluster volume set arch-img cluster.min-free-disk 默认是10% 磁盘剩余告警
gluster volume set arch-img cluster.min-free-inodes 默认是5% inodes 剩余告警
gluster volume set img performance.read-ahead-page-count 8 默认4,预读取的数量
gluster volume set img performance.io-thread-count 16 默认16 io 操作的最大线程
gluster volume set arch-img network.ping-timeout 10 默认42s
gluster volume set arch-img performance.cache-size 2GB 默认128M 或32MB,
gluster volume set arch-img cluster.self-heal-daemon on 开启目录索引的自动愈合进程
gluster volume set arch-img cluster.heal-timeout 300 自动愈合的检测间隔,默认为600s #3.4.2版本才有
gluster volume set arch-img performance.write-behind-window-size 256MB #默认是1M 能提高写性能单个文件后写缓冲区的大小默认1M

 


参考资料:

http://www.gluster.com/products/gluster-file-system-architecture-white-paper/

http://www.gluster.com/products/performance-in-a-gluster-system-white-paper/

http://gluster.com/community/documentation/index.php/Main_Page

http://blog.csdn.net/liuaigui/

 

转自:http://linuxnote.blog.51cto.com/9876511/1825533,格式等有修改。


本文出自 “敏而好学” 博客,请务必保留此出处http://dangzhiqiang.blog.51cto.com/7961271/1907174

运维面试帮你找到公司的业务及运维负责内容-面试前必看

...准答案。每家公司根据业务的不同,以及公司的组织管理架构不同,运维人员所负责的内容不一样。今天我们以一家公司为例,来给出一个样例答案,仅供参考。公司主要业务切记一点,业务和经营范围不一样上图中这些叫经营... 查看详情

运维面试帮你找到公司的业务及运维负责内容-面试前必看

...准答案。每家公司根据业务的不同,以及公司的组织管理架构不同,运维人员所负责的内容不一样。今天我们以一家公司为例,来给出一个样例答案,仅供参考。公司主要业务切记一点,业务和经营范围不一样上图中这些叫经营... 查看详情

基于intelcas加速的glusterfs常见运维(代码片段)

...作均需要在各个节点执行------------------------------七、启动glusterfs进行volume的创建八、进行坏盘故障模拟一、IntelCAS的使用这里是IntelCAS的帮助文档。在搭配Intel自己的闪存产品时,这个软件没有cache的容量限制。如果使用其他... 查看详情

运维之存储服务--glusterfs

Glusterfshttp://www.gluster.org/本文出自“运维自动化”博客,请务必保留此出处http://shower.blog.51cto.com/4926872/1964902 查看详情

信息系统运维的发展现状趋势及运维的主要内容和目标

信息系统运维,特指新建或升级改造类信息系统项目实施完成后的系统在完成其试运行周期后,正式进入生产环境交付合适阶段的维护和保养工作。一、信息系统运维的发展现状:1.从建设向运维的转型时期;2.缺少全面性的运... 查看详情

centos查看系统/硬件信息及运维常用命令

[[email protected]~]#uname-a#查看内核/操作系统/CPU信息的linux系统信息命令[[email protected]~]#head-n1/etc/issue#查看操作系统版本,是数字1不是字母L[[email protected]~]#cat/proc/cpuinfo#查看CPU信息的linux系统信息命令[[email pr 查看详情

mpaas运维流程介绍

简介: 金融级移动开发平台mPaaS(MobilePaaS)为App开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。在我... 查看详情

‘高并发&高性能&高可用服务程序’编写及运维指南

导言:记得在远2012年时,因为向往着能写高并发程序,自己选择了跳槽。开始时是写支撑数万设备并发的程序(我们物联网设备业务需要保持长连接),随着企业的发展,逐渐增长到十万、数十万设备,当时还讲究挖掘单机性... 查看详情

mysql数据库运维之主从复制搭建(代码片段)

...篇文章的基础上介绍MySQL主从复制过程,其中常见的复制架构有:异步复制,半同步复制及同步复制。常用的复制架构有异步复制及半同步复制!一、常见的复制架构1、主主复制(1)结构图:(2)说明:主主复制即复制的两个... 查看详情

mysql数据库运维之主从复制搭建(代码片段)

...篇文章的基础上介绍MySQL主从复制过程,其中常见的复制架构有:异步复制,半同步复制及同步复制。常用的复制架构有异步复制及半同步复制!一、常见的复制架构1、主主复制(1)结构图:(2)说明:主主复制即复制的两个... 查看详情

优维低代码:useresolves

...技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。连载第十四期《高级指引:UseResolves》▽useResolves 是构件生命周期的重要特性,它扮演着类似AngularRout... 查看详情

ipfs,filecoion质押和gas费用及运维的讲解

Filecoin通过提供存储及检索服务获得区块奖励,为了防止客户数据丢失,Filecoin通过预付质押的方式与矿工进行利益捆绑,矿工存储越大,所需支付的质押也越高,而矿工支付的质押则在五百四十天扇区到期后... 查看详情

招行架构师徐佳航:金融云原生与开源标准的共同生长

云原生的技术价值喻示着它就是未来,加入到一个具有可延续性生命力的开源社区,可以帮助我们更快地到达那里。——徐佳航,KubeVelaMaintainer,来自招商银行基础设施研发中心云平台及运维平台开发团队。来自... 查看详情

优维低代码:bestpractice

...技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。连载第十二期《编排详解:BestPractice》▽#Storyboard最佳结构第一级路由type:routeProvider的声明尽量放到路由... 查看详情

glusterfs分布式文件系统快速管理

TaoCloudXDFS基于GlusterFS开源分布式文件系统,进行了系统优化、工程化、定制化和产品化工作,五年以上的实践积累了大量实践经验,包括客户案例、最佳实践、定制开发、咨询服务和技术培训。XDFS推崇KISS大道至简的... 查看详情

linux运维之路

...生产实战运维场景如何利用硬件优化操作系统、Unix及Linux介绍linux操作系统种类及运维人员选择建议Ce 查看详情

优维低代码:provider构件

...技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。连载第十五期《高级指引:Provider构件》▽Provider构件是一种特殊类型的构件,它不提供任何界面展示的... 查看详情

优维低代码:构件渲染子构件

...技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。为了特殊标注某个字段我们常会对一些字段进行特殊的渲染,这里常见于表格或详情描述等,在编排这里... 查看详情