开源分布式存储系统(HDFS、Ceph)架构分析

文章目录

  • 中间控制节点架构-HDFS
    • NameNode节点分析
    • DataNode节点分析
    • SecondNameNode节点分析
    • Client分析
  • 完全无中心架构-Ceph
    • Ceph Monitor分析
    • Ceph OSD分析
    • Ceph Manager分析
    • Ceph Clients分析
  • 小结
    • HDFS
      • 优点
      • 缺点
    • Ceph
      • 优点
      • 缺点
  • 参考

中间控制节点架构-HDFS

以HDFS( Hadoop Distribution File System )为代表的架构是中间控制节点架构的代表。

HDFS分布式文件系统是被设计成主从式的一种架构,集群中主要由客户端名称节点NameNode数据节点DataNode第二名称节点SecondNameNode组成。其中名称节点相当于分布式文件系统的管理者,主要用于管理文件系统命名空间及对整个集群进行控制等功能,数据节点则是文件实际存储的基本单元并在NameNode的控制下进行数据的读写和出错处理等基本操作,SecondNameNode则是用于备份NameNode的系统信息文件增强了集群抵抗单点失效的能力,客户端主要负责与NameNode与DataNode之间的通信,访问HDFS文件系统对文件进行增删查改等操作,HDFS集群中通常会包括一个NameNode节点与一个SecondNameNode节点,数据节点则会根据集群规模不同有所不同,一般的集群会有几十或着几百个数据节点规模大的甚至可以达到上千个,它的基本架构图如下图所示:

image-20230918110416861

在HDFS系统中,通常会有一个NameNode、一个SecondNameNode、多个DataNode和多个HDFS Client。各个结点都会以守护进程的方式运行在以网络分布的不同服务器上。其中,NameNode相当于集群的管理者,DataNode是集群的基本存储单元,客户端用于访问HDFS,SecondNameNode会定期合并NameNode的元数据信息。

NameNode节点分析

NameNode的作用:

  • 保存文件的元数据信息。NameNode主要负责存储文件系统的命名空间元数据,它将决定数据块映射到哪个DataNode上。
  • 通过心跳机制检测DataNode的运行状态。NameNode启动之后将运行一个监听DataNode消息的进程,在DataNode运行之后它将会连接NameNode并会定期的向NameNode发送一个HeartBeat(即心跳)报告,将运行状态信息发送给NameNode,NameNode将根据这些信息来确定集群中的机器运行状态和数据块的分布状态,发送的时间默认是20分钟当超过这个时间没有接收到节点的信息时则认为该节点出现了故障。

NameNode是整个HDFS架构中最为核心的部分,它维护了整个文件系统的文件目录树和文件、目录的元数据信息与文件数据快索引,这些信息以两种形式存储在NameNode的本地文件系统中:一种是命名空间镜像FSImage(即文件系统镜像),另一种是EditLog(即命名空间的编辑日志)。

DataNode节点分析

DataNode的作用:

  • 主要负责数据块的实际复制与存储。
  • 定期向NameNode节点汇报自身运行状态。

每个数据结点都会运行一个守护进程,它主要负责将HDFS中的数据块写入到本地文件系统中的实际物理文件中和从这些文件中读取数据块。在客户端要对文件内容进行操作时,先由NameNode节点通知客户端每个数据块存储在哪个数据结点上,然后客户端直接与DataNode上的守护进程进行通信来进行数据块的读写操作。

DataNode在本地文件中主要保存了数据块与数据块元文件,其中数据块元文件存储的是数据块的校检信息,DataNode在运行之后,将会定期的对数据块文件进行扫描并将计算出的校检信息与数据块元文件进行比较,如果出现不符则认为数据块已经损坏需要进行恢复,数据块的恢复将由BadBlockReport机制实现,DataNode将信息上报给NameNode,NameNode则将数据块信息记录到恢复队列中并在之后通知其它DataNode进行失效数据块的复制,这样就保障了每一个数据块都有规定的副本数,提高了系统的可靠性。

HDFS文件系统中默认的副本数量是3个,数据块的3个副本分布于不同的DataNode上,当这些数据节点上的任意一个崩溃或者不能网络进行访问时可以通过其它节点来进行文件的操作,名称节点的元数据与数据节点上的数据块由下图所示:

image-20230918144511023

SecondNameNode节点分析

SecondNameNode的作用:

  • SecondNameNode在HDFS中的作用是定期和NameNode通信来备份NameNode中的FSImage、EditLog等系统文件,这样就保障了NameNode在发生故障时整个系统命名空间和元数据信息的完整性。

SecondNameNode与名称节点NameNode最大的区别就是它不接受和记录HDFS的任何实时变化,它只是根据系统配置的间隔不断地获得HDFS中某一时间点的命名空间的镜像与编辑日志,并将其合并成一个新的命名空间镜像,这个新的镜像文件会上传到NameNode上替换先前的的命名空间镜像并清空日志文件,这样SecondNameNode为NameNode提供了一个简单的Checkpoint(即检查点)机制从而避免了集群运行时间过长编辑日志过大导致的NameNode启动时间过长的问题。

image-20230918151517680

Client分析

客户端的主要工作就是和NameNode与DataNode进行交互从而进行文件的基本操作,HDFS文件系统提供了多种的客户端交互手段,主要包括:Java API、命令行接口、C 语言库、Thrift 接口与用户文件系统等。


完全无中心架构-Ceph

以Ceph为代表的架构是完全无中心架构的代表。

Ceph存储系统的设计目标是提供高性能、高可扩展性、高可用的分布式存储服务。它采用RADOS(Reliable Autonomic Distributed Object Store)在动态变化和异构的存储设备集群上,提供了一种稳定、可扩展、高性能的单一逻辑对象存储接口和能够实现节点自适应和自管理的存储系统。数据的放置采取CRUSH算法,客户端根据算法确定对象的位置并直接访问存储节点,不需要访问元数据服务器。CRUSH算法具有更好的扩展性和性能。本节介绍了Ceph的集群架构、数据放置方法以及数据读写路径,并在此基础上分析其性能特点和瓶颈。

RADOS可提供高可靠、高性能和全分布式的对象存储服务。对象的分布可以基于集群中各节点的实时状态,也可以自定义故障域来调整数据分布。块设备和文件都被抽象包装为对象,对象则是兼具安全和强一致性语义的抽象数据类型,因此RADOS可在大规模异构存储集群中实现动态数据与负载均衡。

对象存储设备(Object Storage Device,OSD)是RADOS集群的基本存储单元,它的主要功能是存储、备份和恢复,数据,并与其他OSD之间进行负载均衡和心跳检查等。一块硬盘通常对应一个OSD,由OSD对硬盘存储进行管理,但有时一个分区也可成为一个OSD,每个OSD皆可提供完备和具有强一致性的本地对象存储服务。MDS(Metadata Server)是元数据服务器,向外提供CephFS在服务时发出的处理元数据的请求,将客户端对文件的请求转化为对对象的请求。RADOS中可以有多个MDS分担元数据查询的工作。

如下图所示,一个RADOS集群由大量OSD、0~n个MDS和少数几个Monitor组成。

image-20230918213514660

Ceph存储集群由多种类型的守护进程组成:

Ceph Monitor分析

Ceph Monitor维护集群的主副本映射、Ceph集群的当前状态以及处理各种与运行控制相关的工作。在Ceph集群中配置多个Ceph Monitor可确保在其中一个Ceph Monitor守护进程或其主机发生故障时的可用性。

每个Monitor节点上都运行守护进程(ceph-mon)。该守护进程可维护集群映射的主副本,包括集群拓扑图。这意味着Ceph客户端只需要连接到一个Monitor节点并检索当前的集群映射,即可确定所有Monitor和OSD节点的位置。

  • Ceph Monitor的主要作用是维护集群的数据主副本映射关系。同时,它为每个组件维护一个单独的信息图,包括OSD Map、MON Map、MDS Map、PG Map和CRUSH Map等。所有集群节点均向Monitor节点报告,并共享有关其状态的每个更改信息。Monitor不存储实际数据。存储数据是OSD的工作。

  • Ceph Monitor还提供身份验证和日志服务。Monitor将监控服务中的所有更改信息写入单个Paxos,并且Paxos更改写入的K/V存储,以实现强一致性。Ceph Monitor使用K/V存储的快照和迭代器(LevelDB数据库来执行整个存储的同步)。换句话说,Paxos是Ceph Monitor的核心服务,专门负责数据一致性工作。

Paxos服务解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致。Paxos服务运行在允许有服务器宕机的系统中,不要求消息的可靠传递,可容忍消息丢失、延迟、乱序和重复。它利用大多数机制保证了 2 N + 1 2N+1 2N+1 的容错能力,即 2 N + 1 2N+1 2N+1 个节点的系统中最多允许 N N N 个节点同时出故障。

Ceph OSD分析

  • 利用Ceph节点上的CPU、内存和网络进行数据复制、纠错、重新平衡、恢复、监控和报告等

  • Ceph OSD守护进程检查自己的状态和其他OSD的状态,并向Ceph Monitor报告

通常每个磁盘对应一个OSD守护进程。

Ceph Manager分析

维护PG(放置组)有关的详细信息,代替Ceph Monitor处理元数据和主机元数据,能显著改善大规模集群的访问性能。Ceph Manager处理许多只读Ceph CLI的查询请求,例如放置组统计信息。Ceph Manager还提供了RESTful API。

  • Ceph Manager从整个集群中收集状态信息。Ceph Manager守护进程和Ceph Monitor守护进程一起运行,提供了附加的监控功能,并与外部监控系统和管理系统连接。

  • 它还提供其他服务(如Ceph DashBoard UI)、跟踪运行时指标,并通过基于Web浏览器和仪表盘和RESTful API公开集群信息。

将Ceph Manager和Ceph Monitor放在同一节点上运行比较明智,但不强制。

Ceph Clients分析

Ceph客户端接口负责和Ceph集群进行数据交互,包括数据的读写。客户端与Ceph集群进行通信需要以下数据:

  • Ceph集群配置文件或集群的名称(通常命名为ceph)、Monitor地址
  • 存储池名称
  • 用户名和密钥路径

Ceph客户端维护对象ID和存储对象的存储池名称。为了存储和检索数据,Ceph客户端访问Ceph Monitor并检索最新的Cluster Map副本,然后由Ceph客户端向Librados提供对象名称和存储池名称。Librados会使用CRUSH算法为要存储和检索的数据计算对象的放置组和主OSD。客户端连接到主OSD,并在其中执行读取和写入操作。


小结

HDFS

优点

  1. 容错性:数据自动保存多个副本。通过增加副本的形式,提高容错性。其中一个副本丢失以后,可以自动恢复。

  2. 可以处理大数据:能够处理数据规模达到GB、TB甚至PB级别的数据;能够处理百万规模以上的文件数量。

  3. 可以构建在廉价的机器上,通过多副本机制,提高可靠性。

缺点

  1. 不适合低延时数据访问:比如毫秒级的存储数据,是做不到的。

  2. 无法高效对大量小文件进行存储:存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。同时,小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。

  3. 不支持并发写入、文件随机修改:一个文件只能有一个写,不允许多个线程同时写。仅支持数据append(追加),不支持文件的随机修改。

Ceph

优点

  1. 高性能。针对并发量大的异步IO场景,随着集群规模的扩大,Ceph可提供近线性的性能增长。
  2. 高可扩展性。Ceph通过CRUSH算法来实现数据寻址。这种方法避免了元数据访问的瓶颈,使集群的存储容量可以轻易扩展至PB级,甚至EB级。
  3. 统一存储,适用范围广。Ceph支持块、文件和对象存储,可满足多种不同的需求。底层的RADOS可扩展并支持不同类型的存储服务。
  4. 支持范围广。 自2012年起,Linux内核开始支持Ceph,目前Ceph可以在几乎所有主流的Linux发行版和其他类UNIX系统上运行。自2016年起,Ceph开始支持ARM架构,同时也可适用于移动、低功耗等领域,其应用场景覆盖了当前主流的软硬件平台。

缺点

  1. Ceph的数据分布算法CRUSH在实际环境中存在一些问题,包括扩容时数据迁移不可控、数据分布不均衡等。这些问题影响了Ceph性能的稳定性。
  2. Ceph的架构复杂,抽象层次多,时延较大。虽然Ceph采用面向对象的设计思想,但其代码内对象间的耦合严重,导致不同版本间的接口不兼容。针对不同版本的性能优化技术和方法也互相不兼容。
  3. Ceph是一个通用的分布式存储系统,可应用于云计算、大数据和高性能计算等领域。针对不同的访问负载特征,Ceph还有较大的性能提升和优化空间。

参考

  • 《基于HDFS分布式存储技术研究与优化》
  • 《Ceph分布式存储系统性能优化技术研究综述》
  • 《Ceph企业级分布式存储:原理与工程实践》
  • https://zhuanlan.zhihu.com/p/186024598
  • https://zhuanlan.zhihu.com/p/524792408

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136654.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Buuctf web [SUCTF 2019]EasySQL

又是一道考察sql注入的题 1、起手试探 (主要看看输入什么内容有正确的回显) 1 0 1 1 # 发现只有在输入1的情况下有正常的回显,输入0或其他字符都没有回显,所以这题就要尝试堆叠注入了。 ps:(如果想尝试其他注入方法…

多目标优化算法:基于非支配排序的海象优化算法(NSWOA)MATLAB

一、海象优化算法WOA 海象优化算法(Walrus Optimization Algorithm,WOA)由Trojovsk等人于2023年提出,该算法模拟海象的进食,迁移,逃跑和对抗捕食者的过程,WOA包含探索、迁移和开发三个阶段&…

许战海战略文库|无增长则消亡:大型制造集团增长困境

竞争环境不是匀速变化,而是加速变化。企业的衰退与进化、兴衰更迭在不断发生,这成为一种不可避免的现实。在过去的100年里,全球经济周期的时间长度明显缩短,周期内的波动也更为剧烈。联合国教科文组织的研究表明,18世纪知识更新的周期约为80到…

兔兔答题企业版1.0.0版本全网发布,同时开源前端页面到unicloud插件市场

项目说明 兔兔答题是用户端基于uniapp开发支持多端适配,管理端端采用TypeScriptVue3.jselement-plus,后端采用THinkPHP6PHP8Golang开发的一款在线答题应用程序。 问题反馈 线上预览地址 相关问题可以通过下方的二维码,联系到我。了解更多 …

《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)

文章目录 1. 概述1.1角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图示例 1. 概述 享元(Flyweight)模式采用共享方式向客户端提供数量庞大的细粒度对象。 所谓细粒度对象,是指实现了业务细节并相互独立的对象。细粒度对象是一种相对概念&…

QT---day3---9.19

1> 完成文本编辑器的保存工作 ui界面&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QMessageBox> #include <QColor> #include <QColorDialog> #include <QFo…

电工三级证(高级)实战项目:信号交通灯的PLC控制

实训目的 掌握比较指令掌握时钟指令掌握时间同步的方法 控制要求 PLC设备:Siemens S7-200 要求:按下起动按钮SB1后&#xff0c;东西方向绿灯亮20s&#xff0c;之后再闪烁绿灯3s&#xff0c;之后黄灯亮3s&#xff0c;最后红灯亮26s&#xff1b;同时&#xff0c;南北方向红灯亮…

【链表】K 个一组翻转链表-力扣 25 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

知识付费平台开发技术实践:构建数字学习的未来

引言 知识付费平台的兴起正在塑造着数字学习的未来。本文将介绍一些关键的技术实践&#xff0c;帮助开发者构建强大的知识付费平台&#xff0c;提供出色的数字学习体验。 1. 选择适当的技术栈 在开始知识付费平台的开发之前&#xff0c;首要任务是选择适当的技术栈。这包括…

【解决Win】“ 无法打开某exe提示无法成功完成操作,因为文件包含病毒或潜在的垃圾软件“

在下载某个应用程序&#xff0c;打开时出现了“无法成功完成操作因为文件包含病毒或潜在垃圾”的提示&#xff0c;遇到这个情况怎么解决&#xff1f; 下面为大家分享故障原因及具体的处理方法。 故障原因 是由于杀毒 防护等原因引起的。 解决方案 打开Windows 安全中心 选择…

BUU [HCTF 2018]Hideandseek

BUU [HCTF 2018]Hideandseek 考点&#xff1a; 软连接读取任意文件Flask伪造session/proc/self/environ文件获取当前进程的环境变量列表random.seed()生成的伪随机数种子MAC地址(存放在/sys/class/net/eth0/address文件) 国赛的时候遇见过软连接&#xff0c;这次再来学习一下…

方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案

一、方案背景 为严控秸秆露天焚烧&#xff0c;改善环境空气质量&#xff0c;各省相继发布秸秆禁烧工作内容。以安徽省为例&#xff0c;大气污染防治联席会议下发了该省2020年秸秆禁烧工作部署通知。2020年起&#xff0c;气象局将对全省秸秆焚烧火点实施卫星全年全时段监测&…

指针笔试题讲解(让指针变得简单易懂)

数组名的理解 : 数组名就是首元素地址 但是有两个例外&#xff1a; 1. sizeof&#xff08;数组名&#xff09;这里的数组名表示整个数组的大小&#xff0c;sizeof&#xff08;数组名&#xff09;计算的是整个数组的大小&#xff0c;单位是字节 2. &数组名 这里的数组…

9月19日作业

完成文本编辑器的保存工作-代码&#xff1a; void Widget::on_pushButton_4_clicked() {//创建保存文件对话框QString filename QFileDialog::getSaveFileName(this,"保存文件","./","All(*.*);;Text files (*.txt)");//创建一个文件对象&…

福建厦门航空飞机发动机零部件检测3D测量尺寸偏差比对-CASAIM中科广电

航空航天是一个创新型发展国家的尖端命脉&#xff0c;代表着一个国家科学技术的先进水平。在航空航天工业的发展和组成领域中&#xff0c;对于在制造业中的航空航天产品零部件精度要求十分严苛&#xff0c;从前期的设计、中期建造、后期维修检测&#xff0c;任何一个环节、任何…

java CAS详解(深入源码剖析)

CAS是什么 CAS是compare and swap的缩写&#xff0c;即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。 cas是一种基于锁的操作&#xff0c;而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住&#xff0c;等之前获得锁的线程释放锁之后&am…

Nginx配置负载均衡时访问地址无法生效

场景还原 今天有小伙伴练习Nginx配置负载均衡时总是无法使用配置好的网址访问 配置文件信详情 http {# 负载均衡 后端IP地址和端口 webservers 策略 轮询upstream webservers{server 192.168.1.100:8080 weight90; server 127.0.0.1:8080 weight10; }server{listen 80;ser…

C#使用OpenCv(OpenCVSharp)图像轮廓多边形逼近和轮廓最小矩形实例

本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像轮廓多边形逼近和轮廓最小矩形实例。 多边形逼近的目的是减少轮廓的点数,但看起来轮廓形状差不多。 最小矩形:面积更小的矩形,把轮廓包围起来实例 创建winform项目,添加控件和事件 添加类 using System; using…

学习路之PHP--laravel postman 提交表单出现419错误

问题图片 解决&#xff1a; 白名单 有时候你可能希望设置一组不需要 CSRF 保护的 URL 。例如&#xff0c;如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统&#xff0c;你会需要从 CSRF 的保护中排除 Stripe webhook 处理程序路由&#xff0c;因为 Stripe 不知道要发…

VSCode『SSH』连接服务器『GUI界面』传输

前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型&#xff08;pygame&#xff09;&#xff0c;但是我是使用 SSH 连接的&#xff0c;不能很好的显示模型训练的效果画面&#xff0c;所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注&#xff1a;我们…