概念
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=//test.ceph01.com --rgw-realm=realm01 --master --defualt
創建一個zone,作為主zone:
# radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=masterzone \
--endpoints=//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=//test.ceph01.com --access=testaccess \
--secret=testkey
拉取period:
# radosgw-admin period pull --url=//test.ceph01.com --access=testaccess \
--secret=testkey
創建備zone:
#radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=secondaryzone \
--endpoints=//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過濾,同步用戶過濾等內容,已達到更加細粒度的控制。