rgw元数据同步流程

2022-05-25  本文已影响0人  小跑001

步骤

  • 持久化rgw_meta_sync_info信息到本地
  • 根据period获取所有shard远程日志位置,主要是marker, 对应结构体为RGWMetadataLogInfo
  • 记录远程marker信息到rados: mdlog.sync-status.shard.x中,对应结构体为rgw_meta_sync_marker.next_step_marker, 在增量同步的时候使用该marker为起点
  • 进入StateBuildingFullSyncMaps状态
  • 获取锁 // 都是去获取rados对象mdlog.sync-status的锁,锁名为sync_lock
  • 去远程通过/admin/metadata请求获取sections
  • 遍历每个section,获取每个section下的数据,并按照shardid存入meta.full-sync.index.shardid中,参考RGWShardedOmapCRManager
  • 更新所有的shard的同步状态对应的marker的total_entries
  • 通过cursor,遍历每个period
  • 更新next
  • 根据period获取RGWMetadataLog
  • 遍历每个shard对应的rgw_meta_sync_marker
  • 如果next存在,获取period_marker,如果period_marker为空表示当前period没有元数据变更,并continue。// 间接说明period_marker存的是上个period最大的marker
  • 开启RGWMetaSyncShardControlCR, 进行该shard的全量以及增量同步,实际是通过RGWMetaSyncShardCR
    1. full_sync()
  • 从meta.full-sync.index.shardid获取列表数据
  • 遍历每个数据, 每个marker开启RGWMetaSyncSingleEntryCR去远程拉取数据并同步到本地
  • 更新状态为IncrementalSync , 更新next_step_marker 到 marker
    1. incremental_sync()
  • 对比period_marker(代表该period最大的marker)和远程的mdlog_marker(已经拉取远程的日志marker), 如果period_marker非空且period_marker<=mdlog_marker, 则退出增量同步
  • 1.如果已经同步到最新的远程marker,需要拉取远程的日志到本地
  • 2.通过对比marker,如果拉取到本地日志还有没有增量同步的进行增量同步
  • 3.不断循环,重复1和2的步骤,一直到该period的日志结束

结构体

上一篇 下一篇

猜你喜欢

热点阅读