cephfs擴(kuò)容方案匯總
cephfs擴(kuò)容方案
需求描述
建立完善的cephfs的擴(kuò)容方案,滿足cephfs用戶數(shù)據(jù)存儲(chǔ)空間在各種場(chǎng)景下的擴(kuò)容需求。目前擴(kuò)容只涉及到用戶的數(shù)據(jù)存儲(chǔ),元數(shù)據(jù)部分因?yàn)榭臻g使用率較低所以不需要考慮擴(kuò)容。
現(xiàn)有cephfs用戶存儲(chǔ)模型
目前單個(gè)用戶會(huì)對(duì)應(yīng)一個(gè)ceph集群里面的多個(gè)Dir目錄,每個(gè)Dir目錄底層會(huì)關(guān)聯(lián)到兩個(gè)pool,其中metadata_pool用來(lái)存儲(chǔ)元數(shù)據(jù),data_pool用來(lái)存儲(chǔ)數(shù)據(jù)。

單集群擴(kuò)容方案
通過(guò)filelayout進(jìn)行擴(kuò)容
基本原理
每個(gè)文件都有filelayout的xattr屬性,其中包含一個(gè)關(guān)鍵的pool字段,用來(lái)指定存儲(chǔ)文件底層用到哪個(gè)pool,因此利用該特性可以實(shí)現(xiàn)基于目錄基本的擴(kuò)容。
參考 https://docs.ceph.com/docs/master/cephfs/file-layouts/#adding-a-data-pool-to-the-mds
操作流程
root@host1:/mnt/cephfs1#?ceph?df
RAW?STORAGE:
????CLASS?????SIZE????????AVAIL???????USED???????RAW?USED?????%RAW?USED
????hdd???????952?TiB?????861?TiB?????89?TiB???????91?TiB??????????9.52
????TOTAL?????952?TiB?????861?TiB?????89?TiB???????91?TiB??????????9.52
POOLS:
????POOL??????????????????????ID?????STORED??????OBJECTS?????USED????????%USED?????MAX?AVAIL
????rbdtest-site1-ssd-img??????1?????8.7?TiB???????2.34M??????26?TiB?????24.58????????27?TiB
????rbdtest-site1-sas-img??????2?????8.8?TiB???????2.31M??????26?TiB??????3.63???????233?TiB
????cephfs_metadata????????????3??????85?GiB?????116.05k??????86?GiB??????0.10????????27?TiB
????cephfs_data????????????????4??????12?TiB?????198.68M??????36?TiB?????30.65????????27?TiB
????cephfs_pool1???????????????5?????121?GiB??????31.04k?????364?GiB??????0.44????????27?TiB
????sym_cephfs_data????????????6?????656?KiB??????????13?????3.6?MiB?????????0???????233?TiB
????sym_cephfs_metadata????????7?????????0?B???????????0?????????0?B?????????0???????233?TiB
????kubernetes????????????????20???????152?B???????????6?????192?KiB?????????0???????233?TiB
root@host1:/mnt/cephfs1#?setfattr?-n?ceph.dir.layout.pool?-v?cephfs_pool1?/mnt/cephfs1/extest1/
root@host1:/mnt/cephfs1#?getfattr?-n?ceph.dir.layout?/mnt/cephfs1/extest1
getfattr:?Removing?leading?'/'?from?absolute?path?names
#?file:?mnt/cephfs1/extest1
ceph.dir.layout="stripe_unit=4194304?stripe_count=1?object_size=4194304?pool=cephfs_pool1"
root@host1:/mnt/cephfs1/extest1#?touch?file2
root@host1:/mnt/cephfs1/extest1#?getfattr?-n?ceph.file.layout?/mnt/cephfs1/extest1/file2
getfattr:?Removing?leading?'/'?from?absolute?path?names
#?file:?mnt/cephfs1/extest1/file2
ceph.file.layout="stripe_unit=4194304?stripe_count=1?object_size=4194304?pool=cephfs_pool1"
方案1. 同級(jí)目錄擴(kuò)容
如果業(yè)務(wù)側(cè)能夠按新增主目錄方式進(jìn)行擴(kuò)容,則可以通過(guò)新增一個(gè)用戶主目錄,將新目錄指向新的data_pool來(lái)實(shí)現(xiàn)擴(kuò)容。
優(yōu)點(diǎn):新擴(kuò)容的pool不會(huì)對(duì)現(xiàn)有存儲(chǔ)服務(wù)造成影響。
缺點(diǎn):業(yè)務(wù)需要能夠適配這種新增子目錄的擴(kuò)容方式。

方案2. 子目錄擴(kuò)容
如果業(yè)務(wù)側(cè)只能在原有主目錄中進(jìn)行操作,則可以通過(guò)在原有主目錄下新增一個(gè)用戶子目錄,將新生成的子目錄指向新的data_pool來(lái)實(shí)現(xiàn)擴(kuò)容。
優(yōu)點(diǎn):新擴(kuò)容的pool不會(huì)對(duì)現(xiàn)有存儲(chǔ)服務(wù)造成影響。
缺點(diǎn):業(yè)務(wù)需要能夠適配這種新增子目錄的擴(kuò)容方式。

通過(guò)新增OSD進(jìn)行擴(kuò)容
基本原理
基于原生底層分布式存儲(chǔ)的基本特性,可以在原有的pool里面新增OSD進(jìn)行擴(kuò)容,但是新增OSD會(huì)導(dǎo)致舊有數(shù)據(jù)重新平衡,造成性能波動(dòng),影響服務(wù)質(zhì)量。
方案3. 原有data_pool擴(kuò)容
通過(guò)在原有data_pool中新增OSD來(lái)實(shí)現(xiàn)擴(kuò)容。
優(yōu)點(diǎn):業(yè)務(wù)和k8s層面不需要做任何變動(dòng),完全對(duì)上層透明。
缺點(diǎn):舊集群在新增OSD的時(shí)候會(huì)發(fā)生性能抖動(dòng),同時(shí)為了兼顧擴(kuò)容速率和減少業(yè)務(wù)影響,相對(duì)擴(kuò)容周期會(huì)比較長(zhǎng)。受限與機(jī)房機(jī)柜和網(wǎng)絡(luò)設(shè)備環(huán)境,有物理層面的上限。

方案4. 新增ceph集群
受限于單集群規(guī)模存儲(chǔ)集群的規(guī)模有限(受限機(jī)柜、網(wǎng)絡(luò)等),單機(jī)房多集群、多機(jī)房多集群都會(huì)可能存在,因此這一塊的存儲(chǔ)擴(kuò)容方案也會(huì)納入設(shè)計(jì)范圍。
優(yōu)點(diǎn):適配現(xiàn)有的單集群部署方案(1個(gè)集群跨3個(gè)機(jī)柜),相對(duì)來(lái)講容易做故障域隔離(雞蛋不放一個(gè)籃子里).擴(kuò)容新集群不會(huì)對(duì)現(xiàn)有存儲(chǔ)服務(wù)造成影響。
缺點(diǎn):需要業(yè)務(wù)能夠適配這種跨集群模型(跨集群的目錄數(shù)據(jù)不能互通),單個(gè)docker里面最好不要同時(shí)掛載兩個(gè)以上集群的目錄。k8s的存儲(chǔ)資源調(diào)度復(fù)雜度上升,需要支持多集群。

