ceph-rgw之indexless
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ceph-rgw之indexless相关的知识,希望对你有一定的参考价值。
参考技术A 很多人对ceph,rgw的性能问题不太满意,主要是index pool(默认是存在一个shard里面,当一个shard越来越大时,一种极端情况是把相关的osd占满)的瓶颈,当然网上也有人提到了产生一些问题,主要问题如下:对index pool进行scrub或deep-scrub的时候,如果shard对应的Object过大,会极大消耗底层存储设备性能,造成io请求超时。
底层deep-scrub的时候耗时过长,会出现request blocked,导致大量http请求超时而出现50x错误,从而影响到整个RGW服务的可用性。
当坏盘或者osd故障需要恢复数据的时候,恢复一个大体积的shard文件将耗尽存储节点性能,甚至可能因为OSD响应超时而导致整个集群出现雪崩。
考虑一个场景
如果你向ceph 上传对象时,同时也在本地或别的地方记录了元数据信息,你就可以避免使用index pool,同时也分担了ceph存储的压力。
使用indexless将会是一个不错的选择。
网址: http://www.ksingh.co.in/blog/2017/01/30/ceph-indexless-bucket-part-2/
这个网址写的已经很全了。我就不费太多口舌。
验证是否设置好indexless,可以通过radosgw-admin 去查
例如:radosgw-admin bucket stats --bucket=bucket3
有一个index_type,normal是具有索引的对象存储,别的indexless的。
另外一种是采取分片+快池的方式详情请查看 https://cloud.tencent.com/developer/article/1032858
1.设置完indexless 不会对之前的buket的类型有影响
2.通过indexless 设置的bucket 如果里面有数据,不会给你警告,会给你直接删除bucket,object会处于游离态
3.普通 bucket 可以通过上述命令查看数量,但是indexless 看不了,usage信息不存在。
4.删除bucket不会删除里面的对象 ,但是删除方式现在只能管理员操作rgw pool来删除,需要结合一定pool 文件命名格式去删,查看rgw object bucket 存储位置以及在pool里面对象名称命名方式 (后续文档介绍),当然通过你得知道下bucket_id。
5.设置生命周期,未到时间点人为删除bucket ,删除bucket ,内部游离的object 不会随生命周期而操作。
如何使用ansible部署ceph-rgw
参考技术A目前ceph 12、14版本官方建议使用ansible代替ceph-deploy进行组件部署。
用户管理
用户创建
执行下面的命令新建一个用户 (S3 接口):
实例如下:
获取用户信息
要获取一个用户的信息,你必须使用user info子命令并且制定一个用户ID(—uid=username) .
修改用户信息
要修改一个用户的信息,你必须指定用户的ID (—uid=username),还有 你想要修改的属性值。典型的修改项主要是access和secret密钥,邮件地址,显示名称和访问级别。举例如下:
用户启用/停用
当你创建了一个用户,用户默认情况下是处于启用状态的。然而,你可以暂停用户权限并在以后随时重新启用它们。暂停一个用户,使用user suspend子命令然后指定用户的 ID:
要重新启用已经被停用的用户,使用 user enable 子命令并指明用户的 ID.
新建一个密钥
要为用户新建一个密钥,你需要使用key create子命令。对于用户来说,需要指明用户的ID以及新建的密钥类型为s3。要为子用户新建一个密钥,则需要指明子用户的 ID以及密钥类型为swift。实例如下:
新建/删除 ACCESS 密钥
用户和子用户要能使用S3和Swift接口,必须有access密钥。在你新建用户或者子用户的时候,如果没有指明access和secret密钥,这两个密钥会自动生成。你可能需要新建access和/或secret密钥,不管是手动指定还是自动生成的方式。你也可能需要删除一个access和secret。可用的选项有:
删除用户
删除用户时,这个用户以及他的子用户都会被删除。当然,如果你愿意的话可以只删除子用户。要删除用户(及其子用户),可使用user rm子命令并指明用户ID:
只想删除子用户时,可使用 subuser rm 子命令并指明子用户ID。
添加/删除管理权限
Ceph存储集群提供了一个管理API,它允许用户通过REST API执行管理功能。默认情况下,用户没有访问这个API的权限。要启用用户的管理功能,需要为用户提供管理权限。
执行下面的命令为一个用户添加管理权限:
你可以给一个用户添加对用户、bucket、元数据和用量(存储使用信息)等数据的 读、写或者所有权限。举例如下:
实例如下:
要删除某用户的管理权限,可用下面的命令:
展示用户列表
radosgw-admin user list
配额管理
设置用户配额
在你启用用户的配额前 ,你需要先设置配额参数。例如:
实例如下:
最大对象数和最大存储用量的值是负数则表示不启用指定的配额参数。
设置 BUCKET 配额
Bucket 配额作用于用户的某一个 bucket,通过 uid 指定用户。这些配额设置是独立于用户之外的。:
最大对象数和最大存储用量的值是负数则表示不启用指定的配额参数。
启用/禁用用户配额
在你设置了用户配额之后,你可以启用这个配额。实例如下:
你也可以禁用已经启用了配额的用户的配额。举例如下:
读取/写入全局配额
你可以在period配置中读取或写入全局配额设置,查看全局配额配置可以用:
全局配额选项可以用global quota系列命令修改,如quota set、quota enable和quota disable命令。
需要重启集群才能生效
部署方法
本文档使用 ceph nautilus 作环境。
使用ansible部署
1.复制group_vars目录下的rgw.yml.sample到该目录下,并修改名字为rgw.yml。
2.rgw.yml中rgw_create_pools项取消注释,ansible会根据配置文件创建对应的池,ceph集群若缺少当中某一个池,rgw进程将无法正常运行。
3.修改池的副本模式、pg_num、size。
1.修改all.yml文件,增加以下条目:
2.修改ini部署文件,增加[rgws]项
这样就能在192.168.216.145、192.168.215.178上部署rgw。
结束语
从上述步骤可以看出ansible部署方法仅需要修改ini文件以及yml即可,部署流程比使用ceph-deploy简单。
以上就是关于今天的全部内容,下期将给大家带来《关于XFS文件系统的简单概述》,敬请期待~
以上是关于ceph-rgw之indexless的主要内容,如果未能解决你的问题,请参考以下文章