Ceph理论详解 (一)
分布式存储简介
分布式存储的数据分为数据和元数据,元数据即是文件的属性信息(文件名、权限(属主、属组)、大小、时间戳等),在分布式存储中当客户端或者应用程序产生的客户端数据被写入到分布式存储系统的时候,会有一个服务(Name Node)提供文件元数据的路由功能,告诉应用程序去哪个服务器去请求文件内容,然后再有(Data Node)提供数据的读写请求及数据的高可用功能。
1. Ceph 概述
Ceph 是一个开源的分布式存储系统,同时支持对象存储、块设备、文件系统。
Ceph 是一个对象(object)式存储系统,它把每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认 4 兆)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。
对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为RADOS(reliable automatic distributed obiect store)存储集群,即可靠的、自动化的、分布式的对象存储系统。
LibRADOS 是 RADOS 存储集群的 API,支持 C/C++/JAVA/python/ruby/php 等编程语言客户端。
如果每台服务器上有4块磁盘,那么就会自动启动四个OSD进程。并且一块磁盘可以用于多个OSD存储池。
为何要用Ceph?
- 高性能 :
-
摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
-
考虑了容灾的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
-
能够支持上千个存储节点的规模,支持TB到PB级的数据。
- 高可用 :
-
副本数可以灵活控制
-
支持故障域分隔,数据强一直性
-
多故障场景 自动进行修复自愈
-
没有单点故障,自动管理,高可扩展性
- 去中心化 :
-
扩展灵活
-
随着节点增加而线性增长
- 特性丰富 :
- 支持三种存储接口 : 块存储、文件存储、对象存储
- 支持自定义接口,支持多种语言驱动。
1.1 Ceph 的发展史
Ceph 项目起源于 于2003 年在加州大学圣克鲁兹分校攻读博士期间的研究课题 (Lustre 环境中的可扩展问题)。
Lustre 是一种平行分布式文件系统,早在 1999 年,由皮特·布拉姆(Peter Braam)创建的集群文件系统公司(Cluster File Systems inc)开始研发,并于2003 年发布 Lustre 1.0 版本。
2007 年 Sage Weil(塞奇·威尔)毕业后,Sage Weil 继续全职从事 Ceph 工作 , 2010 年3月19 日,Linus Torvalds 将 Ceph 客户端合并到 2010 年5月16 日发布的 Linux 内核版本 2.6.34, 2012年Sage Weil 创建了Inktank Storage 用于为 Ceph 提供专业服务和支持,2014年4月Redhat 以1.75亿美元收购inktank 公司并开源。
1.2 Ceph 的设计思想
Ceph 的设计旨在实现以下目标:
- 每一组件皆可扩展。
- 无单点故障。
- 基于软件(而非专用设备)并且开源(无供应商锁定)在现有的廉价硬件上运行。
- 尽可能自动管理,减少用户干预。
1.3 Ceph的版本历史
Ceph 的第一个版本是 0.1,发布目期为 2008 年1月,多年来 Ceph 的版本号一直采用递归更新的方式没变直到 2015 年4月 0.941(Hammer 的第一个修正版)发布后,为了避免0.99(以及0.100 或 1.00),后期的命名方式发生了改变:
- x.0.z- 开发版 (给早期测试者和勇士们)
- x.1.z - 候选版 (用于测试集群、高手们)
- x.2.z- 稳定、修正版 (给用户们)
x将从9 算起它代表 Infernalis(首字母I是英文单词中的第九个字母),这样我们第九个发布周期的第一个开发版就是 9.0.0,后续的开发版依次是 9.0.0->9.0.1->9.0.2 等,测试版本就是9.1.0->9.1.1->9.1.2,稳定版本就是9.2.0->9.2.1->9.2.2。
2. Ceph 集群角色定义
一个Ceph集群的组成部分:
- 若干的 Ceph OSD(对象存储守护程序)
- 至少需要一个 Ceph Monitors 监视器 (1,3,5,7...)
- 两个或以上的Ceph管理器managers,运行Ceph文件系统客户端时,还需要高可用的Ceph
- Metadata Server(文件系统元数据服务器)
- RADOS cluster:由多台host 存储服务器组成的Ceph 集群
- OSD(Object Storage Daemon):每台存储服务器的磁盘组成的存储空间
- Mon(Monitor):Ceph 的监视器,维护OSD 和PG 的集群状态,一个Ceph 集群至少要有一个mon,可以是一三五 七等等这样的奇数个。
- Mgr(Manager):负责跟踪运行时指标和Ceph 集群的当前状态,包括存储利用率,当前性 能指标和系统负载等。
Ceph OSDs: Ceph OSD 守护进程 (Ceph OSD)的功能是存储数据,处理数据的复制、恢复、回填、在均衡,并通过查其OSD 守护进程的心跳来向Ceph Monitors 提供一些监控信息。当Ceph存储集群设定为2个副本时,至少需要2个OSD守护进程。这样集群才能达到 active+clean
状态(Ceph 默认有3个副本,但你可以调整副本数)。
Monitors: Ceph Monitor 维护着展示集群状态的各种图表、包括监视图、OSD图、归置组(PG)图、和CRUSH图。Ceph保存着发生在Monitors、OSD和PG上的每一次状态变更的历史记录信息(称为epoch)。
MDSs: Ceph元数据服务器(MDS)为Ceph文件系统存储元数据(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。元数据服务器使得POSIX文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
Ceph把客户端数据保存为存储池内的对象。通过使用CRUSH算法,Ceph可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个OSD守护进程持有该归置组。CRUSH算法使得Ceph存储集群能够动态地伸缩、再均衡和修复。
2.1 Monitor(Ceph-mon) Ceph 监视器
在一个主机上运行的一个守护进程,