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