為什么要研究這個(gè)?
因?yàn)閞gw 沒找到橫向擴(kuò)容的比較好的辦法。有些人是在rgw 上層再加一個(gè)接入層,在上面加數(shù)據(jù)記錄。比如一個(gè)“虛擬大bucket”,對(duì)應(yīng)了下面多個(gè)集群的多個(gè) bucket 。
無論哪一種辦法,都要增加額外的元數(shù)據(jù)管理系統(tǒng)。
看到amazon 的這個(gè) storage class 被ceph rgw (Nautilus)支持后
我打算研究一下利用這個(gè)新功能做到幾件事
1 橫向 在bucket 下擴(kuò)pool
2 通過 bucket 下同時(shí)支持多個(gè) pool,提高讀寫吞吐。
3 利用 生命周期。前置ssd pool 。達(dá)到時(shí)間后把對(duì)象遷移到后面的廉價(jià) COLD pool 比如 大容量sata 。
ceph 官網(wǎng)文檔 地址 https://docs.ceph.com/docs/master/radosgw/placement/
這個(gè)功能 amazon s3 在 2018年推出
宣布推出 S3 智能分層 – 一種新的 Amazon S3 存儲(chǔ)類
發(fā)布于: Nov 26, 2018
S3 智能分層是一種新的 Amazon S3 存儲(chǔ)類,專為希望在數(shù)據(jù)訪問模式發(fā)生變化時(shí)自動(dòng)優(yōu)化存儲(chǔ)成本而不會(huì)影響性能或運(yùn)營(yíng)開銷的客戶而設(shè)計(jì)。S3 智能分層是第一個(gè)云對(duì)象存儲(chǔ)類,通過在訪問模式發(fā)生變化時(shí)在兩個(gè)訪問層(頻繁訪問層和不頻繁訪問層)之間移動(dòng)數(shù)據(jù)來實(shí)現(xiàn)自動(dòng)節(jié)省成本,非常適用于訪問模式未知或不斷變化的數(shù)據(jù)。
ceph 官方在rgw Nautilus 版本中引入

首先說說 palcement 和 storage class 的區(qū)別
placement 是指 bucket 的放置屬性 ,storage class 是bucket 內(nèi)每個(gè)對(duì)象的放置屬性。
placement 下面默認(rèn)有個(gè)標(biāo)準(zhǔn)層 STANDARD 他對(duì)應(yīng)的pool 默認(rèn)default.rgw.buckets.data (這個(gè)pool 可修改為你想存放的 pool,)
"STANDARD": {
"data_pool": “default.rgw.buckets.data”
每個(gè) placemetn 都有個(gè) STANDARD
你可以 添加自定義分層 比如 COLD 不只限于一個(gè)??梢远鄠€(gè)。

上圖是我測(cè)試的placement 加的2個(gè)class。 可以分別對(duì)應(yīng)不同的pool 。
pool 可以根據(jù)你的需要新建在不同的設(shè)備上 比如 ssd sas sata
根據(jù)我們以前的測(cè)試結(jié)果
bucket ==> placement storage class ==>pool
創(chuàng)建bucket 通過指定 placement 制定了 放置池組
PUT 對(duì)象時(shí)候 可以制定 storage_class 指定具體的pool
下面說說具體做法 ,我就在默認(rèn) 的 default-placement操作測(cè)試
根據(jù)官網(wǎng)命令 To add a new storage class named COLD to the default-placement target, start by adding it to the zonegroup
先在 zonegroup 加入 tag
1)
$ radosgw-admin zonegroup placement add
--rgw-zonegroup default
--placement-id default-placement
--storage-class COLD
2)zone 中加入 具體 pool 官網(wǎng)例子加上了壓縮。這個(gè)可以根據(jù)需要配置是否加上
radosgw-admin zone placement add
--rgw-zone default
--placement-id default-placement
--storage-class COLD
--data-pool default.rgw.cold.data
--compression lz4
結(jié)果如下
placement_pools": [
{
"key": "default-placement”,
"val": {
"index_pool": “default.rgw.buckets.index”,
"storage_classes": {
"STANDARD": {
"data_pool": “default.rgw.buckets.data”
},
"COLD": {
"data_pool": “default.rgw.cold.data”,
"compression_type": “l(fā)z4”
},
},
"data_extra_pool": "default.rgw.buckets.non-ec”,
"index_type": 0
}
我們用 s3cmd 測(cè)試上傳
對(duì)我的 測(cè)試placement 做put 文件測(cè)試 (這里我用自定義 的placemet 做測(cè)試

指定 -storage-class=TEMPCOLD
s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest1 --storage-class=TEMPCOLD
upload: 'cirros-0.3.5-x86_64-disk.img' -> 's3://bucket2/clodtest1' [1 of 1]
s3cmd info s3://bucket2/clodtest1
s3://bucket2/clodtest1 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:03:34 GMT
MIME type: application/octet-stream
Storage: TEMPCOLD
MD5 sum: f8ab98ff5e73ebab884d80c9dc9c7290

如果不加參數(shù)
s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest3
upload: 'cirros-0.3.5-x86_64-disk.img' -> 's3://bucket2/clodtest3' [1 of 1]
13267968 of 13267968 100% in 0s 27.25 MB/s done
數(shù)據(jù)會(huì)落在 STANDARD
s3://bucket2/clodtest3 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:06:24 GMT
MIME type: application/octet-stream
Storage: STANDARD
經(jīng)過測(cè)試 讀數(shù)據(jù)不需要知道對(duì)象屬于哪一個(gè) Storage
。
=====
官方說明
所有放置目標(biāo)都有一個(gè)STANDARD存儲(chǔ)類,默認(rèn)情況下該存儲(chǔ)類適用于新對(duì)象。用戶可以使用覆蓋此默認(rèn)設(shè)置 default_storage_class。
要在非默認(rèn)存儲(chǔ)類中創(chuàng)建對(duì)象,請(qǐng)?jiān)谡?qǐng)求的HTTP標(biāo)頭中提供該存儲(chǔ)類名稱。S3協(xié)議使用 X-Amz-Storage-Class標(biāo)頭,而Swift協(xié)議使用 X-Object-Storage-Class標(biāo)頭。
然后,可以使用操作使用S3對(duì)象生命周期管理在存儲(chǔ)類之間移動(dòng)對(duì)象數(shù)據(jù)Transition。
結(jié)論:
1
如果需要 提高性能??梢酝瑫r(shí)在一個(gè)placement 下加入多個(gè) Storage 對(duì)應(yīng)多個(gè) pool。 客戶端寫數(shù)據(jù)的時(shí)候可以均衡指定 storage-class
具體可以參考s3 api .
或者可以在nginx 接入層做 靈活的指定 X-Amz-Storage-Class (對(duì)多個(gè) storage-class 做自定義輪詢或者打開關(guān)閉)
2
如果需要在pool 將近滿了??梢孕略鲆粋€(gè) storage-class。 客戶端讀寫 指定到新的 storage-class。
3
如果需要用ssd 加速??梢?用ssd pool 作為STANDARD
用 廉價(jià) sata 作為 COLD 進(jìn)行遷移。 具體要研究 Lifecycle 的設(shè)置
我這里就沒時(shí)間做測(cè)試了。
目前我測(cè)試的 ceph 是 14.2.5. 不是最新。 感覺這個(gè)功能還有寫莫名其妙的情況。
建議各位有需要的可以做大規(guī)模的測(cè)試。