Ceph 對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制:歸檔區(qū)域(Archive Zone)的概念和架構(gòu)
功能概述
歸檔區(qū)域功能利用多站點(diǎn)復(fù)制和S3對(duì)象版本控制特性,確保即使生產(chǎn)區(qū)域中的對(duì)象被刪除,歸檔區(qū)域仍保留所有對(duì)象版本。通過這種方式,即使從生產(chǎn)站點(diǎn)中刪除,它也將保持每個(gè)對(duì)象的所有版本可用。
通過歸檔區(qū)域,我們可以獲得對(duì)象不變性,而無需在生產(chǎn)區(qū)域中啟用對(duì)象版本控制,降低資源消耗,從而節(jié)省了版本化 S3 對(duì)象的副本在非歸檔區(qū)域中消耗的空間,這適合在硬件成本比較高的環(huán)境中。
圖片
這可以保護(hù)您的數(shù)據(jù)免受邏輯或物理錯(cuò)誤的影響。例如,它可以防止用戶因邏輯故障(如在生產(chǎn)區(qū)域意外刪除存儲(chǔ)桶)而丟失數(shù)據(jù),同時(shí)也能保護(hù)數(shù)據(jù)免受大規(guī)模硬件故障或整個(gè)生產(chǎn)站點(diǎn)故障的影響。
由于歸檔區(qū)域提供了生產(chǎn)數(shù)據(jù)的不可變副本,它可以作為勒索軟件防護(hù)策略的關(guān)鍵組成部分。
可以通過生產(chǎn)存儲(chǔ)桶的生命周期策略來控制歸檔區(qū)域的存儲(chǔ)空間使用情況,例如定義要為對(duì)象保留的版本數(shù)量。
我們可以按存儲(chǔ)桶選擇要發(fā)送/復(fù)制到歸檔區(qū)域的數(shù)據(jù)。例如,如果我們有一些預(yù)生產(chǎn)存儲(chǔ)桶,其中沒有重要數(shù)據(jù),我們可以禁用這些存儲(chǔ)桶的歸檔區(qū)域復(fù)制。
歸檔區(qū)域架構(gòu)
歸檔區(qū)域作為多站點(diǎn)區(qū)域組(multisite zonegroup)中的一個(gè)區(qū)域,可以擁有與生產(chǎn)區(qū)域不同的配置,包括其自己的存儲(chǔ)池和復(fù)制規(guī)則。
Ceph 歸檔區(qū)域具有以下主要特性:
- 版本控制:RGW 歸檔區(qū)域中的所有存儲(chǔ)桶都啟用了版本控制。
- 異步復(fù)制:每次用戶上傳新對(duì)象時(shí),該對(duì)象都會(huì)異步復(fù)制到歸檔區(qū)域。
- 版本生成:在生產(chǎn)區(qū)域中每次修改對(duì)象時(shí),歸檔區(qū)域都會(huì)生成一個(gè)新的對(duì)象版本。
- 數(shù)據(jù)不可變性:如果生產(chǎn)區(qū)域中的對(duì)象被刪除,歸檔區(qū)域中的對(duì)象將保持完整。但需要注意的是,歸檔區(qū)域不會(huì)鎖定其接收的對(duì)象。如果用戶具有適當(dāng)?shù)臋?quán)限并訪問 S3 端點(diǎn),仍然可以刪除歸檔區(qū)域中的對(duì)象。
- 私有網(wǎng)絡(luò)配置:歸檔區(qū)域的 S3 端點(diǎn)可以配置在僅對(duì)運(yùn)維管理員團(tuán)隊(duì)開放的私有網(wǎng)絡(luò)中。如果需要恢復(fù)生產(chǎn)對(duì)象,請(qǐng)求必須通過該團(tuán)隊(duì)處理。
我們可以將歸檔區(qū)域添加到 Ceph 對(duì)象存儲(chǔ)的單站點(diǎn)配置中。通過這種配置,我們可以將歸檔區(qū)域附加到運(yùn)行中的單區(qū)域、單 Ceph 集群中,如下圖所示:
圖片
或者,我們可以將歸檔區(qū)域附加到 Ceph 對(duì)象存儲(chǔ)的多站點(diǎn)配置中。例如,如果我們有一個(gè)在兩個(gè)區(qū)域之間進(jìn)行復(fù)制的領(lǐng)域(realm)/區(qū)域組(zonegroup),我們可以添加第三個(gè)區(qū)域,代表第三個(gè) Ceph 集群。這是我們將在示例中使用的架構(gòu),基于我們?cè)谥拔恼轮性O(shè)置的 Ceph 多站點(diǎn)復(fù)制集群。現(xiàn)在,我們將在區(qū)域組中添加第三個(gè)區(qū)域,并將其配置為不可變的歸檔區(qū)域。以下圖表展示了這種架構(gòu)的示例。
圖片
讓我們從歸檔區(qū)域配置開始。我們有一個(gè)新部署的第三個(gè) Ceph 集群,在四個(gè)名為ceph-node-[08-11].cephlab.com節(jié)點(diǎn)上運(yùn)行。
[root@ceph-node-08 ~]# ceph orch host ls
HOST ADDR LABELS STATUS
ceph-node-08.cephlab.com ceph-node-08 _admin,osd,mon,mgr,rgwsync
ceph-node-09.cephlab.com 192.168.122.135 osd,mon,mgr,rgwsync
ceph-node-10.cephlab.com 192.168.122.204 osd,mon,mgr,rgw
ceph-node-11.cephlab.com 192.168.122.194 osd,rgw
4 hosts in cluster目前無法使用 Manager rgw模塊配置歸檔區(qū)域,因此我們必須運(yùn)行radosgw-admin命令來配置它。首先,我們從已經(jīng)部署的multisite領(lǐng)域中提取信息。我們使用區(qū)域組端點(diǎn)以及 RGW 多站點(diǎn)同步用戶的訪問秘鑰。如果您需要檢查同步用戶的詳細(xì)信息,您可以運(yùn)行: radosgw-admin user info --uid sysuser-multisite 。
[root@ceph-node-08]# radosgw-admin realm pull --rgw-realm=multisite --url=http://ceph-node-01.cephlab.com:8000 --access-key=X1BLKQE3VJ1QQ27ORQP4 --secret=kEam3Fq5Wgf24Ns1PZXQPdqb5CL3GlsAwpKJqRjg --default
[root@ceph-node-08]# radosgw-admin period pull --url=http://ceph-node-01.cephlab.com:8000 --access-key=X1BLKQE3VJ1QQ27ORQP4 --secret=kEam3Fq5Wgf24Ns1PZXQPdqb5CL3GlsAwpKJqRjg一旦我們?cè)诒镜乩×祟I(lǐng)域(realm)和周期(period),我們的第三個(gè)集群將擁有所有必需的領(lǐng)域和區(qū)域組配置。如果我們運(yùn)行 radosgw-admin zonegroup get命令,就可以查看當(dāng)前多站點(diǎn)設(shè)置的所有詳細(xì)信息。接下來,我們將配置一個(gè)名為 archive的新區(qū)域。我們需要提供以下信息:
- 端點(diǎn)列表:這些是將在新集群上部署的專用同步 RGW(Rados Gateway)的地址。
- 同步用戶的訪問密鑰和密鑰:用于同步操作的認(rèn)證信息。
- 區(qū)域類型:通過設(shè)置 tier type 標(biāo)志,明確該新區(qū)域?qū)⒈粍?chuàng)建為歸檔區(qū)域。
這一步驟是確保新區(qū)域能夠正確配置并作為歸檔區(qū)域運(yùn)行的關(guān)鍵。
[root@ceph-node-08]# radosgw-admin zone create --rgw-znotallow=archive --rgw-znotallow=multizg --endpoints=http://ceph-node-08.cephlab.com:8000,http://ceph-node-09.cephlab.com:8000 --access-key=X1BLKQE3VJ1QQ27ORQP4 --secret=kEam3Fq5Wgf24Ns1PZXQPdqb5CL3GlsAwpKJqRjg --tier-type=archive --default新區(qū)域到位后,我們可以更新周期以將新區(qū)域配置推送到區(qū)域組中的其余區(qū)域
[root@ceph-node-08]# radosgw-admin period update --commit我們使用 cephadm 部署了兩個(gè) RGW(Rados Gateway)服務(wù),這些服務(wù)將從生產(chǎn)區(qū)域復(fù)制數(shù)據(jù)。在本示例中,我們使用 cephadm 的 RGW CLI 而不是規(guī)格文件(spec file)來展示另一種配置 Ceph 服務(wù)的方式。我們啟動(dòng)的兩個(gè)新 RGW 服務(wù)都將屬于歸檔區(qū)域。通過 --placement 參數(shù),我們配置了兩個(gè) RGW 服務(wù),它們將運(yùn)行在 ceph-node-08 和 ceph-node-09 上,這兩個(gè)節(jié)點(diǎn)也是我們之前通過命令配置為區(qū)域復(fù)制端點(diǎn)的節(jié)點(diǎn)。
[root@ceph-node-08 ~]# ceph orch apply rgw multi.archive --realm=multisite --znotallow=archive --placement="2 ceph-node-08.cephlab.com ceph-node-09.cephlab.com" --port=8000
Scheduled rgw.multi.archive update...我們可以檢查 RGW 是否已正確啟動(dòng):
[root@ceph-node-08]# ceph orch ps | grep archive
[root@ceph-node-08]# ceph orch ps | grep archive
rgw.multi.archive.ceph-node-08.hratsi ceph-node-08.cephlab.com *:8000 running (10m) 10m ago 10m 80.5M - 18.2.0-131.el9cp 463bf5538482 44608611b391
rgw.multi.archive.ceph-node-09.lubyaa ceph-node-09.cephlab.com *:8000 running (10m) 10m ago 10m 80.7M - 18.2.0-131.el9cp 463bf5538482 d39dbc9b3351一旦新的 RGW 啟動(dòng),就會(huì)為我們創(chuàng)建歸檔區(qū)域的新池。請(qǐng)記住,如果我們想對(duì) RGW 數(shù)據(jù)池使用糾刪碼,那么在
[root@ceph-node-08]# ceph osd lspools | grep archive
8 archive.rgw.log
9 archive.rgw.control
10 archive.rgw.meta
11 archive.rgw.buckets.index現(xiàn)在,當(dāng)我們檢查歸檔區(qū)域節(jié)點(diǎn)之一的同步狀態(tài)時(shí),我們發(fā)現(xiàn)當(dāng)前沒有配置復(fù)制。這是因?yàn)槲覀兪褂玫氖?nbsp;sync policy ,并且沒有為歸檔區(qū)域配置區(qū)域組同步策略:
[root@ceph-node-08]# radosgw-admin sync status --rgw-znotallow=archive
realm beeea955-8341-41cc-a046-46de2d5ddeb9 (multisite)
zonegroup 2761ad42-fd71-4170-87c6-74c20dd1e334 (multizg)
zone bac4e4d7-c568-4676-a64c-f375014620ae (archive)
current time 2024-02-12T17:19:24Z
zonegroup features enabled: resharding
disabled: compress-encrypted
metadata sync syncing
full sync: 0/64 shards
incremental sync: 64/64 shards
metadata is caught up with master
data sync source: 66df8c0a-c67d-4bd7-9975-bc02a549f13e (zone1)
not syncing from zone
source: 7b9273a9-eb59-413d-a465-3029664c73d7 (zone2)
not syncing from zone現(xiàn)在我們要開始將數(shù)據(jù)復(fù)制到歸檔區(qū)域,因此我們需要?jiǎng)?chuàng)建區(qū)域組策略。回想一下我們之前的文章,我們配置了一個(gè)區(qū)域組策略以allow在區(qū)域組級(jí)別進(jìn)行復(fù)制,然后我們?cè)诿總€(gè)存儲(chǔ)桶的基礎(chǔ)上配置了復(fù)制。
在這種情況下,我們將對(duì)歸檔區(qū)域采取不同的方法。我們將在區(qū)域組級(jí)別配置單向同步,并將策略狀態(tài)設(shè)置為enabled ,因此默認(rèn)情況下,區(qū)域zone1中的所有存儲(chǔ)桶都將復(fù)制到archive歸檔區(qū)域。
和以前一樣,要?jiǎng)?chuàng)建同步策略,我們需要一個(gè)組、一個(gè)流和一個(gè)管道。讓我們創(chuàng)建一個(gè)名為grouparchive的新 zonegroup 組策略:
[root@ceph-node-00 ~]# radosgw-admin sync group create --group-id=grouparchive --status=enabled我們正在創(chuàng)建一個(gè)“directional”(unidirectional)流,它將所有數(shù)據(jù)從 zone1 復(fù)制到 archive 區(qū)域:
[root@ceph-node-00 ~]# radosgw-admin sync group flow create --group-id=grouparchive --flow-id=flow-archive --flow-type=directional --source-znotallow=zone1 --dest-znotallow=archive最后,我們創(chuàng)建一個(gè)管道,在其中對(duì)所有字段使用*通配符,以避免輸入完整的區(qū)域名稱。 代表流程中配置的所有區(qū)域。我們可以在區(qū)域字段中輸入zone1和archive 。此處使用通配符有助于避免拼寫錯(cuò)誤并概括該過程。
[root@ceph-node-00 ~]# radosgw-admin sync group pipe create --group-id=grouparchive --pipe-id=pipe-archive --source-znotallow='*' --source-bucket='*' --dest-znotallow='*' --dest-bucket='*'始終需要提交區(qū)域組同步策略:
[root@ceph-node-00 ~]# radosgw-admin period update --commit當(dāng)我們檢查配置的區(qū)域組策略時(shí),我們現(xiàn)在看到兩個(gè)組,即我們之前文章中的group1和我們剛才創(chuàng)建和配置的grouparchive :
[root@ceph-node-00 ~]# radosgw-admin sync group get
[
{
"key": "group1",
"val": {
"id": "group1",
"data_flow": {
"symmetrical": [
{
"id": "flow-mirror",
"zones": [
"zone1",
"zone2"
]
}
]
},
"pipes": [
{
"id": "pipe1",
"source": {
"bucket": "*",
"zones": [
"*"
]
},
"dest": {
"bucket": "*",
"zones": [
"*"
]
},
"params": {
"source": {
"filter": {
"tags": []
}
},
"dest": {},
"priority": 0,
"mode": "system",
"user": ""
}
}
],
"status": "allowed"
}
},
{
"key": "grouparchive",
"val": {
"id": "grouparchive",
"data_flow": {
"directional": [
{
"source_zone": "zone1",
"dest_zone": "archive"
}
]
},
"pipes": [
{
"id": "pipe-archive",
"source": {
"bucket": "*",
"zones": [
"*"
]
},
"dest": {
"bucket": "*",
"zones": [
"*"
]
},
"params": {
"source": {
"filter": {
"tags": []
}
},
"dest": {},
"priority": 0,
"mode": "system",
"user": ""
}
}
],
"status": "enabled"
}
}
]當(dāng)我們檢查來自 zone1 的任意存儲(chǔ)桶時(shí)(這里我們選擇了單向同步的存儲(chǔ)桶,但也可以是其他存儲(chǔ)桶),可以看到現(xiàn)在配置了一個(gè)新的同步策略,其 ID 為 pipe-archive。這一策略源自我們剛剛應(yīng)用的區(qū)域組策略,因?yàn)檫@是單向同步的配置。我們?cè)?nbsp;zone1 的 ceph-node-00 節(jié)點(diǎn)上運(yùn)行命令,發(fā)現(xiàn)只有 dests 字段被填充,其中源區(qū)域?yàn)?nbsp;zone1,目標(biāo)區(qū)域?yàn)闅w檔區(qū)域。
代碼
當(dāng)我們?cè)俅芜\(yùn)行radosgw-admin sync status命令時(shí),我們看到zone1的狀態(tài)已not syncing from zone更改為已啟用同步,并且data is caught up with source 。
[root@ceph-node-00 ~]# radosgw-admin sync info --bucket unidirectional
{
"sources": [],
"dests": [
{
"id": "pipe-archive",
"source": {
"zone": "zone1",
"bucket": "unidirectional:66df8c0a-c67d-4bd7-9975-bc02a549f13e.36430.1"
},
"dest": {
"zone": "archive",
"bucket": "unidirectional:66df8c0a-c67d-4bd7-9975-bc02a549f13e.36430.1"
},
"params": {
"source": {
"filter": {
"tags": []
}
},
"dest": {},
"priority": 0,
"mode": "system",
"user": ""
}
},
{
"id": "test-pipe1",
"source": {
"zone": "zone1",
"bucket": "unidirectional:66df8c0a-c67d-4bd7-9975-bc02a549f13e.36430.1"
},
"dest": {
"zone": "zone2",
"bucket": "unidirectional:66df8c0a-c67d-4bd7-9975-bc02a549f13e.36430.1"
},
"params": {
"source": {
"filter": {
"tags": []
}
},
"dest": {},
"priority": 0,
"mode": "system",
"user": "user1"
}
},現(xiàn)在,所有寫入 zone1 的數(shù)據(jù)都將被復(fù)制到歸檔區(qū)域。在這種配置下,我們只需設(shè)置從 zone1 到歸檔區(qū)域的單向數(shù)據(jù)流。例如,如果在 zone2 中寫入了新對(duì)象,由于我們?yōu)?nbsp;unidirectionalbucket 配置了雙向存儲(chǔ)桶同步策略,對(duì)象復(fù)制的流向?qū)⑷缦滤荆?/p>
zone2 → zone1 → 歸檔區(qū)域
總 結(jié)
我們介紹了歸檔區(qū)域(Archive Zone)功能,并分享了一個(gè)在實(shí)際運(yùn)行的 Ceph 對(duì)象存儲(chǔ)多站點(diǎn)集群中配置歸檔區(qū)域的實(shí)操示例。




























