找回密码
 注册
查看: 768|回复: 0

ceph 对象存储生命周期

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-5-28 11:17:40 | 显示全部楼层 |阅读模式
概述/ w  A, [2 A7 l  W
本文详细介绍了对象存储的生命周期管理是什么、如何使用它以及使用 RGW 创建自定义存储类。
( C- l" P: D. f8 [! e前提条件$ ?7 ?5 {9 v; G6 E0 ?
本文假设您部署了一个 Ceph 集群,其中包含 2 个 RGW,并创建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。
% T2 Q1 S$ A* }8 I) ~2 a* I( g) f( j如果没有ceph存储或者 RGW 未启用,请参考Ceph官网文档进行安装以及启用您的 RGW 。# |+ ?: @( F. a- {
步骤2 ?( X$ w. A. J1 N' k3 z  Z
本文将详细介绍我们如何将对象迁移到不同类别的存储中,以便根据时间将它们分开。例如,我们可以规定将超过 N 天的对象移动到称为“cold”的存储类。可以将对象设置为在一段时间后过期,而不是移动到单独的存储类,然后将其发送到 Ceph 垃圾回收器进行删除。
) W. @" ]% B" b  {' r除了删除之外,辅助存储类可以绑定到一个具有更激进的纠删码池的池,该池可以提供更好的存储效率,但可能不会那么冗余。对于不再被认为生产所需但仍希望保留副本而不是彻底删除的文件,这可能是一个很好的折衷方案。8 c: o- w% j$ c' U, ^- y1 E
创建新的存储类和池
* ]9 V( s- G  p4 f! ]1 v/ B注意:如果您只希望创建过期和删除对象的规则,而不是将它们移动到新的存储层,则可以跳过此部分,您可以直接转到“创建 S3 生命周期管理策略”" [/ K6 R* k8 R- C( E
本文假定默认 RGW 配置。如果您设置了自定义区域组或区域和放置目标,则必须将默认名称替换为您配置的名称。/ n/ m3 q( h1 ^* y
要确定您是否使用默认配置,请运行以下命令:4 d4 Q$ B, U" F4 ~: z/ s. H! d
root@labosd1:~# radosgw-admin zonegroup list( }# l3 Q* c; w' I" b( N% k
root@labosd1:~# radosgw-admin zone list
( u6 g9 p: ^' M- xroot@labosd1:~# radosgw-admin zonegroup placement list
" A& t! _  l% q7 |$ w对于默认配置,它将如下所示:: Q# T/ N/ H  o: P+ f) @
/ c) S# e, X. d/ T$ {5 Z

# f$ [, ]/ K4 z如果输出不同,请务必在以下指南中将“default”和“default-placement”替换为正确的命名方案。
! ^" r; @* a; @& t* E0 b添加新的存储类, N  @7 R2 v1 h8 B
首先,在 Ceph RGW 结构中创建一个新的存储类,以便可以创建一个新池,然后将该池分配给新类。本文将为其存储类使用名称“COLD”。您可能希望改用 AWS 使用的存储类。它们有预定义的存储类别,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html链接处获取AWS常用的存储类。: }  \. W- V& h- N
root@labosd1:~# radosgw-admin zonegroup placement add \' n( G( Y; c) H' b( E7 F& i+ N
--rgw-zonegroup default \) w' f( p+ j9 q; S
--placement-id default-placement \# O8 v- e0 r0 t& y! ?
--storage-class COLD& J1 f$ V7 p: _- O# h% x  Q4 ~

. E; j8 B: U- J- A6 s接下来,为刚刚创建的存储类提供区域放置信息。此外,设置存储类“COLD”将绑定到的池的名称。尚未创建池。可以在下一步中完成。
" z; o! G. @# i; lroot@labosd1:~# radosgw-admin zone placement add \4 h: v3 t0 V5 l7 B5 X
--rgw-zone default \+ ^& \' S4 k- I/ Q
--placement-id default-placement \
3 G- R; D) r5 v5 p3 l! q+ Y--storage-class COLD \
2 F/ m. s0 s+ r/ F# c3 y--data-pool default.rgw.cold.data \
; Z" {! Q- F2 n! M& n--compression lz45 H" F% |; E+ s% [+ n, A

7 J( U+ B3 X" {( J8 C3 q5 c5 T输出应显示在存储类“COLD”下分配了新的数据池。接下来,创建新池。这可以通过仪表板轻松完成,您可以在其中选择池类型(副本或纠删码)、归置组的数量、压缩类型等。只需确保池名称与上述命令中使用的名称匹配即可。& e6 H1 f# A# c8 r' o3 l
4 h8 @" `2 E* a. a( O  [* m
新的存储类现在已经完成并且可以使用了。接下来的步骤是创建和设计一个生命周期,以完全按照您的意愿去做。本文将使用一些简单的示例。
5 W5 b: z" h  ]6 C8 }  I创建 S3 生命周期管理策略
2 I7 i) v/ L( k& j- t2 P下一步将需要在系统上安装 s3cmd。您还可以使用适用于 Windows 的 S3 browser之类的工具,它允许您创建 s3 ACL 策略。% e  ~: |/ `3 Q$ s! v
本文将使用 s3cmd。安装 s3cmd,然后使用他们的内置工具通过 –configure 参数对其进行配置。输入将构建 s3 策略的 s3 存储桶的访问密钥和密钥,并将其指向正确的 RGW 端点和端口。% m' k; K% e6 B( Z7 n
下面的示例将提供设置的格式。7 d% D3 G( S4 Z6 q
确保“DNS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存储桶或位置变量。$ Q( Q+ \, H$ m$ ]& n0 Z
不需要默认区域。您只需要在该配置处通过 Enter 跳过。
- l8 U, u9 u4 f8 F9 o  o在配置结束时,s3cmd 将要求测试设置。如果成功,您可以继续。S3cmd 将在 /root/.s3cfg 生成一个配置文件。# Z9 S+ w, @6 x- f, w
root@octrgw1:~# apt install s3cmd
! `* h5 @  }# `) r# Aroot@octrgw1:~# s3cmd –configure
3 ?, Q9 q1 U2 a2 Z; h( m
' X6 r6 ~/ O( \" s3 D1 w要测试功能,请运行 s3cmd ls。这应该列出与提供的访问密钥和秘密密钥相关的存储桶。! C6 z1 M6 K+ N; r+ H4 g
生命周期配置. k4 n! I/ l% W0 S: A/ w; P
创建存储类并配置 s3cmd 后,我们现在可以创建一些生命周期管理规则。这些管理规则通过 xml 文件创建,然后可以使用 s3cmd 将其传递到存储桶。  a3 I7 @7 _* V' J
可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)网站上找到更全面的生命周期规则列表。但是,请注意此页面针对的是 Amazon S3,因此请记住,有些内容可能不会与 Ceph 一致,但大多数规则都应该适用于Ceph RGW。
1 w9 K- z7 d1 y5 Z# A8 o: K+ j使用生命周期管理工具,您可以选择“transition”和“expiration”7 }/ q% `8 F9 N( ]+ S5 n0 ^. B  r9 \
您可以创建包含两个步骤的规则。# O. S- W4 P! a" }
为了创建这些生命周期规则,请创建一个 XML 文件并在该 XML 文件中创建您的规则。
' t  T1 z/ x" j' T1 i( `例如,可以制定一条规则,在 1 个月后将对象移到新的存储类,然后在 2 个月后将它们过期以删除。该生命周期规则如下所示:# P% N, }" q2 O. m. g
<LifecycleConfiguration>0 R! D9 Q; j4 |) s  m2 v
  <Rule>
; Y* l  c% Z& r    <ID>Transition then Expire Rule</ID>2 \9 T9 U1 i3 }1 }6 f
    <Filter>) _( ]4 n. Z; Q& I; h  [) h' }3 g" u
       <Prefix></Prefix>9 s+ j2 i7 a/ j5 L, _9 E
    </Filter>5 D6 [4 f3 k* B" _
    <Status>Enabled</Status>
; R( m# Y% Q" o+ z, I    <Transition>
" Z# ^- p4 O- T      <Days>30</Days>% x( H6 e; m# F
      <StorageClass>COLD</StorageClass>- T0 G1 ?9 P6 o0 A2 T3 f( l! P) {
    </Transition>
9 P' E7 M% I# N, }    <Expiration>( `/ s8 p. s4 V7 p
      <Days>60</Days>
: o, S" J: G+ L- X" a    </Expiration>% S& i) F% T$ n8 x2 X6 ^
  </Rule>
  ~1 v( f: J& ~# W) x$ A2 X1 F</LifecycleConfiguration>
5 v+ B' x- |2 {对于更简单的规则,您可以简单地指示删除早于设定日期的对象。这条规则看起来类似于:
) Y' O3 a6 j' i7 N, {<LifecycleConfiguration>0 D% z1 `/ r' G# A
  <Rule>
7 n' Z  W1 l& ^" q: ^5 ]3 }    <ID>Expire after 1 year</ID>- X& \* \1 t+ A, Y
    <Filter>. t# r* N, M' ^3 c  u
       <Prefix></Prefix>
- l% l* o1 E3 u! {" d    </Filter>9 b0 F' P4 e8 P  Z! F; l7 M% l
    <Status>Enabled</Status>6 H$ H9 ]8 \/ f# _
    <Expiration>
5 n0 L! \% d3 \+ \      <Days>365</Days>6 V$ [( ^8 ^# T: e
    </Expiration>& W* r$ f" a$ ]! j
  </Rule>
# B" [2 b, Y3 B</LifecycleConfiguration>
; c: \4 N+ S$ t9 i7 o& x; W' h最后,对于仅将对象移动到新存储类而不将它们标记为过期的规则,您可以使用如下规则:
, m8 s- E6 s. e3 \' C( X7 g' T<LifecycleConfiguration>
! _: p7 o: h8 {0 `. j9 [  <Rule>' L# |# W. g; F/ {: P; n5 q
    <ID>Transition objects to COLD storage class</ID>
' l, R3 u9 O% f0 X& q    <Filter>8 f" l* ?& g" M$ e( |
       <Prefix></Prefix>
0 s/ [$ S" |+ h9 G2 y$ Q7 G    </Filter>, x# N  M. E% v9 N$ b; J
    <Status>Enabled</Status>
3 f1 G3 U" T$ D4 T4 H7 a    <Transition>
# B9 s$ ^1 z9 V5 E, h/ b      <Days>30</Days>8 y$ v- Y' Q' y+ G$ }% m
      <StorageClass>COLD</StorageClass>
4 L! R; D# v4 Y  y9 d( b    </Transition>. L! R5 i) X1 y+ d
  </Rule>2 q; E; u2 x: D0 {/ k% w
</LifecycleConfiguration>" i" p) [7 |! _9 D9 }$ T
在这些规则中,您还可以看到“前缀”匹配的配置。这允许灵活地在单个存储桶上运行所有不同的规则,并且只要使用正确的前缀上传对象,该规则将仅适用于它。这可以让您在单个存储桶中拥有多个过期规则。这看起来像这样:
3 f: O  g8 f$ w- C& R- x6 B7 h<LifecycleConfiguration># q$ d# C3 o. G& Q
  <Rule>
7 |& M5 a& a) m" m- {( R    <ID>prefix expiration</ID>
; ~; K$ C6 v8 K. r( ]8 v    <Filter>) d& P7 h4 j9 j$ |4 t; i  k
       <Prefix>dir1</Prefix>; |3 x. W) G! r% z6 P
    </Filter>. E2 a# }' N" E, w" V
    <Status>Enabled</Status>
$ o) c9 _( G) c3 e    <Expiration>
  K# {  t, Z  i* R" G4 X      <Days>120</Days>
& W4 m4 d. S# }0 {5 M8 J& L7 }    </Expiration>& z7 g- z, z7 Y5 P0 M# _
    <Filter>
: X  a7 j5 r" \+ j- H       <Prefix>dir2</Prefix>$ y; O' q+ Z( l& q9 c6 _
    </Filter>" H4 }! P7 ~. d/ y' H$ Z, u9 R9 R
    <Status>Enabled</Status>+ G( g: @3 m! u. Y7 A- n7 p$ N6 U9 m
    <Expiration>
" |9 I2 r" n& m; \/ S; f      <Days>60</Days>1 F  U5 h$ P6 y, H) o) |
    </Expiration>' e& G0 O' V8 |( V
  </Rule>3 s9 q0 d1 [3 ^- h
</LifecycleConfiguration>- A5 i2 {% l* e) `/ H' z
上面的规则会在 120 天后过期所有前缀为 dir1 的对象,并在 60 天后过期所有前缀为 dir2 的对象。
1 i. D( `! m) b0 ?! y要使创建的规则生效,请在安装了 s3cmd 的主机上创建一个新的 xml 文件。
& U$ x/ e5 E8 S& Q复制上面的规则以及您的环境所需的更改。) w  C" n5 n3 K+ C- e2 f1 q
例子:
& O) Y$ s+ T, |. z( }, c9 x$ h7 c: C) X% C! [  R4 x
保存文件。此文件保存为生命周期过期.xml。此策略将附加到的 s3 存储桶且命名为 lifecycletest。
$ f, V1 K8 f5 I使用 s3cmd,在正确的存储桶上设置生命周期策略。) z* l* z/ M5 h; L" _" P& \4 [  e
root@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest
+ H2 W+ w! o5 L, H  ~" c* c; M" E) c- g) ]% G
测试是否已设置生命周期。
1 y. ~5 b$ h  l- P4 b8 ~0 v  _root@octrgw1:~# s3cmd info s3://lifecycletest
, O+ _0 P' H# y3 @; Q/ S# k: `8 Z+ V" L+ K) R
当使用 transition 规则而不是 expire 规则时,s3cmd info 将无法正确显示出它。您将需要使用 S3 Browser这样的工具来查看生命周期规则。S3 Browser也可用于创建这些规则。使用 S3 Browser 的唯一缺点是它不允许使用自定义存储类,例如使用“COLD”。它仅使用标准 Amazon S3 命名,因此在使用 transition 而不是 expire 规则时,最好使用 s3cmd 和 XML 文件。8 ^# ?9 u; y; ]. O/ n2 u
可在此处找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx" b( o, ~* R( O; C! A) z: R' @* j
Debug 配置
" J: O3 j' ~5 [' I+ O如果您想创建和测试其中的一些规则,最好使用 Ceph 内置的 RGW debug 模式 。这允许设置任意的时间段(通常为 60 秒)。通过该 debug 模式, 我们可以快速测试规则以确保它们完全按照预期进行,并提供快速调试的能力。
+ p& i5 B: {/ |1 s1 i2 h为此,您必须通过 SSH 连接到充当 RGW 的节点。进入系统盘后,使用 sudo 权限打开 ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相关配置
+ s9 d9 c& y" J; G: e' J将以下行添加到 conf 文件中:) ^9 p7 t+ E" V/ y& g8 S2 ~* e
rgw lc debug interval = 60
9 M( f  A6 ~7 w这将生命周期间隔设置为每 60 秒到 24 小时关联一次。另外,需要确认您是否使用多个 RGW,如果是的话,则将其添加到每个 RGW 的配置文件中。- L4 M# `! r: o& u! {& I
保存配置文件后,重新启动 RGW。将下面 octrgw1 替换为您的 RGW 的名称。
" z  l! Y' r/ ^: k4 Nroot@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1
- o2 z& u7 q! l9 K" }: z' h& X故障排除
. J5 r6 c) y8 X7 E如果您的生命周期规则有问题,很可能是因为规则编写不正确,或者 RGW debug interval 不起作用。
/ k% [/ [  V" e+ d$ |! q) a' S为了检查您的 RGW 生命周期规则的状态,请在带有管理员密钥环的节点上运行以下命令。
) Y3 ^1 k) b$ R5 ^# ]  {root@octrgw1:~# radosgw-admin lc list
4 c, X0 h$ \5 R8 W; N, J3 l/ b5 Q2 Y这列出了您已有的生命周期规则。如果它们未设置为“完成”,您可以通过运行以下命令强制 Ceph 启动规则:
' y; m  [% [5 `root@octrgw1:~# radosgw-admin lc process
& N* F+ y6 O  N& v4 V" U————————————————7 Z5 j1 a( A- C, d1 H4 Q) ~+ y2 ]

% j/ O- W& F3 U; Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:06 , Processed in 0.021758 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表