
Ceph RADOS Gateway安装
什么是对象存储
对象存储以独立的对象的形式管理数据,而不是传统的文件层次结构或块存储的形式。每个对象包括数据、元数据和唯一标识符。元数据是描述数据的信息,比如创建日期、类型和其他相关信息。
主要用于非结构化数据,例如多媒体内容、备份数据、分析数据等,以及任何需要大规模、易于访问和经济有效的数据存储的应用。Amazon S3、Google Cloud Storage 和 OpenStack Swift 是一些常见的公有云对象存储服务。在私有云或本地环境中,Ceph 和 MinIO 是两个常见的对象存储系统。
与文件存储不同,对象存储不使用目录树结构。它把所有的数据都看作是对象,每个对象都由一个唯一的 ID 标识。对象包括数据本身,以及描述数据的元数据,还有一个全局唯一的 ID。
对象存储的优势在于其扩展性和可访问性。对象存储是为大规模数据设计的,它能够很好地处理大量非结构化数据。对象可以跨多个服务器或地理区域分散存储,提供了高度的冗余和可用性。对象存储通常通过 RESTful API 访问,这使得它可以通过网络从任何地方访问,而且开发者可以轻松地集成到应用程序中。
总结起来,文件存储更适合于需要文件级别操作和低延迟访问的传统应用,而对象存储则适合于大规模、非结构化数据的存储和云环境。
对象存储的桶概念
在对象存储系统中,"桶"(Bucket)是一种容器,用于组织和管理存储的对象。每个桶都有一个唯一的名称,用于区分存储在同一对象存储系统中的其他桶。你可以将桶看作是一个逻辑上的存储区域,可以在其中存储、列举和删除对象。
对象存储系统的用户可以创建一个或多个桶,并将对象上传到这些桶中。每个对象都有一个与其所在桶相关联的唯一键,可以用这个键在桶中定位对象。
这里需要注意的是,桶并不等同于传统文件系统的文件夹。在文件系统中,文件夹可以嵌套,形成一个层级结构,但在对象存储中,桶并不能嵌套。每个桶都是平等且独立的,它们只是一种组织对象的方式。
另外,每个桶可以有其自己的配置,如访问权限和生命周期管理规则。例如,你可以为一个桶设置公共读取权限,而另一个桶则设置为私有。或者,你可以为一个桶设置一个规则,自动删除超过一定期限的对象。这为管理和控制存储的数据提供了灵活性。
例如,Amazon S3、Google Cloud Storage 和 Ceph RGW 都使用了桶的概念。你可以通过这些服务的 API 或工具创建桶,上传对象到桶,从桶下载对象,列举桶中的对象,以及管理桶的配置。
什么是RGW
RGW是RADOS Gateway的简称,是一套基于LIBRADOS接口封装而实现的FastCGI服务,对外提供基于 HTTP 的RESTful风格的对象存储数据访问和管理接口,使得 Ceph 存储集群可以像对象存储系统一样使用。
RGW 支持两种主要的对象存储 API:Amazon S3 兼容的 API 和 OpenStack Swift 兼容的 API。这使得可以使用许多已经存在的 S3 或 Swift 工具和库来访问 Ceph 存储。RGW 的主要功能包括:
- 提供 S3 或 Swift 兼容的 API,使得你可以在 Ceph 上存储和检索数据,而不需要知道底层的 RADOS 协议。
- 支持多种访问控制机制,包括 S3 风格的 ACL(Access Control Lists)和 Swift 风格的访问控制。
- 提供数据冗余和复制,确保数据的可靠性和持久性。
- 支持大规模的数据存储,你可以存储几乎无限数量的对象。
- 支持多租户环境,可以在同一 Ceph 集群中为不同的用户或组织提供隔离的存储空间。
因此,如果需要在 Ceph 存储集群中使用对象存储,或者你需要与 S3 或 Swift 兼容的存储,那么 RGW 就会是一个很好的选择。
安装ceph RADOS Gateway
在线方式安装
离线安装
在联网环境下安装 apt-rdepends:
apt-rdepends 是一个工具,可以列出一个包及其所有递归依赖的包。使用 apt-rdepends 列出 radosgw 及其所有依赖的包:
这会生成一个名为 packages.txt 的文件,包含 radosgw 及其所有依赖的包的名称。使用 apt-get download 下载这些包
这会在 packages 目录下下载 radosgw 及其所有依赖的包。
- 将下载的包拷贝到离线的环境中:
配置ceph rados gateway
编辑 /etc/ceph/ceph.conf 文件以添加 client.rgw 部分,下面可以添加多个rgw主机,这样,每个 RGW 实例都有自己的配置,并且都可以被独立地启动和停止。这种方式可以提高系统的可用性和容错能力,因为即使一个 RGW 实例出现问题,其他的实例仍然可以继续提供服务。
创建keyring
创建 keyring 文件:使用 ceph-authtool 命令来创建 keyring 文件,然后使用 chown 命令来更改文件的所有者为 ceph 用户。
添加 keyring 到 Ceph 集群:你需要将新创建的 keyring 添加到你的 Ceph 集群中。
重启ceph rados gateway
创建rgw 数据池
创建数据池以供 RGW 使用。在命令行中运行 ceph 命令以创建所需的池。
解释下上面创建的数据池的作用
- .rgw.root:存储 RGW 的配置信息和元数据,例如区域和区域组的定义。
- default.rgw.control:用于 RGW 控制数据。
- default.rgw.data.root:默认情况下,新创建的 RGW bucket 的元数据会存储在这个池中。
- default.rgw.gc:用于存储将被垃圾收集器清理的对象列表。
- default.rgw.log:用于记录 RGW 的访问日志。
- default.rgw.users.uid、default.rgw.users.email、default.rgw.users.swift:存储不同类型的用户信息。
- default.rgw.buckets.index:存储每个 bucket 的索引信息,用于快速查找和访问 bucket 中的对象。
- default.rgw.buckets.data:默认情况下,新创建的 RGW bucket 的对象数据会存储在这个池中。
在执行上面操作中可能会报如下错误
新创建的 placement groups(PG)数量超过了 Ceph 集群的限制。Ceph 集群设置了每个 OSD 可以支持的最大 PG 数量,这是通过参数 mon_max_pg_per_osd 来控制的。
mon_max_pg_per_osd 的值被设置为了 250,而此时的集群中有 3 个 OSDs,因此,集群总共可以支持 250 * 3 = 750 个 PGs。现在尝试创建的 PG 数量为 64 * 3 = 192 个(因为 size 参数设置为 3,每个 PG 都会有两个副本),加上集群中已经存在的 PG 数量,总数超过了 750。可以采取以下几种策略来解决这个问题:
- 增加 mon_max_pg_per_osd 的值:这将增加每个 OSD 支持的 PG 数量,从而增加集群总体可以支持的 PG 数量。但是过多的 PGs 可能会消耗更多的内存和 CPU 资源,可能导致性能下降。
- 添加更多的 OSDs:通过增加 OSD 的数量,增加集群总体可以支持的 PG 数量。
- 减小 pg_num 的值:降低 pg_num 的值可以减少新创建的 PG 数量,从而使得总 PG 数量不超过限制。但是,pg_num 的值应该根据你的数据分布和性能需求来设置,过小的 pg_num 可能会导致数据分布不均,性能下降。
使用radosgw-admin 命令行工具来创建用户
创建完成后需要保存好access_key和secret_key,后面配置 S3 客户端和其他工具会用到
在 Ceph RADOS Gateway (RGW) 中,可以使用 S3 兼容的客户端工具(例如 AWS CLI、s3cmd、boto3 等)或者 librgw API 来上传数据。下面以awscli为例进行实验
- 安装 AWS CLI
- 配置 AWS CLI:运行 aws configure 命令来配置 S3 客户端。需要提供访问密钥、安全密钥、默认区域名称(可以设置为 us-east-1),以及默认输出格式(可以设置为 json)。
将访问密钥和安全密钥设置为你在 RGW 中创建的用户的密钥。
- 创建bucket:使用aws s3api create-bucket命令来创建新的bucket。例如:
- 上传数据:使用 aws s3 cp 命令来上传文件到 bucket。例如:
- 列出 bucket 中的文件:使用 aws s3 ls 命令来列出 bucket 中的所有文件。例如:
- 删除文件:使用 aws s3 rm 命令来删除 bucket 中的文件。例如:
文章转载自公众号:运维开发故事
