ceph存储-《深入理解ceph架构》(ceph存储的优势)

ceph存储-《深入理解ceph架构》(ceph存储的优势)是一个可靠地 自动重均衡 自动恢复的分布式存储系统 根据场景划分可以将 分为三大块 分别是对象存储 块设备存储和文件系统服务 在虚拟化领域里 比较常用到的是 的块设备存储 比如在 OpenStack 项目里 Ceph 的块设备存储可以对接 OpenStack 的 Cinder 后端存储 Glance 的镜像存储和虚拟机的数据存储 比较直观的是

大家好,我是讯享网,很高兴认识大家。



是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将 分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是 的块设备存储,比如在 OpenStack 项目里,Ceph 的块设备存储可以对接 OpenStack 的 Cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是 集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

Ceph的核心组件包括Ceph OSD、Ceph Monitor、Ceph Manager和Ceph MDS。

  • Ceph OSD

OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,并通过检查其他Ceph OSD守护程序的心跳来向 Ceph 监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。

Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成,对于Ceph OSD Deamon而言,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS。

伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,都是先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统,这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载。

  • Ceph Monitor

Monitor 负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。

  • Ceph Manager

在一个主机上运行的一个守护进程,Ceph Manager 守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护程序还托管基于Python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph仪表板和REST API。高可用性通常至少需要两个管理器。

  • Ceph MDS

全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。

ceph存储-《深入理解ceph架构》 ceph的存储类型_文件系统
讯享网

  • Ceph最底层的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠、智能、分布式等特性,Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的,用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。RADOS系统主要由两部分组成,分别是OSD和Monitor。
  • 基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。基于LIBRADOS层开发的又可以看到有三层,分别是RADOSGW、RBD和CEPH FS。
  • RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift。
  • RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。
  • CEPHFS则提供了POSIX接口,用户可直接通过客户端挂载使用。它是内核态的程序,所以无需调用用户空间的librados库。它通过内核中的net模块来与Rados进行交互。

ceph存储-《深入理解ceph架构》 ceph的存储类型_文件系统_02

Ceph 的读/写操作采用Primary-Replica模型,客户端只向文件对象Object所对应OSD set的Primary OSD发起读/写请求,这保证了数据的强一致性。当Primary OSD收到Object的写请求时,它负责把数据发送给其他副本,只有这个数据被保存在所有的OSD上时,Primary OSD才应答文件对象Object的写请求,这保证了副本的一致性。这点和Kafka中读写数据方式有点类似。

  • 写入数据

第一步:计算文件到对象的映射。假设客户端要存储一个文件,首先得到文件的oid,oid(object id) = ino + ono,即inode序列号(文件的元数据序列号)加上object序列号(文件分块时生成的对象序列号)。Ceph 底层存储是分块存储的,默认以 4M 切分一个块大小。

第二步:通过 hash 算法计算出文件对应的 pool 中的 PG:通过一致性 HASH 计算 Object 到 PG, Object -> PG 映射 hash(oid) & mask-> pgid。

第三步:通过 CRUSH 把对象映射到PG中的OSD。通过 CRUSH 算法计算 PG 到 OSD,PG -> OSD 映射:[CRUSH(pgid)->(osd1,osd2,osd3)]。

第四步:PG 中的主 OSD 将对象写入到硬盘。

第五步: 主 OSD 将数据同步给备份 OSD,并等待备份 OSD 返回确认。

第六步: 主 OSD 将写入完成返回给客户端。

  • 读取数据

如果需要读取数据,客户端只需完成同样的寻址过程,并直接和主 OSD联系。在目前的Ceph设计中,被读取的数据默认由Primary OSD提供,但也可以设置允许从其他OSD中获取,以分散读取压力从而提高性能。

网卡配置

初始化步骤

5.4.1 安装 ceph-mon

5.4.2 分发 ceph 密钥

目前我们安装了一个 ceph-mon,现在看下结果

5.4.3 安装 ceph-mgr

ceph 的 Luminious 及以上版本有 manager 节点,早期的版本没有。

部署 ceph-mgr 节点

5.4.4 安装 ceph-osd

在添加 osd 之前, 对 osd node 节点安装基本环境初始化

存储节点等于在存储节点安装了 ceph 及 ceph-rodsgw 安装包,但是使用默认的官方仓库会因为网络原因导致初始化超时,因此各存储节点推荐修改 ceph 仓库为阿里或者清华等国内的镜像源。

此过程会在指定的 ceph osd node 节点按照串行的方式逐个服务器安装 ceph 源并安装 ceph、ceph-radosgw

列出远端存储 node 节点的磁盘信息

使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 数据磁盘:

擦除剩余节点的磁盘

添加 osd

查看结果

5.4.5 ceph-mon 服务高可用

5.4.6 ceph-mgr 服务高可用

目前部署了1台,我们再部署1台,共两台

假如有一块盘坏掉了,那我们如何移出它呢?Ceph 集群中的一个 OSD 是一个 node 节点的服务进程且对应于一个物理磁盘设备,是一个 专用的守护进程。在某 OSD 设备出现故障,或管理员出于管理之需确实要移除特定的 OSD 设备时,需要先停止相关的守护进程,而后再进行移除操作。

修复osd

存取数据时,客户端必须首先连接至 RADOS 集群上某存储池,然后根据对象名称由相关的 CRUSH 规则完成数据对象寻址。为了测试集群的数据存取功能,这里首先创建一个用于测试的存储池 mypool,并设定其 PG 数量为 32 个

在集群中删除一个 pool时,注意删除 pool后,其映射的 image 会直接被删除,线上操作要谨慎,删除时存储池的名字需要重复两次

RBD(RADOS Block Devices)即为块存储的一种,RBD 通过 librbd 库与 OSD 进行交互,RBD 为 KVM 等虚拟化技术和云服务(如 OpenStack 和 CloudStack)提供高性能和无限可扩展性的存储后端,这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成,客户端基于librbd 库即可将 RADOS 存储集群用作块设备,不过,用于 rbd 的存储池需要事先启用 rbd 功能并进行初始化。例如,下面的命令创建一个名为 myrbd1 的存储池,并在启用 rbd 功能后对其进行初始化:

  • 创建RDB
  • 创建映像

rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用,rbd 命令可用于创建、查看及删除块设备所在的映像(image),以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作。

  • 验证块设备

https://www.huaweicloud.com/articles/25d293d7b10848aff6f67861d6458fbd.html

https://zhuanlan.zhihu.com/p/

小讯
上一篇 2025-06-07 10:01
下一篇 2025-05-01 20:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/167270.html