7.9. bucket 管理
作为存储管理员,在使用 Ceph 对象网关时,您可以通过在用户之间移动 bucket 并将它们重命名来管理存储桶。您可以创建存储桶通知,在特定事件时触发。此外,您可以在 Ceph 对象网关中发现在存储集群的生命周期内可能会发生孤立或泄漏的对象。
当数百万对象上传到具有高最高速率的 Ceph 对象网关 bucket 时,使用 radosgw-admin bucket stats
命令报告不正确的 num_objects
。使用 radosgw-admin bucket list
命令,您可以更正 num_objects
参数的值。
radosgw-admin bucket stats
命令不会返回 Unknown error 2002
错误,并明确转换为 POSIX 错误 2,如 "No such file or directory" 错误。
在多站点集群中,从次要站点中删除存储桶不会与主站点同步元数据更改。因此,红帽建议只从主站点中删除存储桶,而不是从次要站点中删除存储桶。
7.9.1. 重命名存储桶 复制链接链接已复制到粘贴板!
您可以重命名存储桶。如果要在存储桶名称中允许下划线,请将 rgw_relaxed_s3_bucket_names
选项设置为 true
。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 安装 Ceph 对象网关软件.
- 一个现有存储桶。
流程
列出存储桶:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名存储桶:
语法
radosgw-admin bucket link --bucket=ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=USER_ID
radosgw-admin bucket link --bucket=ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=USER_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果存储桶位于租户中,还要指定租户:
语法
radosgw-admin bucket link --bucket=tenant/ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=TENANT$USER_ID
radosgw-admin bucket link --bucket=tenant/ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=TENANT$USER_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证存储桶已被重命名:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.2. 移动存储桶 复制链接链接已复制到粘贴板!
radosgw-admin bucket
实用程序提供在用户之间移动 bucket 的功能。为此,请将存储桶链接到新用户,并将 bucket 的所有权更改为新用户。
您可以移动存储桶:
7.9.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
- S3 存储桶。
- 各种租户和非租户用户。
7.9.2.2. 在非租户用户之间移动存储桶 复制链接链接已复制到粘贴板!
radosgw-admin bucket chown
命令提供将 bucket 的所有权及其包含的所有对象从一个用户更改为另一个用户的功能。为此,请从当前用户取消链接存储桶,将它链接到新用户,然后将 bucket 的所有权更改为新用户。
流程
将存储桶链接到一个新用户:
语法
radosgw-admin bucket link --uid=USER --bucket=BUCKET
radosgw-admin bucket link --uid=USER --bucket=BUCKET
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket link --uid=user2 --bucket=data
[ceph: root@host01 /]# radosgw-admin bucket link --uid=user2 --bucket=data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证存储桶已成功链接到
user2
:示例
[ceph: root@host01 /]# radosgw-admin bucket list --uid=user2 [ "data" ]
[ceph: root@host01 /]# radosgw-admin bucket list --uid=user2 [ "data" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将存储桶的所有权更改为新用户:
语法
radosgw-admin bucket chown --uid=user --bucket=bucket
radosgw-admin bucket chown --uid=user --bucket=bucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket chown --uid=user2 --bucket=data
[ceph: root@host01 /]# radosgw-admin bucket chown --uid=user2 --bucket=data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查以下命令输出中的
owner
行来验证data
存储桶的所有权是否已成功更改:示例
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=data
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.2.3. 在租户用户之间移动存储桶 复制链接链接已复制到粘贴板!
您可以在一个租户用户和另一个租户之间移动存储桶。
流程
将存储桶链接到一个新用户:
语法
radosgw-admin bucket link --bucket=CURRENT_TENANT/BUCKET --uid=NEW_TENANT$USER
radosgw-admin bucket link --bucket=CURRENT_TENANT/BUCKET --uid=NEW_TENANT$USER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/data --uid=test2$user2
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/data --uid=test2$user2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证存储桶已成功链接到
user2
:[ceph: root@host01 /]# radosgw-admin bucket list --uid=test$user2 [ "data" ]
[ceph: root@host01 /]# radosgw-admin bucket list --uid=test$user2 [ "data" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将存储桶的所有权更改为新用户:
语法
radosgw-admin bucket chown --bucket=NEW_TENANT/BUCKET --uid=NEW_TENANT$USER
radosgw-admin bucket chown --bucket=NEW_TENANT/BUCKET --uid=NEW_TENANT$USER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查以下命令输出中的
owner
行来验证data
存储桶的所有权是否已成功更改:[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test2/data
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test2/data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.2.4. 将存储桶从非租户用户移到租户的用户 复制链接链接已复制到粘贴板!
您可以将存储桶从非租户用户移到租户用户。
流程
可选:如果您还没有多个租户,您可以通过启用
rgw_keystone_implicit_tenants
并从外部租户访问 Ceph 对象网关来创建它们:启用
rgw_keystone_implicit_tenants
选项:示例
[ceph: root@host01 /]# ceph config set client.rgw rgw_keystone_implicit_tenants true
[ceph: root@host01 /]# ceph config set client.rgw rgw_keystone_implicit_tenants true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
s3cmd
或swift
命令从外部租户访问 Ceph 对象网关:示例
[ceph: root@host01 /]# swift list
[ceph: root@host01 /]# swift list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或使用
s3cmd
:示例
[ceph: root@host01 /]# s3cmd ls
[ceph: root@host01 /]# s3cmd ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从外部租户进行第一次访问可创建等效的 Ceph 对象网关用户。
将存储桶移到租户的用户:
语法
radosgw-admin bucket link --bucket=/BUCKET --uid='TENANT$USER'
radosgw-admin bucket link --bucket=/BUCKET --uid='TENANT$USER'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
data
存储桶是否已成功链接到tenanted-user
:示例
[ceph: root@host01 /]# radosgw-admin bucket list --uid='test$tenanted-user' [ "data" ]
[ceph: root@host01 /]# radosgw-admin bucket list --uid='test$tenanted-user' [ "data" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将存储桶的所有权更改为新用户:
语法
radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'
radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查以下命令输出中的
owner
行来验证data
存储桶的所有权是否已成功更改:示例
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test/data
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test/data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.3. 查找孤立和泄漏对象 复制链接链接已复制到粘贴板!
健康的存储集群没有任何孤立或泄漏的对象,但在某些情况下可能会发生孤立或泄漏的对象。
存储集群中存在孤立对象,并且具有与 RADOS 对象关联的对象 ID。但是,在 bucket 索引引用中,没有通过 S3 对象引用 RADOS 对象。例如,如果 Ceph 对象网关在操作的中间发生,这可能会导致一些对象变得孤立。另外,未发现的错误可能导致孤立对象发生。
您可以看到 Ceph 对象网关对象如何映射到 RADOS 对象。radosgw-admin
命令提供了一个用于搜索和生成这些潜在孤立或泄漏对象的列表的工具。使用 radoslist
子命令可显示 bucket 中存储的对象,或者存储集群中的所有 bucket。rgw-orphan-list
脚本显示池中的孤立对象。
radoslist
子命令将替代已弃用的 orphans find
和 orphans finish
子命令。
不要使用无索引存储桶 ,
因为所有对象都显示为 孤立
。
身份孤立对象的另一种方法是运行 rados -p <pool> ls | grep BUCKET_ID
命令
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 正在运行的 Ceph 对象网关.
流程
生成存储桶中保存数据的对象列表。
语法
radosgw-admin bucket radoslist --bucket BUCKET_NAME
radosgw-admin bucket radoslist --bucket BUCKET_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
radosgw-admin bucket radoslist --bucket mybucket
[root@host01 ~]# radosgw-admin bucket radoslist --bucket mybucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果省略 BUCKET_NAME,则会显示所有存储桶中的所有对象。
检查
rgw-orphan-list
的版本。示例
head /usr/bin/rgw-orphan-list
[root@host01 ~]# head /usr/bin/rgw-orphan-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 版本应该是
2023-01-11
或更新版本。创建一个需要生成孤立项列表的目录。
示例
mkdir orphans
[root@host01 ~]# mkdir orphans
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到之前创建的目录。
示例
cd orphans
[root@host01 ~]# cd orphans
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从池列表中,选择要在其中查找孤立的池。根据集群中的对象,此脚本可能会长时间运行。
示例
rgw-orphan-list
[root@host01 orphans]# rgw-orphan-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入池名称以搜索孤立项。
重要在使用
rgw-orphan-list
命令而非元数据池时,必须指定数据池。查看
rgw-orphan-list
工具用法的详细信息。'Synatx
rgw-orphan-list -h rgw-orphan-list POOL_NAME /DIRECTORY
rgw-orphan-list -h rgw-orphan-list POOL_NAME /DIRECTORY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
ls -l
命令,以验证以 error 结尾的文件应该为零长度,表示脚本运行没有任何问题。示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查列出的孤立对象。
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除孤立对象:
语法
rados -p POOL_NAME rm OBJECT_NAME
rados -p POOL_NAME rm OBJECT_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
rados -p default.rgw.buckets.data rm myobject
[root@host01 orphans]# rados -p default.rgw.buckets.data rm myobject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告验证您是否删除了正确的对象。运行
rados rm
命令从存储集群中移除数据。
7.9.4. 管理存储桶索引条目 复制链接链接已复制到粘贴板!
您可以使用 radosgw-admin bucket check
子命令,在 Red Hat Ceph Storage 集群中管理 Ceph 对象网关的存储桶索引条目。
与多部分上传对象关联的每个 bucket 索引条目都与其对应的 .meta
索引条目匹配。对于给定的多部分上传的所有部分,应该有一个 .meta
条目。如果无法找到对应的 .meta
条目,它会在输出中的一个部分列出"孤立"条目。
bucket 的统计信息存储在存储桶索引标头中。此阶段会加载这些标头,并迭代存储桶索引中的所有普通对象条目并重新计算统计信息。然后,它分别显示在标有 "existing_header" 和 "calculated_header" 的部分实际和计算统计部分,以便可以比较它们。
如果您将 --fix
选项与 存储桶检查
子命令搭配使用,它会从存储桶索引中删除 "orphaned" 条目,并使用它计算的标头中的现有统计信息覆盖。它会导致所有条目(包括版本中使用的多个条目)在输出中列出。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 正在运行的 Ceph 对象网关.
- 新创建的存储桶。
流程
检查特定存储桶的存储桶索引:
语法
radosgw-admin bucket check --bucket=BUCKET_NAME
radosgw-admin bucket check --bucket=BUCKET_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
radosgw-admin bucket check --bucket=mybucket
[root@rgw ~]# radosgw-admin bucket check --bucket=mybucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修复存储桶索引中的不一致,包括删除孤立对象:
语法
radosgw-admin bucket check --fix --bucket=BUCKET_NAME
radosgw-admin bucket check --fix --bucket=BUCKET_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
radosgw-admin bucket check --fix --bucket=mybucket
[root@rgw ~]# radosgw-admin bucket check --fix --bucket=mybucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.5. bucket 通知 复制链接链接已复制到粘贴板!
bucket 通知提供了一种方式,可以在 bucket 中发生特定事件时从 Ceph 对象网关发送信息。bucket 通知可以发送到 HTTP、AMQP0.9.1 和 Kafka 端点。必须创建一个通知条目,以便为特定存储桶上的事件和特定主题发送存储桶通知。可以在事件类型的子集上创建 bucket 通知,也可以默认为所有事件类型创建 bucket 通知。bucket 通知可以根据密钥前缀或后缀、匹配键的正则表达式、附加到对象或对象标签的元数据属性过滤出事件。bucket 通知具有 REST API,用于为 bucket 通知机制提供配置和控制接口。
bucket 通知 API 会被默认启用。如果明确设置了 rgw_enable_apis
配置参数,请确保包含 s3
和 notifications
。要验证这一点,请运行 ceph --admin-daemon /var/run/ceph/ceph-client.rgw.NAME.asok 配置 get rgw_enable_apis
命令。将 NAME 替换为 Ceph 对象网关实例名称。
使用 CLI 的主题管理
您可以管理 Ceph 对象网关存储桶的列表、获取和删除主题:
列出主题 : 运行以下命令列出所有主题的配置:
示例
[ceph: host01 /]# radosgw-admin topic list
[ceph: host01 /]# radosgw-admin topic list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取主题 : 运行以下命令以获取特定主题的配置:
示例
[ceph: host01 /]# radosgw-admin topic get --topic=topic1
[ceph: host01 /]# radosgw-admin topic get --topic=topic1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除主题 : 运行以下命令以删除特定主题的配置:
示例
[ceph: host01 /]# radosgw-admin topic rm --topic=topic1
[ceph: host01 /]# radosgw-admin topic rm --topic=topic1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意即使 Ceph 对象网关存储桶已配置至该主题,该主题也会被删除。
7.9.6. 创建存储桶通知 复制链接链接已复制到粘贴板!
在 bucket 级别上创建 bucket 通知。通知配置具有 Red Hat Ceph Storage 对象网关 S3 事件,即 ObjectCreated
和 ObjectRemoved
。它们需要与目的地发布,以发送存储桶通知。bucket 通知是 S3 操作。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 正在运行的 HTTP 服务器、RabbitMQ 服务器或 Kafka 服务器。
- 根级别访问权限.
- 安装 Red Hat Ceph Storage 存储对象网关.
- 用户 access key 和 secret key。
- 端点参数.
红帽支持 ObjectCreate
事件,如 放置
、post
、multipartUpload
和 copy
。红帽还支持 对象删除
事件,如 object_delete
和 s3_multi_object_delete
。
下面是创建存储桶通知的两种方式:
- 使用 boto 脚本
- 使用 AWS CLI
使用 boto 脚本
安装 python3-boto3 软件包:
示例
dnf install python3-boto3
[user@client ~]$ dnf install python3-boto3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 S3 存储桶。
创建 python 脚本
topic.py
,为http
、amqp
或kafka
协议创建 SNS 主题:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 python 脚本以创建主题:
示例
python3 topic.py
python3 topic.py
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 python 脚本
notification.py
,为s3:objectCreate
和s3:objectRemove
事件创建 S3 存储桶通知:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 python 脚本以创建存储桶通知:
示例
python3 notification.py
python3 notification.py
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在存储桶中创建 S3 对象。
获取通知配置:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:删除对象。
-
在
http
、rabbitmq
或kafka
接收器中验证对象删除事件。
-
在
使用 thr AWS CLI
创建主题:
语法
aws --endpoint=AWS_END_POINT sns create-topic --name NAME --attributes=ATTRIBUTES_FILE
aws --endpoint=AWS_END_POINT sns create-topic --name NAME --attributes=ATTRIBUTES_FILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
aws --endpoint=http://localhost sns create-topic --name test-kafka --attributes=file://topic.json
[user@client ~]$ aws --endpoint=http://localhost sns create-topic --name test-kafka --attributes=file://topic.json sample topic.json: {"push-endpoint": "kafka://localhost","verify-ssl": "False", "kafka-ack-level": "broker", "persistent":"true"} ref: https://docs.aws.amazon.com/cli/latest/reference/sns/create-topic.html
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建存储桶通知:
语法
aws s3api put-bucket-notification-configuration --bucket BUCKET_NAME --notification-configuration NOTIFICATION_FILE
aws s3api put-bucket-notification-configuration --bucket BUCKET_NAME --notification-configuration NOTIFICATION_FILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取通知配置:
语法
aws s3api --endpoint=AWS_ENDPOINT get-bucket-notification-configuration --bucket BUCKET_NAME
aws s3api --endpoint=AWS_ENDPOINT get-bucket-notification-configuration --bucket BUCKET_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.7. 其它资源 复制链接链接已复制到粘贴板!
- 如需更多信息,请参阅 Red Hat Ceph Storage 开发人员指南。