本来不想再写Ceph相关的文章了,最近在做ceph元数据优化研究及架构,整体思路是:将rados作为数据存储引擎,构建分布式元数据集群来管理元数据,如:将rgw或者fs相关的元数据从ceph的元数据池中抽取出来,转存到分布式元数据集群中,以此达到提升单集群处理能力的目的;要达到这个目的,有两个基础条件:1.对ceph中rgw或者fs的各CURD操作原理及IO路径非常熟悉,2.对ceph中元数据的组织及存储非常熟悉;然后才能在rgw或者mds的IO路径中进行数据及元数据的分离操作,并以合适的格式将元数据转存到分布式元数据集群中。
本篇是第二项基础条件中的第二篇,也是最后一篇:rgw启动过程中元数据的创建及初始化概述
下文的操作在最新的Nautilus版本环境下进行。
rgw启动元数据初始化
在上一篇文章中,我将rgw的架构在逻辑上分为两层,其中第二层:负责rgw数据对象的定义、处理以及对librados::rados
的封装,并将数据持久化到后端OSD中。在rgw程序启动过程中,其中一个工作是实例化RGWRados
对象并进行初始化,该对象作为最外层的wrapper,会生成多个RGWServiceInstance
服务例程来进行具体的初始化工作,其中RGWSI_Zone
负责rgw服务启动过程中元数据(如:realm,zonegroup,zone等)的初始化以及加载, 类图如下: