我們一起聊聊 Ceph 對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制
如何在兩個(gè)Ceph集群之間建立初始的多站點(diǎn)復(fù)制配置,如下圖所示:
Ceph 對(duì)象存儲(chǔ)多站點(diǎn)初始配置概述
自Quincy版本起,Ceph引入了一個(gè)名為rgw的新管理器模塊,集成在cephadm編排器中。該模塊簡(jiǎn)化了多站點(diǎn)復(fù)制的配置流程。本節(jié)將指導(dǎo)您如何使用rgw管理器模塊,通過(guò)CLI在兩個(gè)獨(dú)立Ceph集群(每個(gè)集群作為一個(gè)區(qū)域)之間配置對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制。
創(chuàng)建RGW模塊配置文件
我們首先為cluster1創(chuàng)建一個(gè)RGW模塊配置文件。通過(guò)主機(jī)標(biāo)簽來(lái)定義哪些節(jié)點(diǎn)可以托管每個(gè)服務(wù)。對(duì)于復(fù)制RGW服務(wù),我們?cè)O(shè)置rgwsync標(biāo)簽。任何配置了此標(biāo)簽的主機(jī)都將啟動(dòng)一個(gè)RGW服務(wù),并使用文件中定義的規(guī)格。
[root@ceph-node-00 ~]# cat << EOF >> /root/rgw.spec
placement:
label: rgwsync
count_per_host: 1
rgw_realm: multisite
rgw_zone: zone1
rgw_zonegroup: multizg
spec:
rgw_frontend_port: 8000
EOF
標(biāo)記主機(jī)
在我們的第一個(gè)集群中,我們希望在節(jié)點(diǎn)ceph-node-00和ceph-node-01上運(yùn)行rgwsync服務(wù),因此我們需要標(biāo)記相應(yīng)的節(jié)點(diǎn):
[root@ceph-node-00 ~]# ceph orch host label add ceph-node-00.cephlab.com rgwsync
Added label rgwsync to host ceph-node-00.cephlab.com
[root@ceph-node-00 ~]# ceph orch host label add ceph-node-01.cephlab.com rgwsync
Added label rgwsync to host ceph-node-01.cephlab.com
啟用RGW管理器模塊并引導(dǎo)配置
標(biāo)記節(jié)點(diǎn)后,我們啟用RGW管理器模塊并引導(dǎo)RGW多站點(diǎn)配置。引導(dǎo)多站點(diǎn)配置時(shí),rgw管理器模塊將執(zhí)行以下步驟:
- 創(chuàng)建領(lǐng)域、區(qū)域組和區(qū)域,并應(yīng)用周期
- 創(chuàng)建特定于區(qū)域名稱的RGW RADOS池
- 創(chuàng)建RGW多站點(diǎn)復(fù)制同步用戶
- 為每個(gè)RGW服務(wù)配置領(lǐng)域、區(qū)域組和區(qū)域
- 使用cephadm Orchestrator創(chuàng)建RGW服務(wù)
[root@ceph-node-00 ~]# ceph mgr module enable rgw
[root@ceph-node-00 ~]# ceph rgw realm bootstrap -i rgw.spec
Realm(s) created correctly. Please use 'ceph rgw realm tokens' to get the token.
驗(yàn)證配置
我們可以通過(guò)以下命令檢查領(lǐng)域、同步用戶和RADOS池的創(chuàng)建情況:
[root@ceph-node-00 ~]# radosgw-admin realm list
{
"default_info": "d85b6eef-2285-4072-8407-35e2ea7a17a2",
"realms": [
"multisite"
]
}
多站點(diǎn)同步用戶:
[root@ceph01 ~]# radosgw-admin user list | grep sysuser
"Sysuser-multisite"
Zone1 RGW RADOS 池:
[root@ceph01 ~]# ceph osd lspools | grep rgw
24 .rgw.root
25 zone1.rgw.log
26 zone1.rgw.control
27 zone1.rgw.meta
一旦我們創(chuàng)建了第一個(gè)桶,桶索引池就會(huì)自動(dòng)創(chuàng)建。此外,一旦我們將第一個(gè)對(duì)象/數(shù)據(jù)上傳到zone1中的存儲(chǔ)桶,就會(huì)為我們創(chuàng)建數(shù)據(jù)池。默認(rèn)情況下,副本為 3 的池是使用集群的預(yù)定義 CRUSH 規(guī)則replicated_rule創(chuàng)建的。如果我們想在數(shù)據(jù)池中使用糾刪碼 (EC) 或自定義故障域等,則需要在開始將數(shù)據(jù)上傳到第一個(gè)存儲(chǔ)桶之前,使用自定義內(nèi)容手動(dòng)預(yù)先創(chuàng)建池。
[!CAUTION]
請(qǐng)務(wù)必仔細(xì)檢查RGW池的Placement Groups(PG)數(shù)量是否正確,以確保所需的性能。我們可以選擇為每個(gè)池啟用帶有批量標(biāo)志(bulk flag)的PG自動(dòng)擴(kuò)展管理器模塊,或者借助PG計(jì)算器(https://docs.ceph.com/en/squid/rados/operations/pgcalc/)預(yù)先靜態(tài)計(jì)算池所需的PG數(shù)量。我們建議每個(gè)OSD的PG副本目標(biāo)值為200,即"PG比例"。
[!CAUTION]
只有RGW數(shù)據(jù)池可以配置為使用糾刪碼(erasure coding)。RGW其他池必須配置為副本,默認(rèn)復(fù)制因子為3(size=3)。
RGW 服務(wù)已啟動(dòng)并正在端口 8000 上為 S3 端點(diǎn)提供服務(wù):
[root@ceph-node-00 ~]# curl http://ceph-node-00:8000
<?xml versinotallow="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
RGW 管理器模塊創(chuàng)建一個(gè)帶有我們部署的編碼信息的令牌。想要作為復(fù)制區(qū)域添加到我們的多站點(diǎn)配置的其他 Ceph 集群可以將此令牌導(dǎo)入到 RGW 管理器模塊中,并使用單個(gè)命令配置和運(yùn)行復(fù)制。
我們可以使用ceph rgw realm tokens命令檢查令牌的內(nèi)容,并使用base64命令對(duì)其進(jìn)行解碼。正如您所看到的,它提供了輔助區(qū)域連接到主區(qū)域組并提取領(lǐng)域和區(qū)域組配置所需的信息。
[root@ceph-node-00 ~]# TOKEN=$(ceph rgw realm tokens | jq .[0].token | sed 's/"http://g')
[root@ceph-node-00 ~]# echo $TOKEN | base64 -d
{
"realm_name": "multisite",
"realm_id": "d85b6eef-2285-4072-8407-35e2ea7a17a2",
"endpoint": "http://ceph-node-00.cephlab.com:8000",
"access_key": "RUB7U4C6CCOMG3EM9QGF",
"secret": "vg8XFPehb21Y8oUMB9RS0XXXXH2E1qIDIhZzpC"
}
從提示中可以看到,我們已經(jīng)切換到第二個(gè) Ceph 集群,從第一個(gè)集群復(fù)制了令牌,并與第一個(gè)集群類似地定義了其余參數(shù)。
[root@ceph-node-04 ~]# cat rgw2.spec
placement:
label: rgwsync
count_per_host: 1
rgw_zone: zone2
rgw_realm_token: ewogICAgInJlYWxtX25hbWUiOiAibXVsdGlzaXRlIiwKICAgICJyZWFsbV9pZCI6ICIxNmM3OGJkMS0xOTIwLTRlMjMtOGM3Yi1lYmYxNWQ5ODI0NTgiLAogICAgImVuZHBvaW50IjogImh0dHA6Ly9jZXBoLW5vZGUtMDEuY2VwaGxhYi5jb206ODAwMCIsCiAgICAiYWNjZXNzX2tleSI6ICIwOFlXQ0NTNzEzUU9LN0pQQzFRUSIsCiAgICAic2VjcmV0IjogImZUZGlmTXpDUldaSXgwajI0ZEw4VGppRUFtOHpRdE01ZGNScXEyTjYiCn0=
spec:
rgw_frontend_port: 8000
我們標(biāo)記將運(yùn)行 Ceph RGW 同步服務(wù)的主機(jī):
[root@ceph-node-04 ~]# ceph orch host label add ceph-node-04.cephlab.com rgwsync
Added label rgwsync to host ceph-node-04.cephlab.com
[root@ceph-node-04 ~]# ceph orch host label add ceph-node-05.cephlab.com rgwsync
Added label rgwsync to host ceph-node-05.cephlab.com
啟用該模塊,并使用我們剛才創(chuàng)建的規(guī)范文件運(yùn)行ceph rgw zone create命令:
[root@ceph02 ~]# ceph mgr module enable rgw
[root@ceph02 ~]# ceph rgw zone create -i rgw2.spec --start-radosgw
Zones zone2 created successfully
rgw管理器模塊將負(fù)責(zé)使用多站點(diǎn)同步用戶的訪問(wèn)密鑰和密鑰來(lái)拉取領(lǐng)域和區(qū)域組周期。最后,它將創(chuàng)建zone2并進(jìn)行最后一次更新,以便所有區(qū)域都具有最新的配置更改,并將zone2添加到 zonegroup multizg中。在radosgw-adminzonegroup get命令的以下輸出中,我們可以看到區(qū)域組端點(diǎn)。我們還可以看到zone1是我們的 zonegroup 的主區(qū)域以及zone1和zone2的相應(yīng)端點(diǎn)。
[root@ceph-node-00 ~]# radosgw-admin zonegroup get
{
"id": "2761ad42-fd71-4170-87c6-74c20dd1e334",
"name": "multizg",
"api_name": "multizg",
"is_master": true,
"endpoints": [
"http://ceph-node-04.cephlab.com:8000",
"http://ceph-node-05.cephlab.com:8000"
],
"hostnames": [],
"hostnames_s3website": [],
"master_zone": "66df8c0a-c67d-4bd7-9975-bc02a549f13e",
"zones": [
{
"id": "66df8c0a-c67d-4bd7-9975-bc02a549f13e",
"name": "zone1",
"endpoints": [
"http://ceph-node-00.cephlab.com:8000",
"http://ceph-node-01.cephlab.com:8000"
],
"log_meta": false,
"log_data": true,
"bucket_index_max_shards": 11,
"read_only": false,
"tier_type": "",
"sync_from_all": true,
"sync_from": [],
"redirect_zone": "",
"supported_features": [
"compress-encrypted",
"resharding"
]
},
{
"id": "7b9273a9-eb59-413d-a465-3029664c73d7",
"name": "zone2",
"endpoints": [
"http://ceph-node-04.cephlab.com:8000",
"http://ceph-node-05.cephlab.com:8000"
],
"log_meta": false,
"log_data": true,
"bucket_index_max_shards": 11,
"read_only": false,
"tier_type": "",
"sync_from_all": true,
"sync_from": [],
"redirect_zone": "",
"supported_features": [
"compress-encrypted",
"resharding"
]
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": [],
"storage_classes": [
"STANDARD"
]
}
],
"default_placement": "default-placement",
"realm_id": "beeea955-8341-41cc-a046-46de2d5ddeb9",
"sync_policy": {
"groups": []
},
"enabled_features": [
"resharding"
]
}
為了驗(yàn)證復(fù)制是否正常工作,我們創(chuàng)建一個(gè)用戶和一個(gè)存儲(chǔ)桶:
[root@ceph-node-00 ~]# radosgw-admin user create --uid='user1' --display-name='First User' --access-key='S3user1' --secret-key='S3user1key'
[root@ceph-node-00 ~]# aws configure
AWS Access Key ID [None]: S3user1
AWS Secret Access Key [None]: S3user1key
Default region name [None]: multizg
Default output format [None]: json
[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 ls
[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 mb s3://firstbucket
make_bucket: firstbucket
[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 cp /etc/hosts s3://firstbucket
upload: ../etc/hosts to s3://firstbucket/hosts
如果我們從第二個(gè) Ceph 集群zone2進(jìn)行檢查,我們可以看到所有元數(shù)據(jù)都已復(fù)制,并且我們?cè)趜one1中創(chuàng)建的所有用戶和存儲(chǔ)桶現(xiàn)在都存在于zone2中。
[!CAUTION]
注意:在此示例中,我們將使用radosgw-admin命令進(jìn)行檢查,但我們也可以使用 S3 API 命令將 AWS 客戶端指向第二個(gè)區(qū)域內(nèi) RGW 的 IP/主機(jī)名。
[root@ceph-node-04 ~]# radosgw-admin user list
[
"dashboard",
"user1",
"sysuser-multisite"
]
[root@ceph-node-04 ~]# radosgw-admin bucket stats --bucket testbucket | jq .bucket
"testbucket"
要檢查復(fù)制狀態(tài),我們可以使用radosgw-admin sync status命令。例如:
[root@ceph-node-00 ~]# radosgw-admin sync status
realm beeea955-8341-41cc-a046-46de2d5ddeb9 (multisite)
zonegroup 2761ad42-fd71-4170-87c6-74c20dd1e334 (multizg)
zone 66df8c0a-c67d-4bd7-9975-bc02a549f13e (zone1)
current time 2024-01-05T22:51:17Z
zonegroup features enabled: resharding
disabled: compress-encrypted
metadata sync no sync (zone is master)
data sync source: 7b9273a9-eb59-413d-a465-3029664c73d7 (zone2)
syncing
full sync: 0/128 shards
incremental sync: 128/128 shards
data is caught up with source
總 結(jié)
我們?cè)敿?xì)講解了如何使用rgw管理器模塊在兩個(gè)站點(diǎn)/區(qū)域之間部署Ceph對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制。這只是一個(gè)開始,我們的目標(biāo)是構(gòu)建一個(gè)完整的部署,包括必要的負(fù)載均衡。