1. 程式人生 > 其它 >RGW 動態儲存桶索引重新分片

RGW 動態儲存桶索引重新分片

大桶索引可能會導致效能問題。為了解決這個問題,官方引入了桶索引分片。在 Luminous 之前,需要離線更改儲存桶分片的數量(重新分片)。從 Luminous 開始,官方支援線上儲存桶重新分片。

每個桶索引分片可以有效地處理其條目,直到達到某個閾值數量的條目。如果超過此閾值,系統可能會遇到效能問題。動態重新分片功能檢測到這種情況並自動增加桶索引使用的分片數量,從而減少每個桶索引分片中的條目數。這個過程對使用者是透明的。

檢測過程執行:

  1. 當新物件新增到儲存桶中時

  2. 在定期掃描所有儲存桶的後臺程序中。

需要後臺程序來處理系統中未更新的現有儲存桶。需要重新分片的儲存桶被新增到重新分片佇列中,並將被安排在以後重新分片。重新分片線​​程在後臺執行並執行計劃的重新分片任務,一次一個。

配置引數

啟用/禁用動態儲存桶索引重新分片:

  • rgw_dynamic_resharding:true/false,預設:true

控制重新分片過程的配置選項:

  • rgw_reshard_num_logs:重新分片佇列的分片數,預設值:16

  • rgw_reshard_bucket_lock_duration: 在重新分片期間鎖定桶 obj 的持續時間,以秒為單位,預設值:120 秒

  • rgw_max_objs_per_shard:觸發​​重新分片前每個桶索引分片的最大物件數,預設:100000 個物件

  • rgw_reshard_thread_interval: 重分片佇列處理輪次之間的最大時間,以秒為單位,預設值:600 秒

管理命令

將儲存桶新增到重新分片佇列

# radosgw-admin reshard add --bucket <bucket_name> --num-shards <new number of shards>

列出重新分片佇列

# radosgw-admin reshard list

在重新分片佇列上處理任務

# radosgw-admin reshard process

桶重分片狀態

# radosgw-admin reshard status --bucket <bucket_name>

輸出是每個分片的 3 個物件(reshard_status、new_bucket_instance_id、num_shards)的 json 陣列。

取消掛起的桶重新分片

注意:正在進行的桶重新分片操作無法取消。

# radosgw-admin reshard cancel --bucket <bucket_name>

手動立即重新分片

# radosgw-admin bucket reshard --bucket <bucket_name> --num-shards <new number of shards>

故障排除

Luminous 12.2.11 和 Mimic 13.2.5 之前的叢集會留下陳舊的儲存桶例項條目,這些條目不會自動清理。該問題還影響了生命週期策略,這些策略不再應用於重新分片的儲存桶。這兩個問題都可以使用幾個 radosgw-admin 命令解決。

陳舊的例項管理

列出叢集中準備好清理的陳舊例項。

# radosgw-admin reshard stale-instances list

清理叢集中的陳舊例項。注意:這些例項的清理只能在單個站點叢集上完成。

# radosgw-admin reshard stale-instances rm

生命週期修復

對於已重新分片例項的叢集,舊生命週期程序很可能會在重新分片期間更改儲存桶例項時標記並刪除生命週期處理。雖然這對於較新的叢集(來自 Mimic 13.2.6 和 Luminous 12.2.12)是固定的,但具有生命週期策略並經過重新分片的較舊儲存桶將必須手動修復。

這樣做的命令是:

# radosgw-admin lc reshard fix --bucket {bucketname}

作為一個方便的包裝器,如果--bucket引數被刪除,那麼這個命令將嘗試修復叢集中所有儲存桶的生命週期策略。

物件過期修復

舊叢集上受 Swift 物件過期影響的物件可能已從日誌池中刪除,並且在儲存桶重新分片後從未刪除。如果它們的到期時間是在叢集升級之前,就會發生這種情況,但是如果它們的到期時間是在升級之後,那麼物件將被正確處理。為了管理這些過期物件,radosgw-admin 提供了兩個子命令。

清單:

# radosgw-admin objects expire-stale list --bucket {bucketname}

以 JSON 格式顯示物件名稱和過期時間的列表。

刪除:

# radosgw-admin objects expire-stale rm --bucket {bucketname}

啟動此類物件的刪除,以 JSON 格式顯示物件名稱、過期時間和刪除狀態的列表。