Ceph (S3)對(duì)象存儲(chǔ)通過(guò)生命周期管理實(shí)現(xiàn)存儲(chǔ)的智能分層
本文轉(zhuǎn)載自微信公眾號(hào)「新鈦云服」,作者祝祥。轉(zhuǎn)載本文請(qǐng)聯(lián)系新鈦云服公眾號(hào)。
概述
- 本文詳細(xì)介紹了對(duì)象存儲(chǔ)的生命周期管理是什么、如何使用它以及使用 RGW 創(chuàng)建自定義存儲(chǔ)類(lèi)。
前提條件
- 本文假設(shè)您部署了一個(gè) Ceph 集群,其中包含 2 個(gè) RGW,并創(chuàng)建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。
- 如果沒(méi)有ceph存儲(chǔ)或者 RGW 未啟用,請(qǐng)參考Ceph官網(wǎng)文檔進(jìn)行安裝以及啟用您的 RGW 。
步驟
- 本文將詳細(xì)介紹我們?nèi)绾螌?duì)象遷移到不同類(lèi)別的存儲(chǔ)中,以便根據(jù)時(shí)間將它們分開(kāi)。例如,我們可以規(guī)定將超過(guò) N 天的對(duì)象移動(dòng)到稱(chēng)為“cold”的存儲(chǔ)類(lèi)。可以將對(duì)象設(shè)置為在一段時(shí)間后過(guò)期,而不是移動(dòng)到單獨(dú)的存儲(chǔ)類(lèi),然后將其發(fā)送到 Ceph 垃圾回收器進(jìn)行刪除。
- 除了刪除之外,輔助存儲(chǔ)類(lèi)可以綁定到一個(gè)具有更激進(jìn)的糾刪碼池的池,該池可以提供更好的存儲(chǔ)效率,但可能不會(huì)那么冗余。對(duì)于不再被認(rèn)為生產(chǎn)所需但仍希望保留副本而不是徹底刪除的文件,這可能是一個(gè)很好的折衷方案。
創(chuàng)建新的存儲(chǔ)類(lèi)和池
注意:如果您只希望創(chuàng)建過(guò)期和刪除對(duì)象的規(guī)則,而不是將它們移動(dòng)到新的存儲(chǔ)層,則可以跳過(guò)此部分,您可以直接轉(zhuǎn)到“創(chuàng)建 S3 生命周期管理策略”
- 本文假定默認(rèn) RGW 配置。如果您設(shè)置了自定義區(qū)域組或區(qū)域和放置目標(biāo),則必須將默認(rèn)名稱(chēng)替換為您配置的名稱(chēng)。
- 要確定您是否使用默認(rèn)配置,請(qǐng)運(yùn)行以下命令:
root@labosd1:~# radosgw-admin zonegroup list
root@labosd1:~# radosgw-admin zone list
root@labosd1:~# radosgw-admin zonegroup placement list
- 對(duì)于默認(rèn)配置,它將如下所示:


- 如果輸出不同,請(qǐng)務(wù)必在以下指南中將“default”和“default-placement”替換為正確的命名方案。
添加新的存儲(chǔ)類(lèi)
首先,在 Ceph RGW 結(jié)構(gòu)中創(chuàng)建一個(gè)新的存儲(chǔ)類(lèi),以便可以創(chuàng)建一個(gè)新池,然后將該池分配給新類(lèi)。本文將為其存儲(chǔ)類(lèi)使用名稱(chēng)“COLD”。您可能希望改用 AWS 使用的存儲(chǔ)類(lèi)。它們有預(yù)定義的存儲(chǔ)類(lèi)別,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html鏈接處獲取AWS常用的存儲(chǔ)類(lèi)。
root@labosd1:~# radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id default-placement \
--storage-class COLD

- 接下來(lái),為剛剛創(chuàng)建的存儲(chǔ)類(lèi)提供區(qū)域放置信息。此外,設(shè)置存儲(chǔ)類(lèi)“COLD”將綁定到的池的名稱(chēng)。尚未創(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)顯示在存儲(chǔ)類(lèi)“COLD”下分配了新的數(shù)據(jù)池。接下來(lái),創(chuàng)建新池。這可以通過(guò)儀表板輕松完成,您可以在其中選擇池類(lèi)型(副本或糾刪碼)、歸置組的數(shù)量、壓縮類(lèi)型等。只需確保池名稱(chēng)與上述命令中使用的名稱(chēng)匹配即可。

- 新的存儲(chǔ)類(lèi)現(xiàn)在已經(jīng)完成并且可以使用了。接下來(lái)的步驟是創(chuàng)建和設(shè)計(jì)一個(gè)生命周期,以完全按照您的意愿去做。本文將使用一些簡(jiǎn)單的示例。
創(chuàng)建 S3 生命周期管理策略
- 下一步將需要在系統(tǒng)上安裝 s3cmd。您還可以使用適用于 Windows 的 S3 browser之類(lèi)的工具,它允許您創(chuàng)建 s3 ACL 策略。
- 本文將使用 s3cmd。安裝 s3cmd,然后使用他們的內(nèi)置工具通過(guò) –configure 參數(shù)對(duì)其進(jìn)行配置。輸入將構(gòu)建 s3 策略的 s3 存儲(chǔ)桶的訪(fǎng)問(wèn)密鑰和密鑰,并將其指向正確的 RGW 端點(diǎn)和端口。
- 下面的示例將提供設(shè)置的格式。
- 確保“DNS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存儲(chǔ)桶或位置變量。
- 不需要默認(rèn)區(qū)域。您只需要在該配置處通過(guò) Enter 跳過(guò)。
- 在配置結(jié)束時(shí),s3cmd 將要求測(cè)試設(shè)置。如果成功,您可以繼續(xù)。S3cmd 將在 /root/.s3cfg 生成一個(gè)配置文件。
root@octrgw1:~# apt install s3cmd
root@octrgw1:~# s3cmd –configure

- 要測(cè)試功能,請(qǐng)運(yùn)行 s3cmd ls。這應(yīng)該列出與提供的訪(fǎng)問(wèn)密鑰和秘密密鑰相關(guān)的存儲(chǔ)桶。
生命周期配置
- 創(chuàng)建存儲(chǔ)類(lèi)并配置 s3cmd 后,我們現(xiàn)在可以創(chuàng)建一些生命周期管理規(guī)則。這些管理規(guī)則通過(guò) xml 文件創(chuàng)建,然后可以使用 s3cmd 將其傳遞到存儲(chǔ)桶。
- 可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)網(wǎng)站上找到更全面的生命周期規(guī)則列表。但是,請(qǐng)注意此頁(yè)面針對(duì)的是 Amazon S3,因此請(qǐng)記住,有些內(nèi)容可能不會(huì)與 Ceph 一致,但大多數(shù)規(guī)則都應(yīng)該適用于Ceph RGW。
- 使用生命周期管理工具,您可以選擇“transition”和“expiration”
- 您可以創(chuàng)建包含兩個(gè)步驟的規(guī)則。
- 為了創(chuàng)建這些生命周期規(guī)則,請(qǐng)創(chuàng)建一個(gè) XML 文件并在該 XML 文件中創(chuàng)建您的規(guī)則。
- 例如,可以制定一條規(guī)則,在 1 個(gè)月后將對(duì)象移到新的存儲(chǔ)類(lèi),然后在 2 個(gè)月后將它們過(guò)期以刪除。該生命周期規(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>
- 對(duì)于更簡(jiǎn)單的規(guī)則,您可以簡(jiǎn)單地指示刪除早于設(shè)定日期的對(duì)象。這條規(guī)則看起來(lái)類(lèi)似于:
<LifecycleConfiguration>
<Rule>
<ID>Expire after 1 year</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
- 最后,對(duì)于僅將對(duì)象移動(dòng)到新存儲(chǔ)類(lèi)而不將它們標(biāo)記為過(guò)期的規(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ī)則中,您還可以看到“前綴”匹配的配置。這允許靈活地在單個(gè)存儲(chǔ)桶上運(yùn)行所有不同的規(guī)則,并且只要使用正確的前綴上傳對(duì)象,該規(guī)則將僅適用于它。這可以讓您在單個(gè)存儲(chǔ)桶中擁有多個(gè)過(guò)期規(guī)則。這看起來(lái)像這樣:
<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ī)則會(huì)在 120 天后過(guò)期所有前綴為 dir1 的對(duì)象,并在 60 天后過(guò)期所有前綴為 dir2 的對(duì)象。
- 要使創(chuàng)建的規(guī)則生效,請(qǐng)?jiān)诎惭b了 s3cmd 的主機(jī)上創(chuàng)建一個(gè)新的 xml 文件。
- 復(fù)制上面的規(guī)則以及您的環(huán)境所需的更改。
例子:

- 保存文件。此文件保存為生命周期過(guò)期.xml。此策略將附加到的 s3 存儲(chǔ)桶且命名為 lifecycletest。
- 使用 s3cmd,在正確的存儲(chǔ)桶上設(shè)置生命周期策略。
root@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest

- 測(cè)試是否已設(shè)置生命周期。
root@octrgw1:~# s3cmd info s3://lifecycletest

當(dāng)使用 transition 規(guī)則而不是 expire 規(guī)則時(shí),s3cmd info 將無(wú)法正確顯示出它。您將需要使用 S3 Browser這樣的工具來(lái)查看生命周期規(guī)則。S3 Browser也可用于創(chuàng)建這些規(guī)則。使用 S3 Browser 的唯一缺點(diǎn)是它不允許使用自定義存儲(chǔ)類(lèi),例如使用“COLD”。它僅使用標(biāo)準(zhǔn) Amazon S3 命名,因此在使用 transition 而不是 expire 規(guī)則時(shí),最好使用 s3cmd 和 XML 文件。
- 可在此處找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx
Debug 配置
- 如果您想創(chuàng)建和測(cè)試其中的一些規(guī)則,最好使用 Ceph 內(nèi)置的 RGW debug 模式 。這允許設(shè)置任意的時(shí)間段(通常為 60 秒)。通過(guò)該 debug 模式, 我們可以快速測(cè)試規(guī)則以確保它們完全按照預(yù)期進(jìn)行,并提供快速調(diào)試的能力。
- 為此,您必須通過(guò) SSH 連接到充當(dāng) RGW 的節(jié)點(diǎn)。進(jìn)入系統(tǒng)盤(pán)后,使用 sudo 權(quán)限打開(kāi) ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相關(guān)配置
- 將以下行添加到 conf 文件中:
rgw lc debug interval = 60
- 這將生命周期間隔設(shè)置為每 60 秒到 24 小時(shí)關(guān)聯(lián)一次。另外,需要確認(rèn)您是否使用多個(gè) RGW,如果是的話(huà),則將其添加到每個(gè) RGW 的配置文件中。
- 保存配置文件后,重新啟動(dòng) RGW。將下面 octrgw1 替換為您的 RGW 的名稱(chēng)。
root@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1
故障排除
如果您的生命周期規(guī)則有問(wèn)題,很可能是因?yàn)橐?guī)則編寫(xiě)不正確,或者 RGW debug interval 不起作用。
為了檢查您的 RGW 生命周期規(guī)則的狀態(tài),請(qǐng)?jiān)趲в泄芾韱T密鑰環(huán)的節(jié)點(diǎn)上運(yùn)行以下命令。
root@octrgw1:~# radosgw-admin lc list
- 這列出了您已有的生命周期規(guī)則。如果它們未設(shè)置為“完成”,您可以通過(guò)運(yùn)行以下命令強(qiáng)制 Ceph 啟動(dòng)規(guī)則:
root@octrgw1:~# radosgw-admin lc process























