Ceph (S3)對象存儲通過生命周期管理實現存儲的智能分層
本文轉載自微信公眾號「新鈦云服」,作者祝祥。轉載本文請聯系新鈦云服公眾號。
概述
- 本文詳細介紹了對象存儲的生命周期管理是什么、如何使用它以及使用 RGW 創建自定義存儲類。
前提條件
- 本文假設您部署了一個 Ceph 集群,其中包含 2 個 RGW,并創建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。
- 如果沒有ceph存儲或者 RGW 未啟用,請參考Ceph官網文檔進行安裝以及啟用您的 RGW 。
步驟
- 本文將詳細介紹我們如何將對象遷移到不同類別的存儲中,以便根據時間將它們分開。例如,我們可以規定將超過 N 天的對象移動到稱為“cold”的存儲類。可以將對象設置為在一段時間后過期,而不是移動到單獨的存儲類,然后將其發送到 Ceph 垃圾回收器進行刪除。
- 除了刪除之外,輔助存儲類可以綁定到一個具有更激進的糾刪碼池的池,該池可以提供更好的存儲效率,但可能不會那么冗余。對于不再被認為生產所需但仍希望保留副本而不是徹底刪除的文件,這可能是一個很好的折衷方案。
創建新的存儲類和池
注意:如果您只希望創建過期和刪除對象的規則,而不是將它們移動到新的存儲層,則可以跳過此部分,您可以直接轉到“創建 S3 生命周期管理策略”
- 本文假定默認 RGW 配置。如果您設置了自定義區域組或區域和放置目標,則必須將默認名稱替換為您配置的名稱。
- 要確定您是否使用默認配置,請運行以下命令:
root@labosd1:~# radosgw-admin zonegroup list
root@labosd1:~# radosgw-admin zone list
root@labosd1:~# radosgw-admin zonegroup placement list
- 對于默認配置,它將如下所示:
- 如果輸出不同,請務必在以下指南中將“default”和“default-placement”替換為正確的命名方案。
添加新的存儲類
首先,在 Ceph RGW 結構中創建一個新的存儲類,以便可以創建一個新池,然后將該池分配給新類。本文將為其存儲類使用名稱“COLD”。您可能希望改用 AWS 使用的存儲類。它們有預定義的存儲類別,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html鏈接處獲取AWS常用的存儲類。
root@labosd1:~# radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id default-placement \
--storage-class COLD
- 接下來,為剛剛創建的存儲類提供區域放置信息。此外,設置存儲類“COLD”將綁定到的池的名稱。尚未創建池??梢栽谙乱徊街型瓿伞oot@labosd1:~# radosgw-admin zone placement add \--rgw-zone default \--placement-id default-placement \--storage-class COLD \--data-pool default.rgw.cold.data \--compression lz4
- 輸出應顯示在存儲類“COLD”下分配了新的數據池。接下來,創建新池。這可以通過儀表板輕松完成,您可以在其中選擇池類型(副本或糾刪碼)、歸置組的數量、壓縮類型等。只需確保池名稱與上述命令中使用的名稱匹配即可。
- 新的存儲類現在已經完成并且可以使用了。接下來的步驟是創建和設計一個生命周期,以完全按照您的意愿去做。本文將使用一些簡單的示例。
創建 S3 生命周期管理策略
- 下一步將需要在系統上安裝 s3cmd。您還可以使用適用于 Windows 的 S3 browser之類的工具,它允許您創建 s3 ACL 策略。
- 本文將使用 s3cmd。安裝 s3cmd,然后使用他們的內置工具通過 –configure 參數對其進行配置。輸入將構建 s3 策略的 s3 存儲桶的訪問密鑰和密鑰,并將其指向正確的 RGW 端點和端口。
- 下面的示例將提供設置的格式。
- 確?!癉NS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存儲桶或位置變量。
- 不需要默認區域。您只需要在該配置處通過 Enter 跳過。
- 在配置結束時,s3cmd 將要求測試設置。如果成功,您可以繼續。S3cmd 將在 /root/.s3cfg 生成一個配置文件。
root@octrgw1:~# apt install s3cmd
root@octrgw1:~# s3cmd –configure
- 要測試功能,請運行 s3cmd ls。這應該列出與提供的訪問密鑰和秘密密鑰相關的存儲桶。
生命周期配置
- 創建存儲類并配置 s3cmd 后,我們現在可以創建一些生命周期管理規則。這些管理規則通過 xml 文件創建,然后可以使用 s3cmd 將其傳遞到存儲桶。
- 可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)網站上找到更全面的生命周期規則列表。但是,請注意此頁面針對的是 Amazon S3,因此請記住,有些內容可能不會與 Ceph 一致,但大多數規則都應該適用于Ceph RGW。
- 使用生命周期管理工具,您可以選擇“transition”和“expiration”
- 您可以創建包含兩個步驟的規則。
- 為了創建這些生命周期規則,請創建一個 XML 文件并在該 XML 文件中創建您的規則。
- 例如,可以制定一條規則,在 1 個月后將對象移到新的存儲類,然后在 2 個月后將它們過期以刪除。該生命周期規則如下所示:
<LifecycleConfiguration>
<Rule>
<ID>Transition then Expire Rule</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>COLD</StorageClass>
</Transition>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
- 對于更簡單的規則,您可以簡單地指示刪除早于設定日期的對象。這條規則看起來類似于:
<LifecycleConfiguration>
<Rule>
<ID>Expire after 1 year</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
- 最后,對于僅將對象移動到新存儲類而不將它們標記為過期的規則,您可以使用如下規則:
<LifecycleConfiguration>
<Rule>
<ID>Transition objects to COLD storage class</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>COLD</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
- 在這些規則中,您還可以看到“前綴”匹配的配置。這允許靈活地在單個存儲桶上運行所有不同的規則,并且只要使用正確的前綴上傳對象,該規則將僅適用于它。這可以讓您在單個存儲桶中擁有多個過期規則。這看起來像這樣:
<LifecycleConfiguration>
<Rule>
<ID>prefix expiration</ID>
<Filter>
<Prefix>dir1</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>120</Days>
</Expiration>
<Filter>
<Prefix>dir2</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
- 上面的規則會在 120 天后過期所有前綴為 dir1 的對象,并在 60 天后過期所有前綴為 dir2 的對象。
- 要使創建的規則生效,請在安裝了 s3cmd 的主機上創建一個新的 xml 文件。
- 復制上面的規則以及您的環境所需的更改。
例子:
- 保存文件。此文件保存為生命周期過期.xml。此策略將附加到的 s3 存儲桶且命名為 lifecycletest。
- 使用 s3cmd,在正確的存儲桶上設置生命周期策略。
root@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest
- 測試是否已設置生命周期。
root@octrgw1:~# s3cmd info s3://lifecycletest
當使用 transition 規則而不是 expire 規則時,s3cmd info 將無法正確顯示出它。您將需要使用 S3 Browser這樣的工具來查看生命周期規則。S3 Browser也可用于創建這些規則。使用 S3 Browser 的唯一缺點是它不允許使用自定義存儲類,例如使用“COLD”。它僅使用標準 Amazon S3 命名,因此在使用 transition 而不是 expire 規則時,最好使用 s3cmd 和 XML 文件。
- 可在此處找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx
Debug 配置
- 如果您想創建和測試其中的一些規則,最好使用 Ceph 內置的 RGW debug 模式 。這允許設置任意的時間段(通常為 60 秒)。通過該 debug 模式, 我們可以快速測試規則以確保它們完全按照預期進行,并提供快速調試的能力。
- 為此,您必須通過 SSH 連接到充當 RGW 的節點。進入系統盤后,使用 sudo 權限打開 ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相關配置
- 將以下行添加到 conf 文件中:
rgw lc debug interval = 60
- 這將生命周期間隔設置為每 60 秒到 24 小時關聯一次。另外,需要確認您是否使用多個 RGW,如果是的話,則將其添加到每個 RGW 的配置文件中。
- 保存配置文件后,重新啟動 RGW。將下面 octrgw1 替換為您的 RGW 的名稱。
root@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1
故障排除
如果您的生命周期規則有問題,很可能是因為規則編寫不正確,或者 RGW debug interval 不起作用。
為了檢查您的 RGW 生命周期規則的狀態,請在帶有管理員密鑰環的節點上運行以下命令。
root@octrgw1:~# radosgw-admin lc list
- 這列出了您已有的生命周期規則。如果它們未設置為“完成”,您可以通過運行以下命令強制 Ceph 啟動規則:
root@octrgw1:~# radosgw-admin lc process