Ceph基础概述

  Ceph是一个对象式存储系统,所谓对象式存储是指它把每一个待管理的数据流(比如一个文件)切分成一到多个固定大小的对象数据,并以其为原子单元完成数据的存取;对象数据的底层存储服务由多个主机组成的存储集群;该集群被称之为RADOS(Reliable Automatic Distributed Object Store)集群;翻译成中文就是可靠的、自动化分布式对象存储系统;

  Ceph架构

  提示:librados是RADOS存储集群的API,它支持C、C++、java、python和php等变成语言;RADOSGW、RBD、CEPHFS都是RADOS存储服务的客户接口;它们分别把rados存储服务接口librados从不同角度做了进一步的抽象,因而各自适用于不同的应用场景;RADOSGW是将底层rados存储服务抽象为以RESTful风格接口提供对象存储服务,适用于存取对象数据的接口,比如web服务;RBD是将底层RADOS存储服务抽象为块设备的存储设备;主要用于虚拟化,比如给虚拟机提供硬盘;CEPHFS是将底层RADOS抽象为一个文件系统接口,供其他主机使用;

  提示:RADOS集群主要由Monitors、Managers、Ceph OSDs、Ceph MDSs这几个组件组成;其中Monitor主要作用是监控整个集群的状态,健康与否等;它拥有整个集群的运行图(monitor map、manager map、OSD map、和CRUSH map);除此之外,它还负责维护集群各组件之间以及客户端接入RADOS集群存取数据时的认证信息和实行认证;简单讲mon组件就是管理和维护其他组件状态以及接入RADOS集群的认证信息并实行认证,一旦mon组件所在主机宕机,那么整个集群将不可用;有点类似k8s里的etcd;所以为实现冗余和高可用性,通常在集群我们部署大于1的奇数个mon(因为它使用Paxos协议,为防止网络分区等原因,保证服务的正常可用);manager组件主要负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载等,Ceph集群信息,包括基于web的Ceph管理器仪表板和REST API。高可用性通常需要至少两个mgr组件。OSD组件是存储数据,处理数据复制、恢复、再平衡,并提供一些监视信息的组件;Ceph通过检查其他Ceph OSD进程来监控和管理心跳;通常为了高可用和冗余,至少需要3个ceph osd(即3块硬盘,ceph为了每一个osd能够被单独使用和管理,每一个osd都会有一个单独的守护进程ceph-osd来管理,即服务器上有多少个osd,就会有多少个ceph-osd进程,一个ceph-osd进程就对应一个osd,一个osd就对应一块磁盘设备);MDS是ceph元数据服务组件,主要实现分布式文件系统的控制层面,数据和元数据的存取依然由RADOS负责,即用户使用cephfs文件系统存取数据,用户存储的文件的元数据该怎么存放、怎么管理等都由MDS组件负责;当然如果我们没有使用cephfs文件系统的必要,对应mds组件也可以不用部署;所以mds组件不是必须组件;

  Ceph数据抽象接口(客户端中间层)

  Ceph存储集群提供了基础的对象数据存储服务,客户端可基于RADOS协议和librados API直接与存储系统交互进行对象数据存取; librados提供了访问RADOS存储集群支持异步通信的API接口,支持对集群中对象数据的直接并行访问,用户可通过支持的编程语言开发自定义客户端程序通过RADOS协议与存储系统进行交互;客户端应用程序必须与librados绑定方可连接到RADOS存储集群,因此,用户必须事先安装librados及其依赖后才能编写使用librados的应用程序; librados API本身是用C ++编写的,它额外支持C、Python、Java和PHP等开发接口;当然,并非所有用户都有能力自定义开发接口以接入RADOS存储集群的需要,为此,Ceph也原生提供了几个较高级别的客户端接口,它们分别是RADOS GateWay(RGW)、ReliableBlock Device(RBD)和MDS(MetaData Server),分别为用户提供RESTful、块和POSIX文件系统接口;

  Ceph文件系统

  不同于传统文件系统的地方是,CephFS MDS在设计的初衷之一即高度可扩展的能力,其实现机制中,数据由客户端以分布式方式通过多路OSD直接存储于RADOS系统,而元数据则由MDS组织管理后仍然存储于RADOS系统之上; MDS仅是实现了分布式文件系统的控制平面,数据和元数据的存取依然由RADOS负责;CephFS依赖于独立运行的守护进程ceph-mds向客户端提供服务;

  Ceph块设备

  存储领域中,“块(block)”是进行数据存取的主要形式,块设备也于是成为了主流的设备形式,因此,RBD虚拟块设备也就成了Ceph之上广为人知及非常受欢迎的访问接口;RBD的服务接口无须依赖于特定的守护进程,只要客户端主机有对应内核模块librbd,就可以通过ceph RBD 接口使用;

  Ceph对象网关

  Ceph对象网关是一个建立在librados之上的对象存储接口为应用程序提供的Ceph存储集群的RESTful网关。Ceph对象存储支持两个接口s3和Swift;Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是一个HTTP服务器,用于与Ceph存储集群交互;RGW依赖于在RADOS集群基础上独立运行的守护进程(ceph-radosgw)基于http或https协议提供相关的API服务,不过,通常仅在需要以REST对象形式存取数据时才部署RGW;

  管理节点(admin host)

  Ceph的常用管理接口是一组命令行工具程序,例如rados、ceph、rbd等命令,管理员可以从某个特定的MON节点执行管理操作,但也有人更倾向于使用专用的管理节点;事实上,专用的管理节点有助于在Ceph相关的程序升级或硬件维护期间为管理员提供一个完整的、独立的并隔离于存储集群之外的操作环境,从而避免因重启或意外中断而导致维护操作异常中断;

  存储池、PG(Placement Group)和OSD(Object Store Device)之间的关系

  提示:存储在Ceph存储系统之上的数据,都会先由Ceph将对应数据切分等额大小的对象数据,然后将这些数据存储到对应的存储池中;存储池主要作用是向外界展示集群的逻辑分区;对于每个存储池,我们可以定义一组规则,比如每个对象数据需要有多少个副本存在;PG是Placement Group的缩写,归置组;它是一个虚拟的概念,主要作用是用于将对象数据映射到osd上而存在的,对象数据具体通过那个pg存放在那个osd上,这个是根据ceph的crush算法动态映射的;我们可以理解为根据存储池中PG的数量,结合一致性hash将对象数据动态映射至PG上,然后PG根据osd数量结合一致性hash动态映射到不同的磁盘上;我们在创建存储池的时候就必须指定一定数量的PG;如上图所示,我们将数据存储到存储池B中,那么对应数据就会根据存储池B中的规则进行存储,即3个副本;在存储池B中只有2个归置组,两个归置组分别对应了不同的OSD;如果将数据存储到PG3上,那么对应数据就会在osd2\6\7分别存储一份以做备份;如果将数据存储到PG4上,这对应数据就会被分发到osd3\4\9上进行存储;

  File Store  和 Blue Store

  什么是file store呢?file store是传统ceph存储对象的方法,它依赖于xfs文件系统(ext4有bug和缺陷,会导致数据丢失,所以ceph只支持xfs上使用file store);通过上述的描述,我们知道ceph不管是什么客户端提交的对象数据,最终都会存储到osd所在主机的硬盘上;那么问题来了,osd所在主机的磁盘是怎么被osd管理的呢?传统ceph是将对应磁盘格式化分区挂载在osd所在主机的文件系统,被osd所在主机以一个目录的形式表示;即用户存储的对象数据,最后会被存放为一个文件的形式存放在osd所在主机的磁盘上;这也意味着我们需要存放文件本身的元数据和数据;除此之外对象本身也有数据和元数据,那么对象本身的数据和元数据是怎么存放的呢?file store是是将对象的元数据存放在leveldb(早期ceph版本)中,数据存放在文件系统的数据区;简单讲file store就是将对象的元数据存放在leveldb中,数据存放在osd所在主机的文件系统的数据区中,中间有文件系统做转换的过程;而blue store将osd所在主机的磁盘不格式化分区,而是直接用裸设备硬盘被osd识别和管理;在osd所在主机对应osd进程会将自己管理的磁盘中一小部分格式化为bluefs文件系统,用于安装使用rocksdb;即客户端提交的对象数据,对象本身的元数据会被存放在rocksdb中,数据会被直接存放在磁盘上(由osd进程直接管理数据格式等,不会存放为文件);rocksdb为了管理它自己本身的数据持久化,它也会维护一个日志文件,类似redis的aof;这样一来blue store的方式存储对象数据,在磁盘上就会存在三种数据,第一种是对象本身的数据,第二种是对象的元数据,第三种就是rocksdb的日志文件;ceph为了使存储的数据更高效,它支持将blue store方式的三种数据分别存放不同的磁盘,如下图

  提示:如果是单块硬盘,那没得说三种数据直接存入到一块磁盘上;如果是两块磁盘,我们可以将blue store的日志数据和对象元数据存放在一个高性能的磁盘上,如nvme,ssd上,将对象数据存放在一个大的机械硬盘上;当然也可以将blue store的日志文件存放在高性能磁盘上,对象的元数据和数据存放在机械硬盘上;如果有三块硬盘,我们可以将blue store的日志数据存放在高性能磁盘上,比如512M的nvme的磁盘;使用1G或2G的ssd来存储对象的元数据;用机械硬盘来存储对象数据;

分布式存储系统之Ceph基础的更多相关文章

  1. 分布式存储系统之Ceph集群CephX认证和授权

    前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html:今天我们来聊一聊在ceph上认证和授权的 ...

  2. 分布式存储系统之Ceph集群RBD基础使用

    前文我们了解了Ceph集群cephx认证和授权相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16748149.html:今天我们来聊一聊ceph集群的 ...

  3. 分布式存储系统之Ceph集群RadosGW基础使用

    前文我们了解了MDS扩展相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16759585.html:今天我们来聊一聊RadosGW的基础使用相关话题: ...

  4. 分布式存储系统之Ceph集群CephFS基础使用

    前文我们了解了ceph之上的RBD接口使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16753098.html:今天我们来聊一聊ceph之上的另一 ...

  5. 分布式存储系统之Ceph集群启用Dashboard及使用Prometheus监控Ceph

    前文我们了解了Ceph之上的RadosGW基础使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16768998.html:今天我们来聊一聊Ceph启 ...

  6. 分布式存储系统之Ceph集群部署

    前文我们了解了Ceph的基础架构和相关组件的介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16720234.html:今天我们来部署一个ceph集群: 部 ...

  7. 分布式存储系统之Ceph集群MDS扩展

    前文我们了解了cephfs使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16758866.html:今天我们来聊一聊MDS组件扩展相关话题: 我们 ...

  8. 分布式存储系统之Ceph集群访问接口启用

    前文我们使用ceph-deploy工具简单拉起了ceph底层存储集群RADOS,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16724473.html:今天我 ...

  9. 分布式存储系统之Ceph集群状态获取及ceph配置文件说明

    前文我们了解了Ceph的访问接口的启用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16727620.html:今天我们来聊一聊获取ceph集群状态和 ...

随机推荐

  1. 基于cornerstone.js的dicom医学影像查看浏览功能

    最近由于项目需求,需要医学影像.dcm文件的预览功能,功能完成后,基于原生Demo做一个开源分享. 心急的小伙伴可以先看如下基于原生js的全部代码: 一.全部代码 <!DOCTYPE html& ...

  2. 基于gitlab 15.1 pages 搭建内部博客一定行版本

    背景 基于 gitlab 15.1版 pages 搭建内部博客,参考官方文档,遇到一个又一个坑.之前看到别人吐槽说 gitlab 官方文档很差,我算是理解了.下面一个个说. 开始 按照官方文档的说法, ...

  3. CentOS 定时计划任务设置

    一.安装crontab服务并设置开机自启 yum install crontabs (centos默认就会带,一般不需要安装) systemctl enable crond (设为开机启动) syst ...

  4. rust中的ref

    理解Rust的引用与借用(好文链接) #![feature(core_intrinsics)] fn print_type_of<T>(_: T) { println!("{}& ...

  5. .NET 跨平台应用开发动手教程 |用 Uno Platform 构建一个 Kanban-style Todo App

    作者:Steven Giesel 翻译:Alan Wang 校对:李卫涵 – 微软 MVP 排版:Rani Sun 有什么比参考包含分步说明和代码示例的动手教程更好的学习新技术的方式呢?当你完成或 f ...

  6. 基于WPF重复造轮子,写一款数据库文档管理工具(一)

    项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...

  7. Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_207 曾几何时,SVG(Scalable Vector Graphics)矢量动画图被坊间称之为一种被浏览器诅咒的技术,只因为糟糕 ...

  8. gitlab root密码重置

    版本:Gitlab Ruby Gem 4.16.1 root密码在gitlab第一次运行的时候,如果你没有配置root用户的密码文件,它就会生成一个随机密码,并保存在固定的文件中,然后输出在屏幕上.但 ...

  9. SQL Server查询优化

    从上至下优化 看过一篇文章,印象深刻,里面将数据库查询优化分为四个大的方向 使用钞能力--给DB服务器加物理配置,内存啊,CPU啊,硬盘啊,全上顶配 替换存储系统--根据实际的业务情况选择不同的存储数 ...

  10. MySQL查询性能优化七种武器之索引潜水

    有读者可能会一脸懵逼? 啥是索引潜水? 你给起的名字的吗?有没有索引蛙泳? 这个名字还真不是我起的,今天要讲的知识点就叫索引潜水(Index dive). 先要从一件怪事说起: 我先造点数据复现一下问 ...