|
|
概述
9 p, h7 f- u8 E/ a本文详细介绍了对象存储的生命周期管理是什么、如何使用它以及使用 RGW 创建自定义存储类。" p% L7 q. q# D6 X; C0 | Y
前提条件
! z3 S( w6 [8 r2 J) e本文假设您部署了一个 Ceph 集群,其中包含 2 个 RGW,并创建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。
: J' W# i+ ]" Q% J! y如果没有ceph存储或者 RGW 未启用,请参考Ceph官网文档进行安装以及启用您的 RGW 。 e6 b @" X) c# T% a
步骤
1 A! Q& W, \# c: y0 N本文将详细介绍我们如何将对象迁移到不同类别的存储中,以便根据时间将它们分开。例如,我们可以规定将超过 N 天的对象移动到称为“cold”的存储类。可以将对象设置为在一段时间后过期,而不是移动到单独的存储类,然后将其发送到 Ceph 垃圾回收器进行删除。2 L2 i, i" ^( m( p5 @# i: t* S
除了删除之外,辅助存储类可以绑定到一个具有更激进的纠删码池的池,该池可以提供更好的存储效率,但可能不会那么冗余。对于不再被认为生产所需但仍希望保留副本而不是彻底删除的文件,这可能是一个很好的折衷方案。
# r( D/ J- S3 J0 b+ j5 f. J3 Y创建新的存储类和池6 {' E, S2 X3 X8 \6 I
注意:如果您只希望创建过期和删除对象的规则,而不是将它们移动到新的存储层,则可以跳过此部分,您可以直接转到“创建 S3 生命周期管理策略”+ T# k; u( V: [4 f) S. a& J
本文假定默认 RGW 配置。如果您设置了自定义区域组或区域和放置目标,则必须将默认名称替换为您配置的名称。
# _" D+ J" i v要确定您是否使用默认配置,请运行以下命令:
G- F- o( ~0 t/ J+ Kroot@labosd1:~# radosgw-admin zonegroup list
4 {3 Y8 N9 r: C7 q- U: [root@labosd1:~# radosgw-admin zone list
! b! P1 e! K7 H- J7 [) xroot@labosd1:~# radosgw-admin zonegroup placement list
1 D& B6 J4 `+ |: @+ W! \7 G9 p7 t# s对于默认配置,它将如下所示:
! {! l/ x% `5 Z1 _3 Q4 s) \6 ^6 c- ]6 x# N
+ ^3 Y) \3 z- s7 y% ]3 Q, y8 V3 E
如果输出不同,请务必在以下指南中将“default”和“default-placement”替换为正确的命名方案。
; |; S F _# _; P) I M" r6 R) ]添加新的存储类: y* j3 C' v5 }4 R5 a
首先,在 Ceph RGW 结构中创建一个新的存储类,以便可以创建一个新池,然后将该池分配给新类。本文将为其存储类使用名称“COLD”。您可能希望改用 AWS 使用的存储类。它们有预定义的存储类别,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html链接处获取AWS常用的存储类。
3 \, o; E/ e& c, Q1 i1 V: yroot@labosd1:~# radosgw-admin zonegroup placement add \( C) F* {6 {7 t O4 ^7 J! ~
--rgw-zonegroup default \
. k3 v! ~- L* w1 `--placement-id default-placement \9 N; T6 i4 R0 k/ M( j
--storage-class COLD
/ ~& |$ b- h* C" ~! ?9 ?
! s/ a! F5 q8 o4 W接下来,为刚刚创建的存储类提供区域放置信息。此外,设置存储类“COLD”将绑定到的池的名称。尚未创建池。可以在下一步中完成。
8 _1 u. f @3 W- `root@labosd1:~# radosgw-admin zone placement add \
/ e% E6 Z" _* r5 r8 |--rgw-zone default \
! ^+ @2 r% _. _: C6 d% F--placement-id default-placement \2 ?, S/ S7 f8 c, p
--storage-class COLD \; k4 {/ \/ O# { C- q5 {
--data-pool default.rgw.cold.data \
- v! J7 g( J6 e6 \--compression lz4
+ [# o$ `3 O+ k% a- `/ {/ O B* g2 V3 Y! F. |
输出应显示在存储类“COLD”下分配了新的数据池。接下来,创建新池。这可以通过仪表板轻松完成,您可以在其中选择池类型(副本或纠删码)、归置组的数量、压缩类型等。只需确保池名称与上述命令中使用的名称匹配即可。- V0 d' p! ?+ C. D3 ]5 V
7 C2 G, H. H$ a2 {6 W% z7 }新的存储类现在已经完成并且可以使用了。接下来的步骤是创建和设计一个生命周期,以完全按照您的意愿去做。本文将使用一些简单的示例。) _( F6 Q0 V- L0 n/ Y# w
创建 S3 生命周期管理策略, h* G( R) L. G
下一步将需要在系统上安装 s3cmd。您还可以使用适用于 Windows 的 S3 browser之类的工具,它允许您创建 s3 ACL 策略。( ?0 x6 X% |2 C, h
本文将使用 s3cmd。安装 s3cmd,然后使用他们的内置工具通过 –configure 参数对其进行配置。输入将构建 s3 策略的 s3 存储桶的访问密钥和密钥,并将其指向正确的 RGW 端点和端口。5 e3 m. g0 m% O1 a) n) \
下面的示例将提供设置的格式。9 _$ A7 j& d: z; j+ K' X
确保“DNS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存储桶或位置变量。
; h2 U; s W( z不需要默认区域。您只需要在该配置处通过 Enter 跳过。6 z' \3 w/ A% f- `& O+ p
在配置结束时,s3cmd 将要求测试设置。如果成功,您可以继续。S3cmd 将在 /root/.s3cfg 生成一个配置文件。
?/ V8 y* ~3 e* [# I: r: croot@octrgw1:~# apt install s3cmd7 M3 e" W* G& _: ^/ {7 n
root@octrgw1:~# s3cmd –configure, Y7 r9 w6 l. W& V
& O& T! L; b" n, J8 t要测试功能,请运行 s3cmd ls。这应该列出与提供的访问密钥和秘密密钥相关的存储桶。! P$ T6 {0 K; A. T6 L* x' b1 u
生命周期配置
$ m. O2 }& u7 a! a& D' o8 h# \创建存储类并配置 s3cmd 后,我们现在可以创建一些生命周期管理规则。这些管理规则通过 xml 文件创建,然后可以使用 s3cmd 将其传递到存储桶。" Y. r2 Y R- Q
可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)网站上找到更全面的生命周期规则列表。但是,请注意此页面针对的是 Amazon S3,因此请记住,有些内容可能不会与 Ceph 一致,但大多数规则都应该适用于Ceph RGW。5 v* \' I5 t- K$ ]9 \5 ^" K! i
使用生命周期管理工具,您可以选择“transition”和“expiration”
2 ] h: R; g# o0 p您可以创建包含两个步骤的规则。
# }: i% |( ~8 u为了创建这些生命周期规则,请创建一个 XML 文件并在该 XML 文件中创建您的规则。
, Z( Z0 j$ @3 h例如,可以制定一条规则,在 1 个月后将对象移到新的存储类,然后在 2 个月后将它们过期以删除。该生命周期规则如下所示:% z$ F3 b1 O/ \) }; S7 X. U
<LifecycleConfiguration>
2 X. r! u$ p7 W4 b1 u% U1 e/ J; s <Rule>
, m% ^7 ?* I1 Y0 A1 b <ID>Transition then Expire Rule</ID>7 I5 Y: \' A W6 w
<Filter>' b5 P8 B6 B: e! D: U! Z7 t6 T
<Prefix></Prefix>
" Y4 W Y& P4 D/ i- f2 H </Filter>
# U0 o1 i x5 `: b0 N <Status>Enabled</Status>& g2 M% m4 f" I% E2 Q; v0 A' ?
<Transition>
+ Y% ]! X& Z, f& G" x5 _" j <Days>30</Days>6 A! H3 l% z7 _1 ^4 G8 V
<StorageClass>COLD</StorageClass># c- L3 I# J3 [- ?+ X
</Transition>
! L4 r% U) T/ ~9 p <Expiration>
, q9 ?2 ]& U" B& E4 f* K <Days>60</Days>' _& L: {" l+ g, Q2 G
</Expiration>2 p' [9 I) @6 {( ^# }. n6 w
</Rule>3 Y8 p- k: N; G( u: Y" O
</LifecycleConfiguration>
$ m: C! m2 B l* \- t7 [: \. S0 G对于更简单的规则,您可以简单地指示删除早于设定日期的对象。这条规则看起来类似于:
- f7 ]* H; A, x. Q4 t+ Y; X O<LifecycleConfiguration>
7 @: b( u3 C Q; V; f <Rule>
/ J( g: S. H7 I' P* H% J( {. J <ID>Expire after 1 year</ID>
' A, ^2 Z: G1 h, _; ~0 M* R <Filter>" v( a& X0 W; F+ O/ }
<Prefix></Prefix>
$ a8 b9 l0 o1 W, H1 S7 y </Filter>
. P6 Z& h. @& S9 }: \1 Y <Status>Enabled</Status>- o) r/ K$ s* X0 Y7 Y! `8 c2 F
<Expiration>) w, L, U5 b! ?1 A& p6 R1 M
<Days>365</Days>; K' P! |4 Y! ^+ ?7 k3 j! Q
</Expiration>$ h7 P# ?- i8 ^0 i
</Rule>; b. U4 r2 @4 w M- W$ `( A
</LifecycleConfiguration>
% v5 y0 L$ `9 A! T h最后,对于仅将对象移动到新存储类而不将它们标记为过期的规则,您可以使用如下规则:. ^, `8 T# s5 j$ q
<LifecycleConfiguration>
$ y( p8 Q, G3 p <Rule>- n% @ D- W! I% q# K
<ID>Transition objects to COLD storage class</ID>" R- B' W& D- y2 U |7 H$ L; ]
<Filter>
) S1 _7 K; b; V" F2 ]' x <Prefix></Prefix>6 m- i5 D: R9 g$ R7 p9 D
</Filter>" v% f1 {# B: C9 Y# m) X
<Status>Enabled</Status>
4 b; G: K, B: I( P6 C `- y* @ <Transition>9 [. l7 s' N8 D: p# j
<Days>30</Days>: T8 z( P3 Y7 C$ o6 r' f3 R( `
<StorageClass>COLD</StorageClass>
( I( f) s$ `. ]( D </Transition>
, V0 [) v! S2 `9 b3 U( ]" T& K# A7 J </Rule>
0 ~% [9 B0 G1 f2 Z' I0 V</LifecycleConfiguration>5 j8 r/ \4 \5 u& g/ E6 K1 s+ d
在这些规则中,您还可以看到“前缀”匹配的配置。这允许灵活地在单个存储桶上运行所有不同的规则,并且只要使用正确的前缀上传对象,该规则将仅适用于它。这可以让您在单个存储桶中拥有多个过期规则。这看起来像这样:
0 I9 d9 E A$ }: N7 M7 F<LifecycleConfiguration>5 r2 `! G7 V& ?
<Rule>1 T, w* V8 H P$ I- S# _
<ID>prefix expiration</ID>
. l. ?$ M2 P# D# W! ~# _ <Filter>( [0 a2 ^! A& h \$ f
<Prefix>dir1</Prefix>
% h, q6 Q8 ~5 l3 @0 @# ?1 i# n </Filter>
- N3 F1 S- D1 I <Status>Enabled</Status>, L* ^. k* `4 n- N( o2 c- c- f
<Expiration>
3 O3 s! e( U6 S, `% F <Days>120</Days>5 p) g! i% o; o8 E7 }7 C& i) h5 @+ t
</Expiration>& S' n3 h1 o9 ]; w2 p2 H K
<Filter>6 G. H+ u+ M- o
<Prefix>dir2</Prefix>7 g! V" h3 d0 W3 H
</Filter>3 e4 U3 x# a9 r0 w) Y# w! P2 T1 o
<Status>Enabled</Status>+ H/ T8 F! Z8 D( [ O# s2 \
<Expiration>' v! F2 }9 ?! \2 h, @
<Days>60</Days> g. G2 r. I. ]
</Expiration>
6 `+ `, u1 {" O) O' c( b </Rule>
" g# J7 } I6 z/ S6 k% [: _) u</LifecycleConfiguration>
8 C, i2 ?, w& J# Q" ~7 ?上面的规则会在 120 天后过期所有前缀为 dir1 的对象,并在 60 天后过期所有前缀为 dir2 的对象。
; R4 u |! H- X u要使创建的规则生效,请在安装了 s3cmd 的主机上创建一个新的 xml 文件。, ?+ u' r7 e5 g( K7 X+ }' N" r$ i
复制上面的规则以及您的环境所需的更改。9 x5 c# U; F6 n+ R6 ^- O
例子:% Z. O9 ]7 h9 {0 J0 U( ^) r& |
! e8 m& l8 \) M. x+ Q; V/ U+ k
保存文件。此文件保存为生命周期过期.xml。此策略将附加到的 s3 存储桶且命名为 lifecycletest。0 d* I7 K) @7 v7 c+ \
使用 s3cmd,在正确的存储桶上设置生命周期策略。9 x* _- i9 n- k; h0 h
root@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest; [( H+ G% P+ }
% B! b% k h8 x
测试是否已设置生命周期。
& i& ]* U; W( f- a- Lroot@octrgw1:~# s3cmd info s3://lifecycletest4 W4 l, B+ ]5 z1 j7 B& r
0 G! f0 a$ F$ H. S0 l0 ?
当使用 transition 规则而不是 expire 规则时,s3cmd info 将无法正确显示出它。您将需要使用 S3 Browser这样的工具来查看生命周期规则。S3 Browser也可用于创建这些规则。使用 S3 Browser 的唯一缺点是它不允许使用自定义存储类,例如使用“COLD”。它仅使用标准 Amazon S3 命名,因此在使用 transition 而不是 expire 规则时,最好使用 s3cmd 和 XML 文件。( W0 _9 n2 z& p3 C& O
可在此处找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx) r/ ]7 l" J' J- P* s/ N" O3 X
Debug 配置
% { _5 j/ c; I7 d O @1 ~如果您想创建和测试其中的一些规则,最好使用 Ceph 内置的 RGW debug 模式 。这允许设置任意的时间段(通常为 60 秒)。通过该 debug 模式, 我们可以快速测试规则以确保它们完全按照预期进行,并提供快速调试的能力。4 _6 v' _, \& M b
为此,您必须通过 SSH 连接到充当 RGW 的节点。进入系统盘后,使用 sudo 权限打开 ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相关配置) _) C9 X- C% k Y' m3 a
将以下行添加到 conf 文件中:
& f7 Y' E6 n# drgw lc debug interval = 60
# X0 _0 q4 d+ |% d这将生命周期间隔设置为每 60 秒到 24 小时关联一次。另外,需要确认您是否使用多个 RGW,如果是的话,则将其添加到每个 RGW 的配置文件中。$ c( ^- I! C4 E7 b0 q) l& L
保存配置文件后,重新启动 RGW。将下面 octrgw1 替换为您的 RGW 的名称。
- U3 Y3 L) H) sroot@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1
- U" Q w3 H1 D+ @3 }& B故障排除
1 ^% \5 T- ^) ~3 e3 S% ^" {如果您的生命周期规则有问题,很可能是因为规则编写不正确,或者 RGW debug interval 不起作用。
/ j" u7 d6 ]6 Q; J4 b为了检查您的 RGW 生命周期规则的状态,请在带有管理员密钥环的节点上运行以下命令。3 ~6 s- p* C8 W$ Z
root@octrgw1:~# radosgw-admin lc list
t* h4 R- E+ M( y4 `这列出了您已有的生命周期规则。如果它们未设置为“完成”,您可以通过运行以下命令强制 Ceph 启动规则:; j+ L7 M1 Q, c) P- o
root@octrgw1:~# radosgw-admin lc process9 E/ O) e. X( Q3 Y5 U2 b( O) S
————————————————
/ i7 |) n5 [( @& j+ {0 I8 `5 c& ]# d0 G( \# ^% ]
|
|