ceph 简介
ceph 是业界目前人气最高的开源存储项目之一,关于其定义在官网是这样的:“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”
翻译一下就是:Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。这里面有两个重点,一是分布式的,关于这点我的理解是指其无中心解构和无理论上限系统规模,体现着扩展性与大规模,早在 2013 年,其在 Dreamhost 公司最大部署规模已达 3PB;二是统一的,关于存储我们明白一般有三种功能即对象存储、块存储和文件存储,而这三种功能在 ceph 上都可以做统一的交付,所以它几乎可以覆盖了绝大部分企业对存储的需求。
整体架构
从下向上看,我们基本可以把 ceph 分为三个层次(不包括上层应用),分别是:
1)RADOS(Reliable, Autonomic, Distributed Object Store)即可靠的、自动化的、分布式的对象存储,顾名思义,这是一个基础的对象存储系统,也就是说所有用户写入的数据最终是落在这里的;
2)LIBRADOS 基础库,这一层可以理解是对 RADOS 进行封装和抽象,并向上层直接提供 API,以便用户可以直接对 RADOS 进行开发,而其也支持多种开发语言,例如 C/C++/Java/Python/Ruby 和 PHP 等,需要说明的是因为 RADOS 是一个对象存储系统,因此 librados 实现的 API 也只是针对对象存储功能;
3) 高层应用接口,这一层分为三个部分:RADOSGW(RADOS Gateway)、 RBD(Reliable Block Device)和 Ceph FS(Ceph File System),其作用是在 librados 库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口,关于其介绍可以直接参见图中介绍,总而言之这三者就是向外提供对象存储、块存储和文件存储三种存储的接口.
RADOS 运行说明
了解了基础架构后我们不难发现,RADOS 其实是 ceph 的核心,而 RADOS 其实有两个重要组件分别是 OSD 和 monitor,还有一个可选组件 MDS,其中 OSD 数量一般很多 (ceph 官方推荐每个 OSD 对应一个 SATA 盘),是用来完成数据存储和维护的,monitor 则是若干个负责完成系统状态检测和维护的组件。
这里是一张对象写入的过程图,在图中每个笑脸代表一个对象,在开始写入时 Client 端会跟 Monitors 通信,获取 Cluster Maps 信息,然后通过 CRUSH 算法算出每个 Object 存储的 OSD 位置,直接与 OSD 通信,写入 Object 数据。也就是说只要有当前集群的拓扑结构,ceph 的客户端就能直接计算出文件的存储位置,直接跟 OSD 通信获取文件而不在需要询问文件位置,从而避免了单点。另外 ceph 采用了无 Master 设计,对象的复制,集群的扩容,数据的迁移,故障的检测和处理等功能由 OSD 提供, 既避免了单点失败,又提升了集群扩展性,这也为 ceph 的稳定高质提供了底层条件。
三个特性
在开头我们说 “Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统”,其实这里面隐含了三个特性:
1) 高扩展性:ceph 可以针对 OSD 和 Monitor 集群的动态可扩容,每当有新的 OSD 加入后,Monitor 集群会通过两层 Map 机制 (pool, object) -> (pool, PG) -> OSD set) 来有效的隔离了集群扩容对上层 client 的影响,总之底层 OSD 的扩展对于上层 client 来说是完全明晰的;
2) 高可靠性:针对安全问题,Ceph 会在集群中存储同一数据的多个副本,用户也可以通过自定义副本数,来保证在某些设备故障后数据还可用,对于副本存储的逻辑关系,可以在 ceph 中进行设置,达到不同主机、不同机架、甚至不同机房的互备效果,除此之外,Ceph 能自动探测到 OSD/Monitor 的故障,并自行恢复,有效减少了单设备节点的稳定性对集群的影响。
3) 高性能:Ceph 中通过文件切分和 CRUSH 算法,保证数据 chunk 分布基本均衡,同时 Ceph 的无元数据信息的设计 (CephFS 除外),保证了 Client 可以根据 cluster map,通过固定算法确定数据的位置信息,避免了单个元数据节点的性能瓶颈,可以提供非常高的并行化 IO 性能,其原因是 Client 端数据经过切分为 Objects 后,可以同时与多个 OSDs 交互,写入数据。
ceph 调优
Ceph 是一个复杂的系统,官方的默认配置能保证系统基本运行,但不一定能贴合用户实际需求,达到最大化用户物理系统性能的要求,所幸 Ceph 提供了很多的配置参数来允许用户订制自己的分布式存储系统,这意味着在赋予用户这个便利性的同时,用户可以自行调优。
我们对 ceph 物理机的配置建议大致如下:
1). 200G+内存 (保证良好的系统运行状态)
2). 32 核 Intel Xeon 处理器(保证良好的系统运行状态)
3). 1:5 的 SSD 和 SATA 配比,SSD 分区做 Journal,SATA 盘做 OSD(实践产生的最高性价比)
3). PCIE 的存储卡提供超高性能存储 Pool(性能更高)
4). 万兆网卡提供 Ceph 的 Cluster Network 通信(满足分布式存储之间的通信需求)
5). 千兆网卡提供 Ceph 的 Public Network 通信(保证性能同时降低成本)
并且结合我们的研发测试与实践,形成了适合品高云的 ceph 调优经验,基本有以下几个方面:
1). BIOS 设置(开启超线程开关,关闭节能,保证服务器的高性能与高利用率)
2). Linux 及磁盘参数调优(CPU 设置为高性能模式保证系统性能,调整内核最大 PID 限制保证进程可用,调整磁盘 IO 的调度参数以提高读取效率)
3). XFS 相关参数调优(对系统 xfs 文件系统做参数优化提高性能)
4). filestore 调整(提高对象存储强一致性的保证)
5). journal 性能优化(高性能 SSD 上做 journal 并进行参数调整,提高日志系统性能)
6). osd 相关参数调优(降低 PG 数的限制影响,使得容纳的存储 PG 数更多)
7). crushmap 优化 (给 osd 划分合理的 pools,故障域切分,降低数据丢失概率)
8). RADOSGW 的接口功能增加,(可以适应云平台的 API 接口需求,达到更好的耦合效果)
ceph 监控
ceph 是一个具备自我修复功能的高稳定平台,但这不能降低其作为一个完善的存储系统监控的必要性,因为我们不能长期依靠人工来发现问题,所以针对 ceph 品高云也有一套完善的监控系统。
首页有针对存储状态、容量、版本信息、同步状况、存储读写的监控信息;
并且可以针对 Monitor、osd、MDS、POOL 以及 PG 等进程组件进行监控,一旦发现问题,可以及时排查处理。
ceph 在品高云中的实践
ceph 是品高云支持的一种分布式存储池,针对 RADOSGW、 RBD 和 Ceph FS 三种都会有很好的支持,而就目前技术成熟度来看,其中块存储 RBD 是最为成熟的并且也是使用率最高的,以下是 ceph 作为一个存储类型在品高云中的使用截图
在详情中可以针对名称、Monitor、存储调度标记等进行修改,并且可以将云平台的用户同步到 ceph RADOSGW 的用户接口中;
当我们需要创建一个实例或者存储卷的时候,可以直接选择将其创建在 ceph 存储上,这里使用的其实就是 ceph 的 RBD 块存储服务;
当然,对于 ceph FS 的使用则是可以将一个文件目录直接进行挂载,然后可以在其中存储文件,以下是在一台品高云主机中部署 ceph FS 的截图;
推荐部署架构
在品高云中我们推荐以下架构:
- 使用计算、存储双融合的架构,提高资源的利用率;
- 使用快速的 SSD(特别是高速 PCIe SSD)作为 OSD 的日志盘,提高集群性能;
- 采用 2 万兆+ 2 万兆网卡汇聚的方式提升网络速度;
- 虚拟机的磁盘文件会在本地有部分数据拷贝,而冗余的数据会放入其余的存储节点中,读取、写入数据时有机率从本地直接读取、写入,这种架构下大大降低了网络带宽需求,降低了 IO 延迟;
总而言之,ceph 是一个大型分布式存储系统,品高云对其的研究优化将是一个持续的过程,借助在众多客户中的部署实践和需求进行改善,ceph 在品高云的运行状态将会越来越完善。