Realm和Period

在配置多个zongroup或者使用非默认zone名称时,需要手动创建Realm、Zonegroup、Zone信息,一般流程如下:

radosgw-admin realm create --rgw-realm=realm_abc --default
radosgw-admin zonegroup create --rgw-zonegroup=zonegroup_abc --endpoints=http://10.2.0.98:7480 --master --default
radosgw-admin zone create --rgw-zonegroup=zonegroup_abc --rgw-zone=zone_master --endpoints=http://10.2.0.98:7480 --access-key=tmp2 --secret=tmp2 --default --master
radosgw-admin user create --uid=foo --display-name="FOO"  --access-key=tmp2 --secret=tmp2 --system
radosgw-admin period update --commit

当没有配置多个zongroup可以省略endpoints和ak、sk配置项。

rgw的zone相关信息都会放到一组realm、zonggroup、zone、period对象中存储。realm是一个大的容器,覆盖整个集群的存活时间线;zonggroup和zone对象分别存储zonegroup和zone的配置信息;period对是一系列对象,当zone配置变化时,period可能fork新的分支来存储相关信息。

rgw_rados初始化时首先从default.realm对象读取当前最新realm的realm-id,进而从realms.对象加载realm信息;从加载的realm信息中可以得到当前period的id,进而从periods.对象初始化period信息,至此period信息加载完毕,rgw便拥有了当前集群的zone相关配置信息。

上述第一条命令realm create执行时会发生如下流程:

Realm和Period_第1张图片
realm create

上图也列出了realm、zonegroup和zone三种对象的组织结构,每种对象都会有一个default对象,这里面存放默认的id,每种对象都会有一个或多个id-name对象对,name对象只存放关联的id对象的id值,id对象存放真正的数据。

realm create执行完毕后.rgw.root下便创建好了realm和period对象

root@i-4j72yrbx:~/onestep# rados -p .rgw.root ls
periods.3aba5ae0-b3a2-48a4-89cc-3d2c01d4920d.latest_epoch
realms_names.realm_abc
default.realm
periods.3aba5ae0-b3a2-48a4-89cc-3d2c01d4920d.1
realms.d9d01909-a163-4ac6-8a2f-2f1e0203bb33.control
realms.d9d01909-a163-4ac6-8a2f-2f1e0203bb33
period_config.d9d01909-a163-4ac6-8a2f-2f1e0203bb33

其中realms..control对象是用于notify通知,period_config对象记录了quota信息,periods..latest_epoch记录了此period当前最新的epoch。

继续执行zonegroup和zone的创建命令时,.rgw.rootpool下回分别多出三个相关对象:default对象,name对象,info对象。
此时period信息仍为空,rgw还不知道新增加的zone配置。
继续执行period update --commit命令,会更新period信息,此时rgw才掌握了新增加的zone配置信息。

Realm和Period_第2张图片
period update流程

从上图可以看出period只有在master zone变更时才会产生新的id,否则一直沿用之前的period-id,只时每次对period-epoch进行增加。不执行commit时信息只保存到periods.:staging对象中,不会写到realm,所以默认情况下rgw仍然无法加载这个period。

你可能感兴趣的:(Realm和Period)