ceph rgw启动过程

1. 默认的frontends=civetweb

2. rgw init的超时时间rgw_init_timeout=300s

3.  RGWRados *store = RGWStoreManager::get_storage(..........)

(1) 创建同步管理器sync_modules_manager,这个模块分为3个小模块:rgw,log,elasticsearch,其中rgw为默认的

(2) 创建元数据管理器RGWMetadataManager

(3) 创建数据变化log管理器RGWDataChangesLog,创建线程ChangesRenewThread

(4) 初始化realm,.rgw.root里读出realmidname,以及last period并根据该realm初始化RGWPeriod,每个realm有自己的RGWPeriodrealm需要手动创建,无默认值

(5) 初始化zonegroup,也需要从.rgw.root里读,若没有,如是第一次启动,则创建默认的zonegroupzone,并创建obj保存在.rgw.root里,下次启动时从.rgw.root里读出。

(6) rgw_run_sync_thread=True,则创建同步管理器实例,这里使用的是默认的同步模块rgw:RGWDefaultSyncModule,创建了RGWDefaultSyncModuleInstance

(7) 创建一个Finisher(cct),并启动Finisher线程

(8) 创建一个period_puller,用于把period_historymissing事务重新提交

(9) 创建一个period_history

(10) need_watch_notify = True, 则需要创建zonename.rgw.control存储池,令cache_enabled=true,通过watch/notify功能来完成同步,比如多个rgw之间的同步

(11) 把同步源zones放到zone_data_sync_from_map列表,把同步目的zones放到zone_data_sync_from_map列表

(12) 检查zones的各个pool:root,gc,lc,log,reshard 是否都存在,不存在则创建

(13) 创建gc = new RGWGC(),并启动工作线程

(14) 创建obj_expirer = new RGWObjectExpirer(this) ,并启动工作线程

(15) 读取rgw meda log的历史信息,从zone.rgw.log存储池里的meta.history对象读出,若没有这个object,则根据之前period读出的历史信息来构造该meta.history对象并存入zone.rgw.log存储池

(16) 创建async_rados = new RGWAsyncRadosProcessor(....),并启动进程,该进程有一个队列可放入RGWAsyncRadosRequest消息进行处理

(17) 初始化元数据管理器RGWMetadataManager meta_mgr->init(current_period)

(18) 若该rgw启动的是master zonegroup master zone,则创建meta_notifier = new RGWMetaNotifier(....)并启动线程,这是元数据发生变化时需要通知其它zone的线程

(19) 创建meta_sync_processor_thread = new RGWMetaSyncProcessorThread(this, async_rados);,并启动线程,同步zone之间的meta

(20) 配置rgw::BucketTrimConfig config ,用于裁剪bucket bilog的,参数如rgw_sync_log_trim_interval=120020分钟裁剪一次,初始化BucketTrimManager bucket_trim,zone.rgw.log里的bilog.trim对象记录了trim的信息

(21) 创建sync_log_trimmer = new RGWSyncLogTrimThread(.....),并启动工作线程,包括data log trim meta log trim

(22) zone_data_sync_from_map列表有值,则有同步zone源,为每个zone源创建RGWDataSyncProcessorThread,并启动线程,用于把源zone的数据同步过来,这个线程会定期发送GET /admin/log/?type=data http请求给gateway获取log信息的

(23) 创建data_notifier = new RGWDataNotifier(this),并启动线程,每200ms检查datalog有没有数据更新,有则通知其它zone

(24) lc = new RGWLC(); 生命周期管理的处理对象

(25) quota_handler = RGWQuotaHandler::generate_handler(....) 定时检查user quotabucket quota是否溢出(测试时只检查全局quota,还是所有的)

(26) 检查bucket_index_max_shards有没有超额

(27) binfo_cache = new RGWChainedCacheImpl,创建cache,例如在读取元数据时需要先从cache里搜索

(28) zone_data_notify_to_map!=空,则哟其它zone需要从该zone同步数据,创建cache lru =obj_tombstone_cache

(29) reshard = new RGWReshard(this),操作bucket reshard的对象,有自己的工作线程,进行reshard前会锁bucket,只有主zone才能启动该线程,每隔10分钟查看是否需要自动分片

(30) index_completion_manager = new RGWIndexCompletionManager(this),不明白,看起来像是op完成后需要写入shard对象的管理对象

4. rgw_rest_init(g_ceph_context, store, store->get_zonegroup()),初始化对应关系,httprgw之间如何解析入参和返回值

5. rgw_user_init(store),初始化uinfo_cacheuser使用

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph RGW(Rados Gateway)是Ceph存储系统中提供对象存储服务的组件。它允许用户通过HTTP协议以对象的形式存储和检索数据。 Ceph RGW是一个分布式的、高可用的存储解决方案,它将数据分散保存在多个物理节点上,提供了可靠的数据冗余和容错能力。通过数据的分散,RGW能够实现高并发的访问和高吞吐量的数据传输,从而满足大规模的存储需求。 在Ceph RGW中,数据以对象的形式存储,每个对象都有一个唯一的标识符和元数据信息,可以通过它们进行快速的检索和访问。对象可以以任意格式存储,如文本、图片、视频等。通过提供RESTful风格的API,RGW使得开发者能够方便地访问和操作存储在其中的对象。 RGW支持多租户的机制,可以为不同的用户或应用程序提供独立的存储空间和访问权限。它还提供了访问控制机制,可以通过身份验证、访问策略等方式,限制对象的访问权限,并保证数据的安全性。 另外,Ceph RGW还具有自动化的数据迁移和负载均衡功能,可以根据数据的访问模式和负载情况,自动调整数据的存储位置和副本数量,以实现最佳的性能和可用性。 综上所述,Ceph RGW是一款功能强大、可靠性高的对象存储服务,适用于大规模存储和分发数据的场景。它提供了高并发、高吞吐量的数据访问和传输能力,以及安全性、可扩展性等方面的优势,成为当今对象存储领域的一种重要解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值