百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

分布式文件存储|Ceph分布式存储基础

bigegpt 2025-01-11 10:31 10 浏览



简介

随着数据量的不断增加,传统的存储方式已经无法满足复杂应用场景下的存储需求。传统的存储类型一般包括本地磁盘、网络存储(NAS)和存储区域网络(SAN),这些存储方式面临着很多挑战。例如,本地磁盘存储容量有限,无法扩展;NAS和SAN存储成本高昂,并且难以扩展。

传统的存储类型

DAS设备:SAS、 SATA、 SCSI、 IDE、 USB

无论是哪种接口,都是存储设备驱动下的磁盘设备,而磁盘设备其实就是一种存储,这种存储是直接接入到主板总线上去的。

NAS设备:NFS、SIFS、FTP

几乎所有的网络存储设备基本上都是以文件系统样式进行使用,无法进一步格式化操作。

SAN:SCSI 协议、EC SAN、 iSCSI

基于SAN方式提供给客户端操作系统的是一种块设备接口,这些设备间主要通过SCSI协议来完成正常的通信。SCSI 的结构类似于TCPNIP协议,也有很多层,但是scsl 协议主要是用来进行存储数据操作的。既然是分层方式实现的,那就是说,有部分层可以被替代。比如将物理层基于EC方式来实现,就形成了ECSAN,如果基于以太网方式来传递数据,就形成了iSCSl模式。

传统的存储方式问题

  • 存储处理能力不足:传统的IDE的IO值是100次/秒,SATA固态磁盘500次/秒,NVMe固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍,难道能够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问么?这同时还要受到主机网络IO能力的限制。
  • 存储空间能力不足:单块磁盘的容量再大,也无法满足用户的正常访问所需的数据容量限制。
  • 单点问题:单主机存储数据存在SPQE(single point of failure)问题

相比之下,分布式存储提供了更好的解决方案。它可以将数据存储在多个节点上,实现数据的高可用性和容错性。常见的分布式存储软件包括Ceph、Hadoop分布式文件系统、GlusterFS等。

Ceph是一个功能强大的分布式存储系统,它具有高可用性、容错性和可扩展性,适用于许多应用场景。作为一种先进的存储方式,分布式存储将在未来变得越来越流行,并成为企业数据存储的主流选择。

Ceph是一个自由的分布式存储系统,提供了对象、块和文件系统存储,并具有高可用性和容错性。Ceph有以下几个主要优势:

  • 可扩展性:Ceph的存储集群可以轻松地进行水平扩展,通过添加新节点来增加存储容量和性能。
  • 高可用性:Ceph使用冗余机制来确保数据的高可用性。当一个节点或硬盘出现故障时,Ceph会自动重复数据,保证数据不会丢失。
  • 容错性:Ceph使用一个称为CRUSH的算法来确保数据的冗余分布。当节点出现故障时,Ceph可以自动重新平衡数据的位置,以确保数据的容错性。
  • 易于管理:Ceph提供了丰富的管理工具来监控和管理存储集群,例如ceph-deploy、ceph-disk等。管理员可以使用这些工具轻松地进行集群的部署、维护和升级。
官方地址:https://ceph.com/en
官方文档:https://docs.ceph.com/en/latest/
GitHub地址:https://github.com/ceph/ceph

Ceph简介和特性

Ceph是一个多版本存储系统,它把每一个待管理的数据流(例如一个文件)切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取。

对象数据的底层存储服务是由多个主机(host)组成的存储集群,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠、自动化、分布式对象存储系统。

librados是RADOS存储集群的API,它支持C、C++、Java、Python、Ruby和PHP等编程语言。

Ceph通过内部的crush机制,实时方式计算出一个文件应该存储到哪个存储对象里面,从而实现快速查找对象的一种方式。

为什么Ceph这么火?

功能强大:Ceph能够同时提供对象存储,块存储和文件系统存储三种存储服务的统一存储架构

可扩展性:Ceph得以摒弃了传统的集中式数据寻址方案,通过Crush算法的寻址操作,有相当强大的扩展性。

高可用性:Ceph数据副本数量可以由管理员自行定义,并可以通过Crush算法指定副本的物理存储位置以分隔故障域,支持数据强一致性的特性也使Ceph具有了高可靠性,可以忍受多种故障场景并自动尝试并行修复。

RadosGW、RDB和CephFS都是RADOS存储服务的客户端,它们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象,因而各自适用于不同的应用场景。

也就是说,Ceph将三种存储类型统一在一个平台中,从而实现了更强大的适用性。

librados - 通过自编程方式实现数据的存储能力
radosgw - 通过标准的RestFul接口,提供一种云存储服务
rbd - 将cept提供的空间,模拟成一个个的独立块设备。当ceph部署完成,服务端就准备好rbd接口
cfs - 通过一个标准的文件系统接口来进行数据的存储

Ceph组件

无论是想向平台提供Ceph对象存储和Ceph块设备服务、部署Ceph文件系统,或者是将Ceph用于其他目的,所有的Ceph存储集群部署都从设置每个Ceph节点网络开始。

一个Ceph存储集群至少需要一个Ceph Monitor、Ceph Manager和Ceph OSD(object storage daemon对象存储守护进程)。此外如果有运行Ceph文件系统的客户端,还需要配置Ceph元数据服务器。

Ceph网络模型

Ceph的网络模型是非常灵活和可扩展的,并且能够适应不同的应用场景。它允许用户自由选择不同的网络协议,以及对存储节点进行扩容和缩容等操作,从而实现更好的性能和可靠性。

Ceph采用CRUSH算法,实现数据划分及分布式的动态负载均衡。在Ceph的网络模型中,客户端通过Ceph的RADOS Gateway(RGW)或者Ceph FS接口访问Ceph集群中的对象存储和文件系统。而Ceph OSD Daemon则实际上负责管理和存储存储集群中的对象数据和元数据。

在Ceph网络模型中,客户端与存储集群之间的通信是通过Ceph提供的网络协议完成的。Ceph支持多种网络协议,包括TCP/IP、InfiniBand、RoCE等,这让用户可以根据不同的应用场景配置不同的网络协议以获得更好的性能和可靠性。

当客户端发起请求时,该请求会先被发送到Ceph Monitor进程,由它来管理集群的状态和负载,并将请求路由到适当的Ceph OSD Daemon上。Ceph OSD Daemon负责处理读写请求,将数据读取或写入存储设备中,并返回响应给客户端。

Ceph版本

每个Ceph版本都有一个英文名称和一个数字形式的版本编号。其中,英文名称是以字母顺序逐渐递增的方式命名的。以下是Ceph各个版本的英文名称及其数字形式的版本编号:

  1. Ceph v0.80 Firefly
  2. Ceph v0.87 Giant
  3. Ceph v0.89 Hammer
  4. Ceph v0.94 Infernalis
  5. Ceph v10.2 Jewel
  6. Ceph v10.2.3 Jewel Update 3
  7. Ceph v11.0 Kraken
  8. Ceph v12.0 Luminous
  9. Ceph v12.2 Luminous
  10. Ceph v13.0 Mimic
  11. Ceph v14.0 Nautilus
  12. Ceph v15.0 Octopus
  13. Ceph v16.0 Pacific
  14. Ceph v17.0 Quincy

数字形式的版本编号包括主版本号、次版本号和修订版本号。例如,Ceph v14.2中的14表示主版本号,2表示次版本号,而两者之间的小数点后面则是修订版本号。通常来说,主版本号表示Ceph的重大更新,次版本号表示增量更新,而修订版本号则表示缺陷修复或紧急补丁。

可以在这里看到Ceph的历史版本

https://docs.ceph.com/en/latest/releases/

Ceph集群部署方法介绍

在Ceph集群的部署中,有很多种不同的方式可以选择,下面对各种方式进行简要的特点分析:

  1. Cephadm:使用容器和systemd安装和管理Ceph集群,并与SL和仪表板GUI紧密集成,支持Octopus以后的新版本,是当前官方推荐的部署方式。
  2. ceph-deploy:一个基于Python实现流行的快速部署集群的工具,但从Nautilus版后不再支持和测试,不建议使用此工具安装Nautilus之前旧版本。
  3. Rook:在Kubernetes中运行的Ceph集群,同时还支持通过Kubernetes API管理存储资源和配置,只支持Nautilus以后的新版本,此工具不支持较新的OS。
  4. cephansible、ceph-salt、cephmon:使用Ansible、Salt等工具部署和管理Ceph集群,应用广泛,但从Nautilus和Octopus版开始没有集成对应的API,因此一些较新的管理功能和仪表板集成不可用。
  5. Puppet:通过Puppet进行Ceph集群的自动化部署,较为灵活,但需要一定的Puppet技能。
  6. 二进制:手动安装需要较高的技术水平和经验,但也较为灵活,能够更好地满足复杂的部署需求。
  7. Windows图形:在Windows主机上通过图形操作就可以进行Ceph集群的部署,适用于不熟悉命令行或Linux的用户。

不同的部署方式具有不同的特点和优缺点,在选择时需要根据实际情况进行权衡和考虑。

Ceph的集群环境规划和部署,后续文章再写,各位看官持续关注。

相关推荐

得物可观测平台架构升级:基于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编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...