Ceph (S3)对象存储通过生命周期管理实现存储的智能分层
bigegpt 2025-01-11 10:30 7 浏览
云和安全管理服务专家新钛云服 祝祥原创
概述
- 本文详细介绍了对象存储的生命周期管理是什么、如何使用它以及使用 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”将绑定到的池的名称。尚未创建池。可以在下一步中完成。
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
- 输出应显示在存储类“COLD”下分配了新的数据池。接下来,创建新池。这可以通过仪表板轻松完成,您可以在其中选择池类型(副本或纠删码)、归置组的数量、压缩类型等。只需确保池名称与上述命令中使用的名称匹配即可。
- 新的存储类现在已经完成并且可以使用了。接下来的步骤是创建和设计一个生命周期,以完全按照您的意愿去做。本文将使用一些简单的示例。
创建 S3 生命周期管理策略
- 下一步将需要在系统上安装 s3cmd。您还可以使用适用于 Windows 的 S3 browser之类的工具,它允许您创建 s3 ACL 策略。
- 本文将使用 s3cmd。安装 s3cmd,然后使用他们的内置工具通过 –configure 参数对其进行配置。输入将构建 s3 策略的 s3 存储桶的访问密钥和密钥,并将其指向正确的 RGW 端点和端口。
- 下面的示例将提供设置的格式。
- 确保“DNS-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
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)