Ceph vs. GlusterFS
bigegpt 2025-01-11 10:31 19 浏览
背景
存储世界最近发生了很大的变化。以前光纤通道SAN管理器是企业存储的绝对标准,但现在的存储必须足够敏捷,才能适应在新的基础架构即服务云环境内运行。两个产品Ceph和Gluster是Red Hat旗下的成熟的开源存储产品,但是Ceph与GlusterFS 在原理上有着本质上的不同。它们的灵活性成为现代云环境中表现最出色的两个敏捷存储系统。
Ceph
介绍
Ceph是一套高性能,易扩展的,无单点的分布式文件存储系统,基于Sage A. Weil的论文开发,使用一系列API将数据以块(block)、文件(file)和对象(object)的形式展现。Ceph存储系统的拓扑结构围绕着副本与信息分布,这使得该系统能够有效保障数据的完整性。分布式开源存储解决方案 Ceph 是一个面向对象的存储系统,它使用二进制对象进行操作,从而消除了经典数据载体的刚性块结构。在物理上,Ceph 也使用硬盘驱动器,但它有自己的算法来调节二进制对象的管理,然后可以将其分布在多个服务器之间,然后重新组装。
特点
高性能:摒弃了传统的集中式存储元数据寻址的方案采用 CRUSH 算法数据分布均衡并行度高 ; 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等 ; 能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据 ;
高可用性:副本数量可以灵活控制 ; 支持故障域分隔,数据强一致性 ; 多种故障场景自动进行修复自愈 ; 没有单点故障,自动管理 ;
高可扩展性:去中心化 ; 扩展灵活 ; 随着节点增加而线性增长 ;
特性丰富:支持三种存储接口:块存储、文件存储、对象存储 ; 支持自定义接口,支持多种语言驱动 .
架构
Ceph概念介绍
RADOS:RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
Librados:Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
RBD:RBD全称RADOS block device,是Ceph对外提供的块设备服务,也就是块存储接口。
RGW:RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,也就是对象存储接口,接口与S3和Swift兼容。
CephFS:CephFS全称Ceph File System,是Ceph对外提供的文件系统服务,也就是文件级存储接口
Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
PG:PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
CRUSH:CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
Ceph 基础组件
ceph 集群的基础组件。其中包含 OSD、Manager、MDS、Monitor。
- OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息。
- Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个。
- MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等)。
- Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个。
Ceph clients 对外提供各种功能的组件。其中包含:Block Device、Object Storage、Filesystem。
- Block Device:块存储设备,RBD。
- Object Storage: 对象存储,RGW。对外可提供 swift 、s3 接口类型的restful api。
- Filesystem:文件系统,CephFS。提供一个兼容POSIX的文件系统。
ceph 存储过程
在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(obj)
Ceph 在对象存储的基础上提供了更加高级的思想,当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一个 pg 就是一组对象的集合。ceph 引入pgp,pgp 决定了 pg 和 osd 之间的映射关系,即相当于是pg存放的一种osd排列组合,举个例子:假设集群有3个osd,即osd1,osd2,osd3,副本数为2,如果pgp=1,那么pg存放的osd的组合就有一种,可能是[osd1,osd2],那么所有的pg主从副本都会存放到osd1和osd2上;如果pgp=2,那么其osd组合可能就两种,可能是[osd1,osd2]和[osd1,osd3],pg的主从副本会落在[osd1,osd2]或者[osd1,osd3]中。一般将 pgp_num 设置成和 pg_num 一样大小。ceph 基于CRUSH算法通过计算数据存储位置来确定如何存储和检索数据。CRUSH使Ceph客户机能够直接与OSDs通信,而不是通过集中的服务器或代理。通过算法确定的数据存储和检索方法,Ceph避免了单点故障、性能瓶颈和对其可伸缩性的物理限制
由于 ceph 集群面对许多的独立项目,因此 ceph 还引入了 ceph pool 的概念用于划分不同的项目。pg 和 ceph pool 的区别:
- pg 对于用户来说是透明的,只是底层的一种优化方案。
- ceph pool 对于用户来说,就像 mysql 中的 database。
GlusterFS
介绍
GlusterFS (Gluster File System) 是一个开源的分布式文件系统,主要由 Z RESEARCH公司负责开发。GlusterFS 是 Scale-Out 存储解决方案 Gluster 的核心,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 借助 TCP/IP 或 InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS 基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成,没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。
特点
无元数据节点:采用无中心对称式架构,没有专用的元数据服务器,也就不存在元数据服务器瓶颈。元数据存在于文件的属性和扩展属性中。
规范的接口:GlusterFS服务器与POSIX兼容,使用支持文件扩展属性的磁盘文件系统(如ext4、XFS)来存储磁盘上的数据。同时,可以通过业界标准的访问协议如NFS或SMB访问GlusterFS服务器。
扩展性和高性能:GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问
高可用性:GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问
全局统一命名空间:全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件
弹性哈希算法:GlusterFS采用弹性哈希算法在存储池中定位数据,而不是采用集中式或分布式元数据服务器索引
弹性卷管理:数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到
架构
GlusterFS 概念介绍
Brick:GlusterFS 中的存储单元,表示为trusted storage pool中输出的目录,供客户端挂载用。可以通过云主机和目录名来识别,例如: SERVER:EXPORT
Client:挂载了GlusterFS卷的设备
GFID:GlusterFS 卷中的每个文件或目录都有一个唯一的128位的数据关联,其用于模拟inode
Namespace:每个Gluster 卷都导出单个ns作为POSIX的挂载点
Node:一个拥有若干个 Brick 的设备
RDMA:远程直接内存访问,支持不通过双方的OS进行内存访问
RRDNS:Round Robin DNS 是一种通过DNS 轮转返回不同的设备以进行负载均衡的方法。
Self-heal:用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致的问题
Volfile:GlusterFS 进程的配置文件,通常位于 /var/lib/glusterd/vols/volname
Volume:一组Bricks 的逻辑集合.
GlusterFS架构介绍
GlusterFS总体架构它主要由存储服务器(BrickServer)、客户端以及NFS/Samba 存储网关组成。不难发现,GlusterFS 架构中没有元数据服务器组件,这是其最大的设计点,这对于提升整个系统的性能、可靠性和稳定性都有着决定性的意义。GlusterFS 支持TCP/IP 和InfiniBandRDMA 高速网络互联,客户端可通过原生Glusterfs 协议访问数据,其他没有运行GlusterFS客户端的终端可通过NFS/CIFS 标准协议通过存储网关访问数据。GlusterFS采用堆栈式设计,该思想源自GNU/Hurd 微内核操作系统,具有很强的系统扩展能力,系统设计实现复杂性降低很多,基本功能模块的堆栈式组合就可以实现强大的功能。
GlusterFS 集群模式卷
分布式卷(Distributed Volume):又称其为哈希卷,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上,优点是容量大,缺点是没数据冗余即可靠性无法保障
复制卷(Replicated Volume):复制卷设定复制的份数,决定集群的大小,通常与分布式卷或者条带卷组合使用,解决前两种存储卷的冗余缺陷。缺点是磁盘利用率低。
分布式复制卷(Distributed Replicated Volume):分布式复制GlusterFS卷结合了分布式和复制Gluster卷的特点。
条带卷(Striped Volume):文件是分片均匀写在各个节点的硬盘上的,优点是分布式读写,性能整体较好。缺点是没冗余,分片随机读写可能会导致硬盘IOPS饱和。
分布式条带卷(Distributed Striped Volume):当单个文件的体型十分巨大,客户端数量更多时,条带卷已经无法满足需求,此时将分布式与条带化结合起来是一个比较好的选择。其性能与服务器数量有关。
总结
由于 GlusterFS 和 Ceph 之间的技术差异,没有明显的赢家。Ceph 基本上是用于非结构化数据的面向对象内存,而 GlusterFS 在块存储中使用文件系统树的层次结构。GlusterFS 起源于一个高效的、基于文件的存储系统,该系统继续朝着更加面向对象的方向发展。相比之下,Ceph从一开始就被开发为二进制对象存储,而不是经典的文件系统,这可能导致较弱的标准文件系统操作。
GlusterFS 与 Ceph 共同点
- 纵向扩展和横向扩展:在云环境中,必须可以很容易地向服务器添加更多存储空间以及扩展可用存储池。Ceph 和 GlusterFS 都可以通过轻松将新存储设备集成到现有存储产品中来满足这一要求。
- 高可用性:GlusterFS 和 Ceph 的复制是同时将数据写入不同的存储节点。这样做的结果是,访问时间增加,数据可用性也提高。在 Ceph 中,默认情况下将数据复制到三个不同的节点,这确保备份始终可用。
- 商品化硬件:GlusterFS 和 Ceph 是在 Linux 操作系统之上开发的。因此,对硬件唯一的要求是这些产品具有能够运行 Linux 的硬件。任何商品化硬件都可以运行 Linux 操作系统,结果是使用这些技术的公司可以大大减少在硬件上的投资——如果他们这样做的话。然而,实际上,许多公司正在投资专门用于运行 GlusterFS 或 Ceph 的硬件,因为更快的硬件可以更快地访问存储。
- 无中心化:在云环境中,永远不应该出现中心点故障问题。对于存储,这意味着不应该用一个中央位置存储元数据。GlusterFS 和 Ceph 实现了元数据访问去中心化的解决方案,从而降低了存储访问的可用性和冗余性。
GlusterFS 与 Ceph 的差异
- GlusterFS 是来自 Linux 世界的文件系统,并且遵守所有 POSIX 标准。尽管你可以将 GlusterFS 轻松集成到面向 Linux 的环境中,但在 Windows 环境中集成 GlusterFS 很难。
- Ceph是一种全新的存储方法,对应于Swift(OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一)对象存储。在对象存储中应用程序不会写入文件系统,而是使用存储中的直接API访问写入存储。因此,应用程序能够绕过操作系统的功能和限制。如果已经开发了一个应用程序来写入Ceph存储,那么使用哪个操作系统无关紧要。结果表明Ceph存储在Windows环境中像在Linux环境中一样容易集成。
- 基于API的存储访问并不是应用程序可以访问Ceph的唯一方式。为了最佳的集成,还有一个Ceph块设备,它可以在Linux环境中用作常规块设备,使你可以像访问常规Linux硬盘一样来使用Ceph。Ceph还有CephFS,它是针对Linux环境编写的Ceph文件系统。
- GlusterFS适合大文件,对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS并没有在I/O方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS的小文件性能还存在很大优化空间
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)