学习就是梳理和区分,然后理解,运用的过程,如此反复。只要有耐心,并没什么难的。
首先明确Ceph的客户端和服务器端在哪部分,客户端可以对接Ceph封装的那三种接口,也可以直接访问rados层。服务器端就是rados层。
第一点是Ceph架构,Ceph的架构必须理解,底层rados对象存储层,中间一个访问对象存储层的库,再往上就是封装的三种接口(支持文件系统、块存储、对象存储,虽然对客户端封装了这三种接口,但是服务器端本质都是对象存储)。
第二点是和Seafile对接的两种方式,以及优缺点
一种对接方式是:rados gateway 用于对象存储的接口,提供了restful风格的API,接口兼容S3/SWIFT协议,RGW其接口就是简单的GET、PUT、DEL和其他扩展。
另一种对接方式是:访问对象存储层的库的原生接口,优点是直接和rados通信,直接和代码集成,操作文件非常方便。缺点是rados层不像前面三种接口会对文件进行分片,这个是1G的文件存到Ceph的磁盘上就是1G。
第三点是Ceph的服务器端=rados集群=osd集群(负责物理存储的进程,一个磁盘启动一个osd进程)+monitor(维护整个rados集群的运行状态)
这里理解一下Pool和PG的概念,Pool就是把数据存到不同的机器上(你可以对Pool定存储策略,纠删吗或者三副本),PG就是Pool的一个单位,同一个PG的所有数据对象会存到同一个OSD里。
Pool:是存储对象的逻辑分区,可以规定存储策略:多副本(一般是三副本)或者纠删吗。(如果你不能给别人讲懂,很可能你自己也不懂)
逻辑分区的意思就是不一定这些存储对象就在一个磁盘上,可能分散在不同的磁盘上,具体怎么分配是根据算法来的。你用这种逻辑分区的方式可以更合理的分配磁盘的容量,要不然你按物理分区来的话,那就是这个磁盘都快爆了,其他磁盘还没装东西呢,这样硬盘的负载一点都不平均。
说完了逻辑分区,Pool里面包含多个PG,如下图所示,一个PG里包含了一堆对象(被分片后的数据对象),一个对象只能属于一个PG。因为Pool本身是把数据分布到不同的存储机器上,所以你至少需要知道哪些对象被放到了同一台设备上,这就是PG的意义,你不需要理解什么是归置策略组,谁能看懂这。这样的话,你恢复的时候可以以PG为最小单位恢复你的数据。
如果配置了三副本,那么一个PG的主从会分布在不同的OSD上。(其实就是它其他的副本会分布在其他osd上)
第四点,我看Seafile的配置文件里写的和Ceph原生接口对接的,用的逻辑分区就是Pool。
而换成S3这种方式,他就是桶了,S3存储都是用桶来存储,桶下面就是对象,就这两级结构。
据说不推荐用原生的接口?还是推荐RGW封装好的接口,可能是因为前者不支持分片把。