目录
概述
多爪鱼(Ceph)是一个开源软件存储平台,实现了在一个统一的分布式计算机集群上的对象存储,并提供三合一的接口,用于对象级、块级和文件级的存储。多爪鱼(Ceph)的主要目标是:
- 进行完全的分布式运营而不用担心单节点的失效
- 可以扩展到EB级别(百万TB)
- 可以自由使用
多爪鱼(Ceph)会复制数据,并使其具有差错容忍性,使用通用硬件(commodity hardware)并且不要求任何特殊的硬件支持。它被设计为可自愈的(self-healing)和可自管理的(self-managing),目标是最小化管理时间和其他花费。
多爪鱼(Ceph)的编写语言是C++和派森(Python)。
系统设计
多爪鱼(Ceph)使用了5个完全不同类型的守护进程(daemon):
- 集群监视器(ceph-mon):持续追踪活跃的和失效的集群节点、集群配置,以及关于数据存放位置的信息,还有全局集群状态
- 对象存储设备(ceph-osd):使用一个直接的、日志磁盘存储(被称为“蓝存”——BlueStore,它从12.x版本开始替代了底层使用文件系统的FileStore)
- 元数据服务器(ceph-mds):缓存和代理对CephFS文件系统内的索引节点号(inodes)和目录的访问
- HTTP网关(ceph-rgw):向对象存储层暴露为一个接口,与亚马逊S3或开放栈(OpenStack)的雨燕(Swift)API兼容
- 管理器(ceph-mgr):实现集群监视、记账(bookkeeping)、维护任务,向外部管理和监视系统提供接口,例如:负载均衡器(Load Balancer)、监控仪表界面(Dashboard)、Prometheus、Zabbix插件。
所有这些都是完全分布式的,并且可以运行在同一个服务器集合中。而具有不同需求的客户端则可以直接与它们中的不同子集进行交互。
- 条带化(striping):多爪鱼(Ceph)会对单个文件进行跨越多个节点的条带化(striping),以获得更高的吞吐量,与RAID0跨越多个硬盘的条带化分区类似。
- 负载均衡(Load Balancing):最常被访问的对象会被复制到更多的节点上。
- 物理存储管理
- 蓝储(BlueStore)。截至2017年9月,蓝储是默认的、也是推荐的用于生产环境的存储类型,它是多爪鱼(Ceph)自有的存储实现,提供比Filestore更好的时延性和可配置性,同时避免了基于文件系统的存储在附加处理和缓存层上的短板
- 文储(Filestore)。Filestore后台仍然被认为是有效和非常稳定的。
- 文件系统(Filesystem)。XFS曾经是推荐的、用于生产环境的底层文件系统类型,而Btrfs则被推荐用于非生产环境。ext4文件系统是不推荐的,因为它对最大的RADOS对象长度存在限制。即使使用蓝存(BlueStore),XFS也被用于一个小型的元数据分区
对象存储
多爪鱼(Ceph)实现了分布式对象存储“蓝储”(BlueStore)。多爪鱼(Ceph)的软件库提供了客户端应用程序,它可以直接访问“可靠原子分布式对象存储”(RADOS)这个基于对象的存储系统,同时为一些多爪鱼(Ceph)的功能提供一个基础,包括:
- RADOS块设备(RBD)
- RADOS网关
- 多爪鱼(Ceph)文件系统
librados软件库提供C、C++、爪哇(Java)、PHP和派森(Python)的访问接口。RADOS网关同时将对象存储对外暴露为一个RESTful接口,它既可以呈现为本地的亚马逊S3接口,也可以呈现为开放栈(OpenStack)雨燕(Swift)API。
块存储
多爪鱼(Ceph)的对象存储系统允许用户将多爪鱼(Ceph)挂载为一个“瘦提供”块设备。当一个应用程序使用一个块设备向多爪鱼(Ceph)写入数据的时候,多爪鱼(Ceph)会自动将数据横跨集群进行条带化和复制。多爪鱼(Ceph)的RADOS块设备(RBD)同时还会与KVM虚拟机进行集成。
多爪鱼(Ceph)RBD与相同的多爪鱼(Ceph)对象存储系统对接,这个提供提供librados接口,以及CephFS文件系统,并将块设备映像存储为对象。因为RBD是构建在librados之上的,因此RBD继承了librados的能力,包括只读快照,以及回退到快照。通过横跨集群地对映像进行条带化,Ceph为大尺寸块设备映像提升了读访问的性能。
块设备可以被虚拟化,向虚拟机提供块存储,可以在很多虚拟化平台上实现,包括:
- 阿帕奇的云栈(Apache CloudStack)
- 开放栈(OpenStack)
- 开放星云(OpenNebula)
- 加内特(Ganeti)
- 普罗克斯摩克斯虚拟环境(Proxmox Virtual Environment)
文件系统
多爪鱼(Ceph)的文件系统被称为“多爪鱼FS”(CephFS),它是运行在下层的对象存储系统之上的,这个下层系统提供对象存储和块设备接口。多爪鱼(Ceph)元数据服务器集群会提供一个服务,它将文件系统的目录和文件名,映射到存储在RADOS集群中的对象。这个元数据服务器集群可以扩展或收缩,它也可以对文件系统进行重新“平衡”,从而动态地将数据均匀分布到集群中的各个主机。这确保了高性能,并防止了集群中特定节点的高负载。
客户端使用一个Linux内核客户端来挂载POSIX兼容的文件系统。一个更早期的基于FUSE的客户端也可以使用。这些服务器就像普通Unix守护进程一样运行。
名词
CMDS:Ceph Matadata Daemon,多爪鱼(Ceph)元数据守护进程
COSD:Ceph Opject Storage Daemon,多爪鱼(Ceph)对象存储守护进程
CMON:Ceph Monitor,多爪鱼(Ceph)监视器
RADOS:Reliable Autonomic Distributed Ojbect Store,可靠自动分布式对象存储
RBD:RADOS Block Device,RADOS块设备
BTRFS:B-Tree File System,B-树文件系统
历史
美国人赛奇·威尔(Sage Weil)最初是为他的博士毕业论文,在加州大学圣克鲁兹分校(UCSC)杰克·巴斯金工程学院(Jack Baskin School)的斯科特·A·布兰迪教授(Professor Scott A. Brandt)的建议下,创建了多爪鱼(Ceph),并得到了先进模拟和计算项目(Advanced Simulation and Computing Program,简称ASC)的资助,该项目成员包括:
- 洛斯阿拉莫斯国家实验室(LANL)
- 桑迪亚国家实验室(SNL)
- 劳伦斯利弗莫尔国家实验室(LLNL)
多爪鱼(Ceph)的第一行代码由赛奇·威尔(Sage Weil)在2004年写下,当时他在LLNL做夏季实习生,承担关于可伸缩文件系统元数据管理方面的工作——今天被称为多爪鱼(Ceph)MDS。在2005年,作为斯科特·A·布兰迪(Scott A. Brandt)所发起的、卡洛斯·马尔扎恩(Carlos Maltzahn)所领导的夏季项目的一部分,赛奇·威尔(Sage Weil)创建了一个具有完全功能的文件系统原型,采用了多爪鱼(Ceph)作为其名称。多爪鱼(Ceph)在赛奇·威尔于2006年11月所做的两场演示中初次亮相,一次是2006年度USENIX(UNIX用户群)OSDI(操作系统设计与实现座谈会),另一次则是在SC(超算大会,现更名为高性能计算、组网、存储和分析国际大会)。
在他于2007年秋季毕业以后,威尔继续全职投入多爪鱼(Ceph)的工作,而核心开发团队则进一步扩展,吸纳了犹大·萨迪·韦因拉布和格里高利·法那姆。2010年03月19日,林纳斯·托瓦兹(Linus Torvalds)将Ceph客户端合入到Linux内核版本2.6.34中,并与2010年05月16日发布。2012年,威尔创建了墨水柜存储(Inktank Storage),来为Ceph提供专业服务和支持。
2014年04月,红帽公司收购了墨水柜(Inktank),使得多爪鱼(Ceph)的大部分工作都变成内部开发。
2015年10月,多爪鱼(Ceph)社区咨询委员会成立,目的是在驱动开源的软件定义存储技术方面,帮助社区。宪章咨询委员会包括来全球的、对多爪鱼(Ceph)项目有承诺义务的IT组织的多爪鱼(Ceph)社区成员,包括来自这些组织的个人:
- 科能软件(Canonical)
- 欧洲核研究组织(CERN)
- 思科(Cisco)
- 富士通(Fujitsu)
- 英特尔(Intel)
- 红帽(Red Hat)
- 闪迪(SanDisk)
- 苏泽(Suse)
版本发布历史
名称 | 中文含义 | 版本号 | 发布时间 | 结束维护日 | 里程碑 |
Argonaut | 船蛸 | 0.48 | 2012年07月03日 | 首个主要的“稳定”发行版 | |
Bobtail | 短尾巴 | 0.56 | 2013年01月01日 | ||
Cuttlefish | 乌贼 | 0.61 | 2013年05月07日 | ceph-deploy组件发布稳定版 | |
Dumpling | 包馅面皮 | 0.67 | 2013年08月14日 | 2015年05月 | 命名空间、区域,以及监视REST API |
Emperor | 皇帝 | 0.72 | 2013年11月09日 | 2014年05月 | 用于radosgw(可靠自动分布式对象存储网关)的多数据中心复制 |
Firefly | 萤火虫 | 0.80 | 2014年05月07日 | 2016年04月 | 擦除式编码、缓存分层、主节点亲密、键/值OSD(对象存储设备)后台(体验版)、独立radosgw(体验版) |
Giant | 巨人 | 0.87 | 2014年10月29日 | 2015年04月 | |
Hammer | 锤子 | 0.94 | 2015年04月07日 | 2017年08月 | |
Infernalis | 蛸 | 9.2.0 | 2015年11月06日 | 2016年04月 | |
Jewel | 珠宝 | 10.2.0 | 2016年04月21日 | 2018年06月01日 | 稳定的CephFS,体验版RADOS后台被命名为“蓝存”(BludStore) |
Kraken | 海妖 | 11.2.0 | 2017年01月20日 | 2017年08月01日 | “蓝存”发布稳定版 |
Luminous | 发光 | 12.2.0 | 2017年08月29日 | ||
Mimic | 模仿 | 13.2.0 | 2018年06月01日 | 快照模块发布稳定版,Beast模块发布稳定版 | |
Nautilus | 鹦鹉螺 | 14.2.0 | 2019年03月19日 | ||
Octopus | 章鱼 | 15.2.0 | 2020年03月23日 |
名称来源
多爪鱼(Ceph)是cephalopod(头足类动物/头足纲,包括章鱼、鱿鱼、乌贼等)的简称,它是软体动物门(如蜗牛、螺蛳)下面的一个纲。这个名称(包括它的logo)表示它的高并发行为,就像章鱼一样。而叫这个名称,也是为了和赛米(Sammy)文件系统关联,赛米(Sammy)是加州大学圣克鲁兹分校(UCSC)的吉祥物香蕉鼻涕虫(banana slug)的名字。