编程技术分享平台

网站首页 > 技术教程 正文

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

xnh888 2025-01-20 17:24:11 技术教程 162 ℃ 0 评论



简介

随着数据量的不断增加,传统的存储方式已经无法满足复杂应用场景下的存储需求。传统的存储类型一般包括本地磁盘、网络存储(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的集群环境规划和部署,后续文章再写,各位看官持续关注。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表