1、Ceph 最初的目标是做一个分布式文件系统,直到现在这个目标也不能算完美实现;目前官网上对它的文件系统还是谨慎推荐的态度(不建议对线上核心业务部署);业界使用 Ceph ,大多是用它的对象存储;

3、对象存储(RGW:RADOS gateway)Ceph 对象存储服务提供了 REST 风格的 API ,它有与 Amazon S3 和 OpenStack Swift 兼容的接口。也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展;

5、文件存储Ceph 文件系统服务提供了兼容 POSIX 的文件系统,可以直接挂载为用户空间文件系统。它跟传统的文件系统如Ext4是一个类型,区别在于分布式存储提供了并行化的能力;

7、PS:两个对象的区分需要说明下,这里提到两个对象的概念:一个是 RGW中的对象存储,一个是 Ceph 的后端存储的对象;这两个需要区分:- 第一个对象面向用户,是用户接口能访问到的对象;- 第二个对象是ceph 服务端操作的对象;eg:使用RGW接口,存放一个1G的文件,在用户接口看到的就是存放了一个对象(1);而通过RGW 分片成多个对象(2)后最终存储到磁盘上;

9、MonitorMonitor 集群提供了整个存储系统的节点信息等全局的配置信息,通过 Paxos 算法保持数据的一致性。

11、下面这张图形象的描绘了它们之间的关系:一个Pool里有很多PG,一个PG里包含一堆对象;一个对象只能属于一个PG;PG有主从之分,一个PG分布在不同的OSD上(针对三副本类型)

13、故障域的划分刚开始接触 Ceph,通常会忽略 crushmap,因为即使对它不做任何设置,也不影响我们的正常使用;一旦集群大了,没有它集群就处于一个危险的运行状态中;没有故障域的划分,整个集群就处于一个未隔离的资源池中;一个对象存过去,可能落在 500个OSD硬盘的任意三个上;如果一块硬盘坏了,可能带来的是全局影响(副本copy,这个硬盘上丢失的PG副本可能分布在全局各个硬盘上);使用crushmap 将整个集群的OSD 划分为一个个故障域,类似将一个集群按业务划分成为了多个小集群;每个Pool 只会用到特定的 OSD,这样,一旦某个OSD 损坏,影响的只是某个业务的某个Pool,将故障的范围控制在一个很小的范围内。推荐的姿势:使用crushmap 划分故障域,将pool限制在特定的osd list上,osd的损坏只会引起这个pool内的数据均衡,不会造成全局影响;

15、总结上线 Ceph 前,先规划未来一年的预期使用量,为每个 pool 一次性设置 PG之后不再变更; 使用crushmap 设置故障域隔离,将磁盘故障后带来的数据平衡控制在一个小的范围之内。接口方面推荐只使用Ceph 提供的RGW 接口,不使用 librados原生接口。做好这些, 你的 Ceph 用起来会省心很多。
