概念
Realm
一个realm代表了全局唯一的命名空间,这个命名空间由一个或者多个zonegroup,zonegroup可以包含一个或多个zone,zone里面包含了存放桶,数据对象等。
每个realm都有与之对应的period,每个period代表了zonegroup的状态和zone的配置。正在修改了zonegroup或者zone之后,都要对period执行提交并更新这样才会生效。
ZoneGroup
单个数据中心一般由一个zonegroup组成,在之前较老的版本中,zonegroup又被称为region,ZOS支持多个zonegroup,每个zonegroup由一个或者多个zone组成。
Zone
通常的实践来看,一个zone代表一个或者一组ZOS实例,每个zone都有一个Ceph集群提供数据支撑。多站点的复制和容灾能力在Zone之间进行。元数据只能在同一个zonegroup的主zone和从zone之间同步,而数据可以在zonegroup的zone之间同步,即就是说数据同步无需划分主从。
从角色上可以将zonegroup中的zone划分为主zone和从zone,它们有两种模式,active-active和active-passive。在active-active模式下,主/从zone都可以读写,数据会自动同步;而在active-passive模式下,就只能在主zone上写入,从zone则只提供只读能力。
原理
总体来看,在多站点架构中,存在一个主节点,多个备节点。
同一个zonegroup下,zone之间的数据同步为多主模式,可以同时写;元数据同步为主从模式,由主zone同步到从zone,保证元数据一致性。
对于zonegroup内的数据同步,zone之间可以主动发送数据变更通知,接收到通知的zone会主动去拉取更新的数据到本地。同时,zone也会在一定时间间隔内发起轮询,轮询日志更新,当发现有更新后,拉取到本地。对于元数据同步,因为只能是主zone同步到从zone,因此只能是主zone通知从zone,或者主动轮询主zone上的元数据变更日志,到达同步元数据更新的目的。
实践
创建Multisite
首先需要准备两个集群:ceph01和ceph02。在这两个集群上分别创建好ZOS实例。以下动手实践将通过配置multisite,验证同步功能。
以ceph01作为主集群:
在主集群创建一个名为realm01的realm:
# radosgw-admin realm create --rgw-realm=realm01 --default
在此realm中,创建一个zonegroup,并将其设置为master和default:
# radosgw-admin zonegroup create --rgw-zonegroup=cn \
--endpoints=http://test.ceph01.com --rgw-realm=realm01 --master --defualt
创建一个zone,作为主zone:
# radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=masterzone \
--endpoints=http://test.ceph01.com --master --default
更新period,使得上述配置生效:
# radosgw-admin period update --commit
创建同步用户:
# radosgw-admin user create --uid=”syncuser” --display-name=”sync user” \
--access-key=testaccess --secret-key=testkey--system
更新materzone的key:
# radosgw-admin zone modify --rgw-zone=masterzone --access-key=testaccess \
--secret-key=testkey
更新period,使得上述配置生效:
# radosgw-admin period update --commit
修改ZOS配置,新增:rgw_zone=masterzone并重启ZOS服务。
以ceph02作为备集群:
从ceph01上拉取realm配置:
# radosgw-admin realm pull --url=http://test.ceph01.com --access=testaccess \
--secret=testkey
拉取period:
# radosgw-admin period pull --url=http://test.ceph01.com --access=testaccess \
--secret=testkey
创建备zone:
#radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=secondaryzone \
--endpoints=http://test.ceph02.com --access-key=testaccess --secret-key=testkey
修改ceph02上的zos配置,增加rgw_zone=secondaryzone并重启。
验证
查看同步状态
# radosgw-admin sync status
验证用户同步
在masterzone上创建用户,在secondaryzone上查看:
# radosgw-admin user create --uid=testuser --display-name=”test user” \
--access-key=testuser --secret=testkey
查看用户:
#radosgw-admin user list
3.1在masterzone上,通过testuser用户创建名为bucket1的桶。
在secondaryzone上查看。
3.2 在secondaryzone上,同样通过testuser用户创建名为bucket2的桶。
在masterzone上查看。
社区进展
从Ceph V16 Pacific版本开始,RGW支持基于策略的多站点同步。在开始同步之前,可以设置Zone级别和Bucket级别的同步策略,同步策略的设置中可以设置诸如目的zone,目的bucket,同步对象的tag或者prefix过滤,同步用户过滤等内容,已达到更加细粒度的控制。