一起聊聊 Ceph 對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制的性能
在本系列的前兩部分中,我們介紹了Ceph對(duì)象存儲(chǔ)的多站點(diǎn)特性,并詳細(xì)講解了如何在兩個(gè)Ceph集群之間配置多站點(diǎn)復(fù)制。第三部分將重點(diǎn)討論如何優(yōu)化多站點(diǎn)復(fù)制的性能,包括配置專用的RGW服務(wù)以及介紹Reef版本中引入的"復(fù)制同步公平性"特性。
多站點(diǎn)復(fù)制專用RGW服務(wù)
在每個(gè)Ceph集群中,我們配置了兩個(gè)RGW服務(wù)。默認(rèn)情況下,這些RGW服務(wù)同時(shí)處理客戶端S3請(qǐng)求和站點(diǎn)間的復(fù)制請(qǐng)求,共享資源和處理時(shí)間。為了優(yōu)化這一配置,我們可以將RGW服務(wù)分為兩組:
- 客戶端請(qǐng)求處理組:專門處理客戶端S3請(qǐng)求
- 復(fù)制請(qǐng)求處理組:專門處理多站點(diǎn)復(fù)制請(qǐng)求
這種配置方式雖然不是強(qiáng)制性的,但能帶來(lái)以下優(yōu)勢(shì):
- 資源獨(dú)立擴(kuò)展:可以根據(jù)性能需求(如吞吐量或延遲)獨(dú)立擴(kuò)展客戶端和復(fù)制RGW服務(wù)
- 避免任務(wù)沖突:防止復(fù)制同步因客戶端請(qǐng)求繁忙而停滯,反之亦然
- 簡(jiǎn)化故障排查:專用RGW服務(wù)可以簡(jiǎn)化問(wèn)題診斷,復(fù)制日志和客戶端日志不會(huì)混雜
- 網(wǎng)絡(luò)隔離:可以為不同RGW組配置不同網(wǎng)絡(luò),實(shí)現(xiàn)安全隔離
a.對(duì)外提供服務(wù)的的 RGW 可以使用網(wǎng)絡(luò) A
b.對(duì)內(nèi)復(fù)制服務(wù)的 RGW 可以使用網(wǎng)絡(luò) B
配置多站點(diǎn)部署時(shí),通常的做法是將特定 RGW 服務(wù)專用于客戶端操作,將其他 RGW 服務(wù)專用于多站點(diǎn)復(fù)制。
默認(rèn)情況下,所有 RGW 都參與多站點(diǎn)復(fù)制。需要執(zhí)行兩個(gè)步驟才能將 RGW 排除在多站點(diǎn)復(fù)制同步之外。
- 為 RGW 設(shè)置此 Ceph 選項(xiàng):ceph config set ${KEY_ID} rgw_run_sync_thread false。如果為 false,則阻止此對(duì)象存儲(chǔ)的網(wǎng)關(guān)傳輸多站點(diǎn)復(fù)制數(shù)據(jù)
- 前面的參數(shù)只是告訴RGW不要發(fā)送復(fù)制數(shù)據(jù),但可以繼續(xù)接收。為了避免接收,我們需要從區(qū)域組和區(qū)域復(fù)制端點(diǎn)中刪除 RGW。
配置專用RGW服務(wù)
在上一章中,我們?yōu)槊總€(gè) Ceph 集群配置了兩個(gè) RGW,它們當(dāng)前為客戶端 S3 請(qǐng)求和復(fù)制請(qǐng)求流量提供服務(wù)。在以下步驟中,我們將為每個(gè)集群配置兩個(gè)額外的 RGW,以便每個(gè)集群內(nèi)總共有四個(gè) RGW。在這四個(gè) RGW 中,兩個(gè)將專用于服務(wù)客戶端請(qǐng)求,另外兩個(gè)將專用于服務(wù)多站點(diǎn)復(fù)制。
1.添加主機(jī)標(biāo)簽
我們使用標(biāo)簽來(lái)控制RGW服務(wù)的調(diào)度和部署。對(duì)于面向客戶端的RGW服務(wù),我們使用rgw標(biāo)簽:
[root@ceph-node-00 ~]# ceph orch host label add ceph-node-02.cephlab.com rgw
Added label rgw to host ceph-node-02.cephlab.com
[root@ceph-node-00 ~]# ceph orch host label add ceph-node-03.cephlab.com rgw
Added label rgw to host ceph-node-03.cephlab.com
我們?yōu)槊嫦蚬姷?RGW 創(chuàng)建 RGW 規(guī)范文件。在此示例中,我們對(duì)所有 RGW 服務(wù)使用相同的 CIDR 網(wǎng)絡(luò)。不過(guò),如果需要,我們可以為部署的不同 RGW 集配置不同的網(wǎng)絡(luò) CIDR。我們使用與已運(yùn)行的服務(wù)相同的領(lǐng)域、區(qū)域組和區(qū)域,因?yàn)槲覀兿M?RGW 屬于同一個(gè)領(lǐng)域命名空間。
2.創(chuàng)建RGW配置文件
為面向客戶端的RGW服務(wù)創(chuàng)建配置文件:
[root@ceph-node-00 ~]# cat << EOF >> /root/rgw-client.spec
service_type: rgw
service_id: client-traffic
placement:
label: rgw
count_per_host: 1
networks:
- 192.168.122.0/24
spec:
rgw_frontend_port: 8000
rgw_realm: multisite
rgw_zone: zone1
rgw_zonegroup: multizg
EOF
3.應(yīng)用配置并驗(yàn)證
我們應(yīng)用規(guī)范文件并檢查現(xiàn)在是否有四個(gè)新服務(wù)正在運(yùn)行:兩個(gè)用于多站點(diǎn)復(fù)制,另一個(gè)用于客戶端流量。
檢查服務(wù)狀態(tài):
[root@ceph-node-00 ~]# ceph orch apply -i spec-rgw.yaml
Scheduled rgw.rgw-client-traffic update…
[root@ceph-node-00 ~]# ceph orch ps | grep rgw
rgw.multisite.zone1.ceph-node-00.mwvvel ceph-node-00.cephlab.com *:8000 running (2h) 6m ago 2h 190M - 18.2.0-131.el9cp 463bf5538482 dda6f58469e9
rgw.multisite.zone1.ceph-node-01.fwqfcc ceph-node-01.cephlab.com *:8000 running (2h) 6m ago 2h 184M - 18.2.0-131.el9cp 463bf5538482 10a45a616c44
rgw.client-traffic.ceph-node-02.ozdapg ceph-node-02.cephlab.com 192.168.122.94:8000 running (84s) 79s ago 84s 81.1M - 18.2.0-131.el9cp 463bf5538482 0bc65ad993b1
rgw.client-traffic.ceph-node-03.udxlvd ceph-node-03.cephlab.com 192.168.122.180:8000 running (82s) 79s ago 82s 18.5M - 18.2.0-131.el9cp 463bf5538482 8fc7d6b06b54
4.禁用復(fù)制流量
要禁用RGW服務(wù)的復(fù)制流量,需要完成以下兩個(gè)步驟:
- 禁用同步線程
- 從zonegroup/zone配置中移除復(fù)制端點(diǎn)
首先禁用rgw_run_sync_thread,要做的第一件事是使用ceph config命令禁用rgw_run_sync_thread 。我們指定服務(wù)名稱client.rgw.client-traffic以同時(shí)在兩個(gè)面向客戶端的 RGW 上應(yīng)用更改。我們首先檢查rgw_run_sync_thread的當(dāng)前配置并確認(rèn)它默認(rèn)設(shè)置為 true。
[root@ceph-node-00 ~]# ceph config get client.rgw.client-traffic rgw_run_sync_thread
true
現(xiàn)在,我們將參數(shù)更改為 false,以便為這組 RGW 禁用同步線程。
[root@ceph-node-00 ~]# ceph config set client.rgw.client-traffic rgw_run_sync_thread false
[root@ceph-node-00 ~]# ceph config get client.rgw.client-traffic rgw_run_sync_thread false
第二步是確保我們部署的新 RGW 不會(huì)在區(qū)域組配置中列為復(fù)制端點(diǎn)。我們不應(yīng)該看到ceph-node-02或ceph-node-03在zone1下列為端點(diǎn):
[root@ceph-node-00 ~]# radosgw-admin zonegroup get | jq '.zones[]|.name,.endpoints'
"zone1"
[
"http://ceph-node-00.cephlab.com:8000",
"http://ceph-node-01.cephlab.com:8000"
]
"zone2"
[
"http://ceph-node-04.cephlab.com:8000",
"http://ceph-node-05.cephlab.com:8000"
]
請(qǐng)注意,必須為此任務(wù)安裝 JSON 解析實(shí)用程序jq 。
確認(rèn)后,我們就完成了這部分的配置,并在集群中運(yùn)行了針對(duì)每種類型請(qǐng)求的專用服務(wù):客戶端取消請(qǐng)求和復(fù)制請(qǐng)求。
需要重復(fù)相同的步驟,將相同的配置應(yīng)用到我們的第二個(gè)集群zone2 。
Reef 版本中的新性能改進(jìn)
Reef版本引入了對(duì)象存儲(chǔ)多站點(diǎn)復(fù)制的改進(jìn)特性——"復(fù)制同步公平性"。這一改進(jìn)解決了早期版本中復(fù)制工作分配不均的問(wèn)題。在早期版本中,一個(gè)RGW會(huì)獨(dú)占復(fù)制操作鎖,導(dǎo)致其他RGW服務(wù)難以獲取鎖,從而無(wú)法通過(guò)增加RGW服務(wù)數(shù)量來(lái)線性提升多站點(diǎn)復(fù)制性能。
Quincy版本在復(fù)制工作分配方面已經(jīng)做出了顯著改進(jìn)。而在Reef版本中,通過(guò)同步公平性特性,復(fù)制數(shù)據(jù)和元數(shù)據(jù)得以在所有RGW服務(wù)之間均勻分配,使它們能夠更高效地協(xié)作完成復(fù)制任務(wù)。
感謝IBM存儲(chǔ)DFG團(tuán)隊(duì)進(jìn)行的規(guī)模測(cè)試,驗(yàn)證了同步公平性特性的改進(jìn)效果。在測(cè)試中,DFG團(tuán)隊(duì)比較了配置多站點(diǎn)復(fù)制的Ceph Reef、Quincy和Pacific版本在對(duì)象寫入時(shí)的表現(xiàn)。
以下是DFG提供的測(cè)試結(jié)果,比較了每種測(cè)試情況下各同步RGW的參與度。圖表繪制了每15分鐘采集一次的avgcount(數(shù)據(jù)同步獲取的對(duì)象數(shù)和字節(jié)數(shù))。理想情況下,所有同步RGW應(yīng)均勻分擔(dān)負(fù)載。
在這個(gè)示例中,請(qǐng)注意Pacific版本(RHCS 5.3,藍(lán)色線)的表現(xiàn):
- 一個(gè)RGW處理約1300萬(wàn)對(duì)象(次級(jí)同步1800萬(wàn))
- 其他兩個(gè)RGW分別處理500萬(wàn)和150萬(wàn)對(duì)象
- 同步時(shí)間超過(guò)24小時(shí)
相比之下,Reef版本(RHCS 7,綠色線)的表現(xiàn):
- 所有RGW處理量相近(500-700萬(wàn)對(duì)象)
- 同步時(shí)間顯著縮短,不到19小時(shí)
- 各RGW負(fù)載均衡,綠色線緊密相鄰
圖表中同色線條越接近,說(shuō)明同步參與度越好。如您所見,Reef版本的綠色線條非常接近,表明三個(gè)測(cè)試配置的同步RGW均勻分擔(dān)了復(fù)制工作負(fù)載。
圖片
在下圖中,我們顯示了每個(gè)版本將完整工作負(fù)載(小對(duì)象)同步到其他區(qū)域所需的時(shí)間:時(shí)間越少越好。我們可以看到,此處標(biāo)記為7 Reef 提供了顯著改進(jìn)的同步時(shí)間。
圖片
總結(jié)
在本系列的第三部分中,我們深入探討了兩個(gè)關(guān)鍵內(nèi)容:
- 專用RGW服務(wù)配置詳細(xì)講解了如何為客戶端請(qǐng)求和復(fù)制請(qǐng)求配置獨(dú)立的RGW服務(wù)分析了這種配置方式的優(yōu)勢(shì),包括資源隔離、性能優(yōu)化和故障排查簡(jiǎn)化
- 同步公平性特性介紹了Reef版本中引入的這一重要改進(jìn)通過(guò)實(shí)際測(cè)試數(shù)據(jù)展示了其在負(fù)載均衡和性能提升方面的顯著效果