Ceph 之Multisite 下的bucket reshard


一、背景和問題

默認情況下只有當單個bucket承載的object數量過多,導致omap過大會導致性能問題。在L 版之前需要線下reshard,從L 版開始支持線上自動reshard,默認rgw dynamic resharding 是開啟的。但是在開啟了Multisite的情況下,一旦對bucket進行了reshard操作,則會破壞原有的元數據對應規則,導致對應的bucket無法進行數據同步。所以L 版在后面的一個pr 禁用了multisite 下自動的reshard1。multisite 對於omap 過大的問題,需要手動reshard,生產環境上有很大風險。所以事先規划好bucket 對象數上限和num_shard 是必要的。

二、bucket reshard 過程

主集群信息匯總

查看當前集群狀態:

## ceph -s

查看當前主集群的存儲桶列表:

## radosgw-admin bucket list

在存儲桶數量不多的情況下,依次查看各個存儲桶的狀態信息,重點關注num shards, num_objects

## radosgw-admin bucket stats --bucket=test1
## rados -p default.rgw.buckets.index ls|grep <bucket-id>

獲取IO 路徑

## ceph osd map default.rgw.buckets.index .dir.a5ef9049-a15b-48b5-9a28-1692590e8752.24166.24.0   // 指定索引對象

Multisite 下手動reshard

1.查看主集群狀態,確認同步完成,並沒有新的寫入:

[master]# radosgw-admin sync status

2.從集群檢查

[slave]# radosgw-admin sync status

3.主集群上關閉對應bucket的sync

[master]# radosgw-admin sync disable --bucket=test1
[master]# radosgw-admin sync status --bucket=test1

4.主、備集群停掉所有RGW 服務

[master]# systemctl stop ceph-radosgw@rgw.`hostname -s`
[slave]# systemctl stop ceph-radosgw@rgw.`hostname -s`

5.主集群上的任意節點執行下面操作,手工對指定bucket 做reshard,記錄對應的old bucket instance id:

[master]# radosgw-admin bucket reshard --bucket=test1 --num-shards=<N>
*** NOTICE: operation will not remove old bucket index objects ***
*** these will need to be removed manually ***
tenant:
bucket name: test1
old bucket instance id: e8921092-c7e8-42d8-80d1-5e83c25d5661.72254.1
new bucket instance id: e8921092-c7e8-42d8-80d1-5e83c25d5661.72437.1
total entries: 6

6.從集群刪除bucket所有數據,同時清除bucket

[slave]# radosgw-admin bucket rm --purge-objects --bucket=test1
[slave]# radosgw-admin bucket list

7.主集群,刪除舊bucket的bi信息

[master# radosgw-admin bi purge --bucket-id="" --bucket=test1

8.啟動所有主、從節點上的rgw服務

[master]# systemctl start ceph-radosgw@rgw.`hostname -s`
[slave]# systemctl start ceph-radosgw@rgw.`hostname -s`

9.主集群重新開啟對應bucket的sync,等待主集群里面的數據慢慢同步回從集群

[master]# radosgw-admin sync enable --bucket=test1
[master]# radosgw-admin sync status --bucket=test1

References

1.https://github.com/ceph/ceph/pull/18184
2.https://mp.weixin.qq.com/s/ckrYnvlOjQlta_JdryCauA
3.https://cloud.tencent.com/developer/article/1400660
4.https://cloud.tencent.com/developer/article/1378031


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM