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

ceph 对象存储生命周期

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-5-28 11:17:40 | 显示全部楼层 |阅读模式
概述
# V& ~! K" D- H1 D! P% Z本文详细介绍了对象存储的生命周期管理是什么、如何使用它以及使用 RGW 创建自定义存储类。
" q% c  R3 C4 Y$ Y( j8 ]4 j前提条件
6 l& W4 g* c, i. d; x  c. }本文假设您部署了一个 Ceph 集群,其中包含 2 个 RGW,并创建了所需的 RGW 池,例如 buckets.data、buckets.index、buckets.non-ec、rgw.log rgw.meta。! b7 j5 B% @1 L6 D  [& j2 f7 y
如果没有ceph存储或者 RGW 未启用,请参考Ceph官网文档进行安装以及启用您的 RGW 。
, ?8 Q  z% G/ f+ W6 q( t% n步骤4 g2 s9 U( P  T
本文将详细介绍我们如何将对象迁移到不同类别的存储中,以便根据时间将它们分开。例如,我们可以规定将超过 N 天的对象移动到称为“cold”的存储类。可以将对象设置为在一段时间后过期,而不是移动到单独的存储类,然后将其发送到 Ceph 垃圾回收器进行删除。
: X& `4 m. u; v2 p3 t. L' ]) a除了删除之外,辅助存储类可以绑定到一个具有更激进的纠删码池的池,该池可以提供更好的存储效率,但可能不会那么冗余。对于不再被认为生产所需但仍希望保留副本而不是彻底删除的文件,这可能是一个很好的折衷方案。
4 ^, Q/ i4 Q  ?5 Y2 g/ D创建新的存储类和池( b; ?) \- q& G3 h3 f/ ~, ~( d* T
注意:如果您只希望创建过期和删除对象的规则,而不是将它们移动到新的存储层,则可以跳过此部分,您可以直接转到“创建 S3 生命周期管理策略”1 D* Z6 \5 q0 o2 s" ~
本文假定默认 RGW 配置。如果您设置了自定义区域组或区域和放置目标,则必须将默认名称替换为您配置的名称。' `' m( f3 p+ D0 }2 L" Z! C8 t
要确定您是否使用默认配置,请运行以下命令:
  v+ Z1 l+ M" m4 Q) y/ q1 {' Rroot@labosd1:~# radosgw-admin zonegroup list
. o8 `$ O# `9 V. w" w6 o% L7 y, Droot@labosd1:~# radosgw-admin zone list
( E, e3 v& v8 @- {( croot@labosd1:~# radosgw-admin zonegroup placement list
9 O8 ?2 ]  j& h/ `8 s对于默认配置,它将如下所示:
3 @, I5 q) V9 k: ^3 H6 y8 A) b" F9 s! K
& ?  X! z$ `/ h( L. D: {* X) n
3 ^# E; e  f: L3 S! m" ?如果输出不同,请务必在以下指南中将“default”和“default-placement”替换为正确的命名方案。
9 u- R# X; t* ]& B0 @添加新的存储类2 u1 k( s, s/ b" s, M. O
首先,在 Ceph RGW 结构中创建一个新的存储类,以便可以创建一个新池,然后将该池分配给新类。本文将为其存储类使用名称“COLD”。您可能希望改用 AWS 使用的存储类。它们有预定义的存储类别,例如 1A-Standard。你可以在https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html链接处获取AWS常用的存储类。$ i+ q# _$ P! [9 ?
root@labosd1:~# radosgw-admin zonegroup placement add \$ d- H: T& b8 [: Z4 e, o4 t4 h5 b
--rgw-zonegroup default \
8 I) r+ d* Z2 e9 s' t. \--placement-id default-placement \
- X6 l: ~# f" I. x( w--storage-class COLD
& e4 S7 e5 {- F3 m9 v/ Z2 C3 ~  e# a
接下来,为刚刚创建的存储类提供区域放置信息。此外,设置存储类“COLD”将绑定到的池的名称。尚未创建池。可以在下一步中完成。
) X1 ?' J( p6 U+ u0 [4 Z# Yroot@labosd1:~# radosgw-admin zone placement add \
8 g2 f9 q0 f* w' v- z3 M--rgw-zone default \1 o# g6 s+ E& K# R7 r8 p! k
--placement-id default-placement \
0 `7 [6 w. ]  R--storage-class COLD \! p9 @3 P& U1 F1 g
--data-pool default.rgw.cold.data \9 O7 B; a+ N, X( o3 K
--compression lz4
/ K  D: a7 P/ U5 w& T0 @5 k# [! F3 h# ~# b8 C2 \
输出应显示在存储类“COLD”下分配了新的数据池。接下来,创建新池。这可以通过仪表板轻松完成,您可以在其中选择池类型(副本或纠删码)、归置组的数量、压缩类型等。只需确保池名称与上述命令中使用的名称匹配即可。
* X/ b5 |$ c" S. C
9 w5 b, _% ^/ P% J' x/ G新的存储类现在已经完成并且可以使用了。接下来的步骤是创建和设计一个生命周期,以完全按照您的意愿去做。本文将使用一些简单的示例。
  g9 }; x5 q0 u! w# t% l( [创建 S3 生命周期管理策略
5 t7 h! r. s6 p* ~下一步将需要在系统上安装 s3cmd。您还可以使用适用于 Windows 的 S3 browser之类的工具,它允许您创建 s3 ACL 策略。" j# j2 v: C( r, C
本文将使用 s3cmd。安装 s3cmd,然后使用他们的内置工具通过 –configure 参数对其进行配置。输入将构建 s3 策略的 s3 存储桶的访问密钥和密钥,并将其指向正确的 RGW 端点和端口。
& [- }- A. z6 U3 Z, I下面的示例将提供设置的格式。
2 Y- R( D! @4 N% t. q确保“DNS-style bucket+hostname:port template”只是您的 RGW 的 IP 地址和它使用的端口,而不使用存储桶或位置变量。
9 R, W5 \4 d/ C+ u4 f不需要默认区域。您只需要在该配置处通过 Enter 跳过。( [6 q; M  Y' n7 A
在配置结束时,s3cmd 将要求测试设置。如果成功,您可以继续。S3cmd 将在 /root/.s3cfg 生成一个配置文件。
' v* [! \' G/ B. J5 oroot@octrgw1:~# apt install s3cmd+ y2 z8 L7 y( S, z# L
root@octrgw1:~# s3cmd –configure
7 V* Z! D# V4 s. C, Z1 H6 |1 b
. f9 ]) V5 M- ~* J; }* s. F# V$ k要测试功能,请运行 s3cmd ls。这应该列出与提供的访问密钥和秘密密钥相关的存储桶。7 G/ A5 ^: J0 W
生命周期配置
- ~  N( B% @. f: }' ^1 _, q6 C创建存储类并配置 s3cmd 后,我们现在可以创建一些生命周期管理规则。这些管理规则通过 xml 文件创建,然后可以使用 s3cmd 将其传递到存储桶。; g9 {; c# w. t+ [& {; r1 @/ `( F' A
可以在 AWS (https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)网站上找到更全面的生命周期规则列表。但是,请注意此页面针对的是 Amazon S3,因此请记住,有些内容可能不会与 Ceph 一致,但大多数规则都应该适用于Ceph RGW。
: {: R# a, m. ~6 t3 K+ Y1 A使用生命周期管理工具,您可以选择“transition”和“expiration”
. x, K) ~% i! e$ K( k- {您可以创建包含两个步骤的规则。( ^, p0 H7 N3 n. }+ f- V
为了创建这些生命周期规则,请创建一个 XML 文件并在该 XML 文件中创建您的规则。
) n* F4 ]! _0 z+ H! Q% M: H例如,可以制定一条规则,在 1 个月后将对象移到新的存储类,然后在 2 个月后将它们过期以删除。该生命周期规则如下所示:, E4 b2 R  g( ?# C
<LifecycleConfiguration>8 N- h6 }& f5 D' S8 |
  <Rule>
2 L! V& m9 t9 A% m, }    <ID>Transition then Expire Rule</ID>( Q$ g' e9 P: i. S0 m& l! S2 A
    <Filter>
% w" i+ T. Z; F3 O( T       <Prefix></Prefix>
8 @2 J* g% k/ ~4 n8 i    </Filter>  z9 w/ Y, k. ]/ x( f5 Q3 i) c
    <Status>Enabled</Status>6 b, m0 L# o( A/ O5 l- K4 F2 Z
    <Transition>! N$ v6 @5 \7 ^- f1 i
      <Days>30</Days>* X9 M) q6 H9 D( R- s
      <StorageClass>COLD</StorageClass>; c( K6 f# y# n
    </Transition>
. r# |) G% x; |    <Expiration>/ i! Q0 P$ L6 ^) v; X: \2 j
      <Days>60</Days>
1 z! U. C1 f/ }: u' a4 [    </Expiration>
2 _2 [& m8 S. _5 O8 t& `( T  </Rule>, R( q  |+ e9 z9 ~2 L* \: w
</LifecycleConfiguration>
* Y+ E* b; g: v2 j* @( D/ Y- o对于更简单的规则,您可以简单地指示删除早于设定日期的对象。这条规则看起来类似于:* t9 B) |+ y% T& r$ Q
<LifecycleConfiguration>
+ w4 f/ Y: W. q/ C  <Rule>
0 z' R7 m' Z/ q$ r! e: e# e% u, [    <ID>Expire after 1 year</ID>( h0 c  R6 V2 u
    <Filter>
, I2 `) i! P2 ]" n  _0 P       <Prefix></Prefix>
2 F+ Y1 h5 J5 ]7 i& R    </Filter>
3 N4 V8 v0 M$ ]  K! }3 }# [+ P    <Status>Enabled</Status>3 @, N) H: o' m1 Q( h3 x  f7 A/ P
    <Expiration>
. @) r0 O! t9 s/ y0 Q% N9 m      <Days>365</Days>
% I0 E! s& G' E* q" X! @    </Expiration>- L2 x  Y# |; D, ~2 J
  </Rule>
' G( i6 O! Q- R- N</LifecycleConfiguration>- E; e5 Z' X# a' ^# n4 }' l
最后,对于仅将对象移动到新存储类而不将它们标记为过期的规则,您可以使用如下规则:
4 G& S) n( ]) n( E<LifecycleConfiguration>1 {4 b1 o* q% w& x8 K  m7 }
  <Rule>
% n4 b! K  K* {1 R    <ID>Transition objects to COLD storage class</ID>
; I# w! B5 V) Z/ O6 |, G# X- j    <Filter>
9 Z4 b7 H0 M' c# O+ X' w) g       <Prefix></Prefix>$ c: ^7 f* f- b8 `6 {& p
    </Filter>
4 y5 \; s3 P2 h    <Status>Enabled</Status>
8 d, H' Q  |5 q$ y9 @) A    <Transition>* {8 T, G) d0 F* X/ d' A2 v
      <Days>30</Days>' @" W" t5 S2 \
      <StorageClass>COLD</StorageClass>
3 g0 l& m- f9 h7 e  V( o7 Y3 q    </Transition>
$ ]; |3 z- }/ H, }  </Rule>, V6 B1 c4 y0 `' i* j/ Q; D9 m' ]
</LifecycleConfiguration>* Z3 r2 g: p  k
在这些规则中,您还可以看到“前缀”匹配的配置。这允许灵活地在单个存储桶上运行所有不同的规则,并且只要使用正确的前缀上传对象,该规则将仅适用于它。这可以让您在单个存储桶中拥有多个过期规则。这看起来像这样:# o5 k( s7 O6 Q$ e" w8 u+ ^2 v- Q
<LifecycleConfiguration>5 {2 b( s7 y# _) h; f
  <Rule>6 u8 v: E% ]1 o/ i/ _' x
    <ID>prefix expiration</ID>! t' `! `) }1 p. V+ a& s
    <Filter># ~, a: P1 H& m5 v& ^. O+ m
       <Prefix>dir1</Prefix>/ F& U" }# L0 R+ a- p; j
    </Filter>
; X  z0 w6 P6 w% O9 ?5 z    <Status>Enabled</Status>* \5 p7 e' m. h. R
    <Expiration>
( J: j% {3 m9 e3 W8 v! Y      <Days>120</Days>
! H, n$ [0 l6 Z' T) k2 x    </Expiration>
5 A6 U. Q) u: G7 C  J    <Filter>" o3 ]2 X# a* |3 b
       <Prefix>dir2</Prefix>
. i6 T- K% P1 E0 k    </Filter>' m+ x9 q/ m  |. |' E2 B
    <Status>Enabled</Status>
. m  `0 v4 T; C, ?0 L    <Expiration>
6 \! X3 f& v' T5 v% |0 ^2 R* g$ V4 j) c: b      <Days>60</Days>
1 q, _1 \- Q( T) x9 R1 [    </Expiration>
: H/ n, ^4 ]$ M" y* s, q) L0 Z7 C  </Rule>8 }# e: \- o. J, ~
</LifecycleConfiguration>+ t/ v$ d+ z8 L- N; R3 `
上面的规则会在 120 天后过期所有前缀为 dir1 的对象,并在 60 天后过期所有前缀为 dir2 的对象。8 E3 B! |4 Q: [! S+ t3 B
要使创建的规则生效,请在安装了 s3cmd 的主机上创建一个新的 xml 文件。$ U9 A$ M7 u8 P8 K
复制上面的规则以及您的环境所需的更改。! N. l  Y5 {, Z2 L6 O4 T
例子:
( j1 n; V: _0 E; Q3 n4 r+ G' f4 Q# l3 ^' [6 n* ^* F
保存文件。此文件保存为生命周期过期.xml。此策略将附加到的 s3 存储桶且命名为 lifecycletest。: T8 @0 r6 @1 l% v6 v. K" i4 p
使用 s3cmd,在正确的存储桶上设置生命周期策略。
% y8 W* v. P3 }& U' ?+ Z" ]7 Jroot@octrgw1:~# s3cmd setlifecycle lifecycle-expire.xml s3://lifecycletest: Q% w' Z" s0 U0 ~" H+ P# j6 S

6 p7 l: z- ]2 _$ o/ N1 D测试是否已设置生命周期。1 t; ]5 O( a6 U* {& j
root@octrgw1:~# s3cmd info s3://lifecycletest
5 m0 K$ \* O7 x2 G
6 l: M, F. t% V5 l当使用 transition 规则而不是 expire 规则时,s3cmd info 将无法正确显示出它。您将需要使用 S3 Browser这样的工具来查看生命周期规则。S3 Browser也可用于创建这些规则。使用 S3 Browser 的唯一缺点是它不允许使用自定义存储类,例如使用“COLD”。它仅使用标准 Amazon S3 命名,因此在使用 transition 而不是 expire 规则时,最好使用 s3cmd 和 XML 文件。
6 ]; P5 o  ]1 L- x3 {  p9 `. f; V可在此处找到 s3 Browser生命周期管理指南:https ://s3browser.com/bucket-lifecycle-configuration.aspx
& {) n4 o; K# k2 kDebug 配置" y2 b( G0 ?( H4 J
如果您想创建和测试其中的一些规则,最好使用 Ceph 内置的 RGW debug 模式 。这允许设置任意的时间段(通常为 60 秒)。通过该 debug 模式, 我们可以快速测试规则以确保它们完全按照预期进行,并提供快速调试的能力。
: o: F( C- ~) ?' g9 e$ [  f$ d$ A' P' {为此,您必须通过 SSH 连接到充当 RGW 的节点。进入系统盘后,使用 sudo 权限打开 ceph.conf。它可以在 /etc/ceph/ceph.conf 中找到相关配置
% m) s" U# O0 I: G将以下行添加到 conf 文件中:
( ?. R( S) C4 S# K5 Grgw lc debug interval = 60$ a- g4 I7 P3 z5 R: a8 g
这将生命周期间隔设置为每 60 秒到 24 小时关联一次。另外,需要确认您是否使用多个 RGW,如果是的话,则将其添加到每个 RGW 的配置文件中。7 E' R0 H+ K  U' n* B
保存配置文件后,重新启动 RGW。将下面 octrgw1 替换为您的 RGW 的名称。
3 E2 W- v( X* y3 }root@octrgw1:~# systemctl restart ceph-radosgw@rgw.octrgw1+ m" D# y" p& y. ?( p
故障排除
; p7 O! I( `& G' ]如果您的生命周期规则有问题,很可能是因为规则编写不正确,或者 RGW debug interval 不起作用。$ _" h- t( ?1 M$ x: T
为了检查您的 RGW 生命周期规则的状态,请在带有管理员密钥环的节点上运行以下命令。
1 O+ m/ i+ s# rroot@octrgw1:~# radosgw-admin lc list! k, V* U$ ?9 a# r4 f, y. r
这列出了您已有的生命周期规则。如果它们未设置为“完成”,您可以通过运行以下命令强制 Ceph 启动规则:
( g4 Z* e! C1 oroot@octrgw1:~# radosgw-admin lc process5 {: R9 v9 X" V9 l/ B' ?: I
————————————————$ j" N& Z4 X  y/ \6 T

+ _+ u: b9 N- K5 i' m  {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:08 , Processed in 0.017591 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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