背景:
很多人對ceph,rgw的性能問題不太滿意,主要是index pool(默認是存在一個shard里面,當(dāng)一個shard越來越大時,一種極端情況是把相關(guān)的osd占滿)的瓶頸,當(dāng)然網(wǎng)上也有人提到了產(chǎn)生一些問題,主要問題如下:
對index pool進行scrub或deep-scrub的時候,如果shard對應(yīng)的Object過大,會極大消耗底層存儲設(shè)備性能,造成io請求超時。
底層deep-scrub的時候耗時過長,會出現(xiàn)request blocked,導(dǎo)致大量http請求超時而出現(xiàn)50x錯誤,從而影響到整個RGW服務(wù)的可用性。
當(dāng)壞盤或者osd故障需要恢復(fù)數(shù)據(jù)的時候,恢復(fù)一個大體積的shard文件將耗盡存儲節(jié)點性能,甚至可能因為OSD響應(yīng)超時而導(dǎo)致整個集群出現(xiàn)雪崩。
改進方式:
考慮一個場景
如果你向ceph 上傳對象時,同時也在本地或別的地方記錄了元數(shù)據(jù)信息,你就可以避免使用index pool,同時也分擔(dān)了ceph存儲的壓力。
使用indexless將會是一個不錯的選擇。
網(wǎng)址:http://www.ksingh.co.in/blog/2017/01/30/ceph-indexless-bucket-part-2/
這個網(wǎng)址寫的已經(jīng)很全了。我就不費太多口舌。
驗證是否設(shè)置好indexless,可以通過radosgw-admin 去查
例如:radosgw-admin bucket stats --bucket=bucket3
有一個index_type,normal是具有索引的對象存儲,別的indexless的。
另外一種是采取分片+快池的方式詳情請查看https://cloud.tencent.com/developer/article/1032858
注意事項:
1.設(shè)置完indexless 不會對之前的buket的類型有影響
2.通過indexless 設(shè)置的bucket 如果里面有數(shù)據(jù),不會給你警告,會給你直接刪除bucket,object會處于游離態(tài)
3.普通 bucket 可以通過上述命令查看數(shù)量,但是indexless 看不了,usage信息不存在。
4.刪除bucket不會刪除里面的對象 ,但是刪除方式現(xiàn)在只能管理員操作rgw pool來刪除,需要結(jié)合一定pool 文件命名格式去刪,查看rgw object bucket 存儲位置以及在pool里面對象名稱命名方式 (后續(xù)文檔介紹),當(dāng)然通過你得知道下bucket_id。
5.設(shè)置生命周期,未到時間點人為刪除bucket ,刪除bucket ,內(nèi)部游離的object 不會隨生命周期而操作。