|
|
概述
# V! i0 i: n' i% r本文详细介绍了对象存储的生命周期管理是什么、如何使用它以及使用 RGW 创建自定义存储类。
( h* w _ B( [- N& {' \9 i前提条件 X2 y2 c6 A( w& x* w/ A
本文假设您部署了一个 Ceph 集群,其中包含 2 个 RGW,并创建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。
" `9 v3 k2 c7 M. j/ ~如果没有ceph存储或者 RGW 未启用,请参考Ceph官网文档进行安装以及启用您的 RGW 。
6 P7 ?8 b- u9 \& Q9 `' T; w4 T; D/ J- ?步骤
3 c& ]; t- N9 t0 f本文将详细介绍我们如何将对象迁移到不同类别的存储中,以便根据时间将它们分开。例如,我们可以规定将超过 N 天的对象移动到称为“cold”的存储类。可以将对象设置为在一段时间后过期,而不是移动到单独的存储类,然后将其发送到 Ceph 垃圾回收器进行删除。
9 j" S. n6 e" P除了删除之外,辅助存储类可以绑定到一个具有更激进的纠删码池的池,该池可以提供更好的存储效率,但可能不会那么冗余。对于不再被认为生产所需但仍希望保留副本而不是彻底删除的文件,这可能是一个很好的折衷方案。4 G* D$ _- Q6 w4 w. z8 T6 f5 X
创建新的存储类和池
8 \$ n& A/ J+ x X2 [% c6 r: u注意:如果您只希望创建过期和删除对象的规则,而不是将它们移动到新的存储层,则可以跳过此部分,您可以直接转到“创建 S3 生命周期管理策略”. _* X0 E6 x+ A) ]
本文假定默认 RGW 配置。如果您设置了自定义区域组或区域和放置目标,则必须将默认名称替换为您配置的名称。
. b" J p% f( z; z' ^$ y要确定您是否使用默认配置,请运行以下命令:
1 s7 M& y+ A, Nroot@labosd1:~# radosgw-admin zonegroup list8 A0 I! @+ ~7 p) }3 d. \. |
root@labosd1:~# radosgw-admin zone list
* \$ ?, X; y$ v4 K- y5 Lroot@labosd1:~# radosgw-admin zonegroup placement list
5 N2 g$ v/ B+ N0 ]对于默认配置,它将如下所示:
; t- S5 ?$ s. d, F n# \; n; Y/ C* ^% A, i# e' p
8 t8 f. g+ d7 i8 A9 V' d% W( X
如果输出不同,请务必在以下指南中将“default”和“default-placement”替换为正确的命名方案。 T+ W3 B: Z4 ^0 w6 l1 @) |9 }: }
添加新的存储类) \% {) Q V0 V2 D% j, Z
首先,在 Ceph RGW 结构中创建一个新的存储类,以便可以创建一个新池,然后将该池分配给新类。本文将为其存储类使用名称“COLD”。您可能希望改用 AWS 使用的存储类。它们有预定义的存储类别,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html链接处获取AWS常用的存储类。
3 s( w3 P. D' H0 F6 _& F$ R, S7 `: Z: wroot@labosd1:~# radosgw-admin zonegroup placement add \( b& P% e2 o0 T- m$ ?& u! J
--rgw-zonegroup default \
* x) H4 ^) v. }5 V3 g--placement-id default-placement \4 u4 _5 y D& }. `
--storage-class COLD1 u( j* A5 H6 L+ K
& t$ @+ Y, ?6 k2 P! q/ l
接下来,为刚刚创建的存储类提供区域放置信息。此外,设置存储类“COLD”将绑定到的池的名称。尚未创建池。可以在下一步中完成。
, v8 Q* v2 Q/ g6 j, w$ Eroot@labosd1:~# radosgw-admin zone placement add \% Q! S) r; L7 [: Y
--rgw-zone default \9 f+ K. }8 Q! o5 }
--placement-id default-placement \
# @4 P4 ]! j( b) y. N: L5 }--storage-class COLD \3 H2 k4 f B& ~3 ]8 C K
--data-pool default.rgw.cold.data \8 @9 ]/ S7 e, }; z( U" [) ]6 g
--compression lz41 F: ]% S; d+ S7 u' I
+ y% Z- t1 o6 ^* x8 }5 N输出应显示在存储类“COLD”下分配了新的数据池。接下来,创建新池。这可以通过仪表板轻松完成,您可以在其中选择池类型(副本或纠删码)、归置组的数量、压缩类型等。只需确保池名称与上述命令中使用的名称匹配即可。! [, q7 j' s7 |' \# {7 b( R
) o, t" f, @) D0 z/ N5 P+ p新的存储类现在已经完成并且可以使用了。接下来的步骤是创建和设计一个生命周期,以完全按照您的意愿去做。本文将使用一些简单的示例。
8 l) a4 Q) F3 ^创建 S3 生命周期管理策略
4 O7 _1 u3 N9 y: F' {# b下一步将需要在系统上安装 s3cmd。您还可以使用适用于 Windows 的 S3 browser之类的工具,它允许您创建 s3 ACL 策略。$ N: P4 }+ S4 ~6 E
本文将使用 s3cmd。安装 s3cmd,然后使用他们的内置工具通过 –configure 参数对其进行配置。输入将构建 s3 策略的 s3 存储桶的访问密钥和密钥,并将其指向正确的 RGW 端点和端口。
4 q# p+ g8 i4 d6 e8 M. r0 ^4 f" M! D下面的示例将提供设置的格式。/ J% j G& a9 @, E; N+ h3 h1 D* g0 j
确保“DNS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存储桶或位置变量。
$ J' }( v1 s6 l4 \0 [9 ^不需要默认区域。您只需要在该配置处通过 Enter 跳过。; }! p! L" e* ^' e) E/ a' q5 O1 C
在配置结束时,s3cmd 将要求测试设置。如果成功,您可以继续。S3cmd 将在 /root/.s3cfg 生成一个配置文件。0 E0 o" P: `4 v1 `
root@octrgw1:~# apt install s3cmd
7 H. f7 b& t) ]/ A+ n6 qroot@octrgw1:~# s3cmd –configure
1 P( T B" i, M1 A7 h8 y2 z
; u+ q9 W" ^6 K5 U5 b; n+ z6 G要测试功能,请运行 s3cmd ls。这应该列出与提供的访问密钥和秘密密钥相关的存储桶。
" h/ e. _& n- c& M; o生命周期配置# B7 [9 Z6 Q, c
创建存储类并配置 s3cmd 后,我们现在可以创建一些生命周期管理规则。这些管理规则通过 xml 文件创建,然后可以使用 s3cmd 将其传递到存储桶。
$ E* t" @( ^' G0 T, c/ g6 a, p& B可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)网站上找到更全面的生命周期规则列表。但是,请注意此页面针对的是 Amazon S3,因此请记住,有些内容可能不会与 Ceph 一致,但大多数规则都应该适用于Ceph RGW。2 s$ y' n+ |) i, M) G+ S
使用生命周期管理工具,您可以选择“transition”和“expiration”
4 k9 {+ U0 I3 H/ Q您可以创建包含两个步骤的规则。0 l/ ^( u G/ j4 _, s0 o
为了创建这些生命周期规则,请创建一个 XML 文件并在该 XML 文件中创建您的规则。
4 y/ {, j( ~" ~8 V例如,可以制定一条规则,在 1 个月后将对象移到新的存储类,然后在 2 个月后将它们过期以删除。该生命周期规则如下所示:
/ v" R* ~, x- I1 x% w; _<LifecycleConfiguration>
- w5 R+ q2 h- i% \2 W5 I/ d <Rule>! ]1 P5 y: M# P8 c
<ID>Transition then Expire Rule</ID>( @8 x) ?& K$ N+ y; V
<Filter>
, Z1 _$ E7 |0 ^) L% G$ G3 Q <Prefix></Prefix>0 F: T" R% {; |6 w( \5 O0 v' R
</Filter>
/ p- w* F; u0 X& R% u3 ` <Status>Enabled</Status>
D+ l$ }- e3 H) L. l i, E <Transition>
" H" Z q) Q( R# ` v1 a" F <Days>30</Days>9 [+ E# g/ h0 e. @( g' L4 Q
<StorageClass>COLD</StorageClass>
( X3 _) J% C( e! q N$ C j </Transition>
2 p: I3 |0 P6 y2 D* @1 Y <Expiration>
8 \. \. g; f; Z# }: g5 @ <Days>60</Days>* }, Y, |. z* R
</Expiration>
6 I* X( F. _) o" P2 V </Rule>+ ^2 U9 u, N- C0 g
</LifecycleConfiguration>* k" }! T! P& z2 `$ H5 c7 o/ t) {
对于更简单的规则,您可以简单地指示删除早于设定日期的对象。这条规则看起来类似于:. k1 B0 a7 t* h3 T8 t8 I2 x
<LifecycleConfiguration>
l8 s: q4 S# y' [2 J1 V1 Z! \# ~ <Rule>
& Y: _% R5 p. U <ID>Expire after 1 year</ID>8 G6 Z+ j( a) |" t
<Filter>4 J) [0 j+ x2 W" n; j; a
<Prefix></Prefix>! g0 {: ~. ~* ]' M
</Filter>) V. W q, ~4 P+ }6 V$ ^" u
<Status>Enabled</Status>
; I! g6 i8 F* \- O8 K3 o2 f7 t <Expiration>" c" i" |* @9 T9 s
<Days>365</Days>5 q+ A$ k. B+ L1 R" n
</Expiration>$ M/ k8 v [4 F9 q
</Rule>
1 w- G& O n; Y, ^) c</LifecycleConfiguration>. N$ F( f( z# \1 c& a3 l+ r" |
最后,对于仅将对象移动到新存储类而不将它们标记为过期的规则,您可以使用如下规则:/ ?7 w F$ ? C; m: {) G- Q# X
<LifecycleConfiguration># M* s5 ~0 n* b
<Rule>/ y3 Y _; n( @" t. n$ X% g
<ID>Transition objects to COLD storage class</ID>2 i) l+ ] i4 y
<Filter>
8 b' G7 S7 w) Q; g8 r& P4 I& o s <Prefix></Prefix>; Y8 n1 |. |# r- E1 ?: K
</Filter>
; q& S' m* U+ p0 v/ e0 L <Status>Enabled</Status>0 L& K' a4 m1 ?5 ]/ z9 P6 F6 V
<Transition>" \, y0 b$ [9 k6 z0 ? r$ c2 u/ u
<Days>30</Days>
4 y3 ^' t4 w" `. @ <StorageClass>COLD</StorageClass>
. `4 N- S4 Z, s; m. f </Transition>
& M8 c' ~& C2 u; j* q# N- q </Rule>% [& r6 m( v6 f$ A5 [; }# U
</LifecycleConfiguration>2 I! T0 u3 e: e1 P& x# F# ^
在这些规则中,您还可以看到“前缀”匹配的配置。这允许灵活地在单个存储桶上运行所有不同的规则,并且只要使用正确的前缀上传对象,该规则将仅适用于它。这可以让您在单个存储桶中拥有多个过期规则。这看起来像这样:
1 |- b& Q4 F! H<LifecycleConfiguration>* \+ C! k; q# v( X; C
<Rule>
5 @) p7 u5 k: S5 s% Y <ID>prefix expiration</ID># f. X. g! H& N# l/ M8 Y
<Filter>/ y# ^0 c" N) H9 S
<Prefix>dir1</Prefix>
4 w$ c1 V" T1 Y# @ </Filter>
- S. C, `5 y' y& w- I& V <Status>Enabled</Status>8 I. V: g$ ~! J2 W
<Expiration>) u8 F0 q2 G- }. m9 b1 s: R& w
<Days>120</Days>8 r8 U r' K8 n: I% X* H$ L2 T
</Expiration>4 w7 X& y) g2 Q
<Filter>% w$ O3 P7 {8 G R$ Q
<Prefix>dir2</Prefix>( l* l( |8 m7 ` W0 O
</Filter>; P% V% o# J, F$ S* u
<Status>Enabled</Status>4 N/ x$ X7 m8 {
<Expiration>( X$ e" r+ q% m# s$ h
<Days>60</Days>
& ~6 t1 I7 j4 c& B </Expiration> `! U& d/ B4 l4 U
</Rule>
; Y* g6 q& f! T8 z3 ^4 w3 Q</LifecycleConfiguration>4 [; p8 o/ P9 p8 {5 d4 I* f, R/ m0 p
上面的规则会在 120 天后过期所有前缀为 dir1 的对象,并在 60 天后过期所有前缀为 dir2 的对象。
1 ]2 B1 n: U& I% i7 i# v要使创建的规则生效,请在安装了 s3cmd 的主机上创建一个新的 xml 文件。
$ j9 V) M7 u. M( I ]: u1 i复制上面的规则以及您的环境所需的更改。
1 d: ~. }/ d, h/ n3 v例子:
( P4 ~# k. G# h
" q& r. _0 `' I. i保存文件。此文件保存为生命周期过期.xml。此策略将附加到的 s3 存储桶且命名为 lifecycletest。
4 b1 N) q! B" n使用 s3cmd,在正确的存储桶上设置生命周期策略。1 L$ m1 Q2 \3 f5 W4 O3 B' w# p
root@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest
O3 T8 S* M: j( _- H5 k k* X: [- q3 r, T1 L2 w9 N
测试是否已设置生命周期。* z+ h s7 ^/ Q
root@octrgw1:~# s3cmd info s3://lifecycletest
, K! n) u% d. A( ?. s _: T8 E" D. L0 k/ f. O
当使用 transition 规则而不是 expire 规则时,s3cmd info 将无法正确显示出它。您将需要使用 S3 Browser这样的工具来查看生命周期规则。S3 Browser也可用于创建这些规则。使用 S3 Browser 的唯一缺点是它不允许使用自定义存储类,例如使用“COLD”。它仅使用标准 Amazon S3 命名,因此在使用 transition 而不是 expire 规则时,最好使用 s3cmd 和 XML 文件。0 D/ E3 R. J I! s2 I. s
可在此处找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx
# w3 L) p6 f2 E/ Q0 B$ zDebug 配置
% R5 _7 E1 t6 X如果您想创建和测试其中的一些规则,最好使用 Ceph 内置的 RGW debug 模式 。这允许设置任意的时间段(通常为 60 秒)。通过该 debug 模式, 我们可以快速测试规则以确保它们完全按照预期进行,并提供快速调试的能力。& y0 Q0 N* Q5 X
为此,您必须通过 SSH 连接到充当 RGW 的节点。进入系统盘后,使用 sudo 权限打开 ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相关配置! u# Q+ {( E. d" y; k2 x# ?
将以下行添加到 conf 文件中:
9 w9 [6 B7 Q8 b) G0 U$ V- Jrgw lc debug interval = 60; q. ~) Z4 `$ [* N9 l( {: R1 ?' q
这将生命周期间隔设置为每 60 秒到 24 小时关联一次。另外,需要确认您是否使用多个 RGW,如果是的话,则将其添加到每个 RGW 的配置文件中。3 K) c7 R @* |
保存配置文件后,重新启动 RGW。将下面 octrgw1 替换为您的 RGW 的名称。5 V5 u; O l2 ]6 f
root@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1
2 v* }% ~# H- [3 `故障排除
" o& I5 T9 o) q) y) N如果您的生命周期规则有问题,很可能是因为规则编写不正确,或者 RGW debug interval 不起作用。- \+ o6 h# n7 z$ u! ^: P! x+ f
为了检查您的 RGW 生命周期规则的状态,请在带有管理员密钥环的节点上运行以下命令。1 X |/ O g1 f* B+ r: q- w8 p
root@octrgw1:~# radosgw-admin lc list0 o# y m7 T+ S, g3 E
这列出了您已有的生命周期规则。如果它们未设置为“完成”,您可以通过运行以下命令强制 Ceph 启动规则:3 _0 q+ f" R0 i
root@octrgw1:~# radosgw-admin lc process' M9 u; e4 U' }, s
———————————————— }$ i6 B1 [+ p* }. G: I. v1 s7 g1 P
# T! M( B/ f( p6 a# R |
|