一、什么是对象存储?
对象存储可以将数据存储为独立的对象,与文件系统不同,对象存储不会用目录和子目录数的形式组织数据。对象被被存储在一个扁平的命名空间中;我们使用对象的唯一ID号来获取数据,应用无法通过文件系统访问对象存储,而是使用基于web的API访问对象数据。有两种常用的对象存储API,一个是亚马逊的S3,一个是Openstack的Swift。
亚马逊的S3称这种对象存储的扁平命名空间为bucket,Openstack的Swift称它为container。不管是bucket或者container,对象存储都是扁平的命名空间。因为是扁平的命名空间,所以不管是buckets还是containers都不支持嵌套。
每个对象都通过唯一的ID号存储和读取,而不需要终端用户知道对象具体存储在什么位置。通过移除目录结构,对象之间的关系变得更简单了。


像文件一样,对象也包含二进制数据流,并且可以增长至任意大小。
和文件一样对象也包含元数据,包括:文件权限,修改时间等等。但是对象原生支持扩展元数据信息,通常是KV形式。你甚至可以自定义自己的元数据,使用KV存储对象数据的相关信息
二、RADOS Gateway
RGW是供客户端使用标准对象存储API访问RHCS存储集群的服务,它支持亚马逊S3和Openstack Swift的API接口。核心守护进程radosgw构建在librados库之上。它通常使用自己的web服务器作为前端来处理API请求。


RADOS Gateway提供了一个rados-admin工具可以创建访问对象存储的用户。
RADOS Gateway有自己独立的用户体系,和Ceph集群的用户不是一套认证体系。
RADOS Gateway用户使用单独的用户账户通过Amazon或者Swift的API接口访问对象存储。
等网关用户被RADOS Gateway验证之后,gateway再使用cephx用户认证体系访问底层存储集群中的数据对象。
默认对象存储网关会自动创建很多存储池:
|
.rgw.root |
Stores information records |
存储信息记录 |
|
.default.rgw.control |
Used as the control pool |
用作控制池 |
|
.default.rgw.meta |
Stores user_keys and other critical metadata |
存储user_keys和其他关键元数据 |
|
.default.rgw.log |
Contains logs of all bucket/container and object actions |
包含所有桶/容器和对象操作的日志 |
|
.default.rgw.buckets.index |
Stores indexes of the buckets |
存储桶的索引 |
|
.default.rgw.buckets.data |
Stores bucket data |
存储桶数据 |
|
.default.rgw.buckets.non-ec |
Used for multiple object metadata uploads |
用于多对象元数据上传 |
也就是说,RADOS网关的客户端通过 Amazon S3 或 Openstack Swift接口使用RADOS网关用户向RADOS网关认证。可以使用radosgw-admin实用程序或通过与外部基于ldap的身份验证服务集成来配置这些用户。
然后RADOS Gateway使用Cephx和它自己的Cephx凭证代表它们向RedHat Ceph存储集群进行身份验证。这两组用户并不相同。
# RGW具有一台独立的认证账户,和Ceph自带的Cephx不是一套认证体系。

Ceph是一个统一的、分布式的存储系统,它提供了对象存储、块存储和文件系统三种主要的存储方式。其中的对象存储部分由RADOS Gateway(RGW)提供,它是一个构建在Ceph分布式对象存储(RADOS)之上的HTTP RESTful网关,兼容Amazon S3和OpenStack Swift API。
在Ceph的RGW中,主要有以下内容:
-
对象(Objects):对象是存储在Ceph中的基本数据单元,类似于文件。每个对象包含数据和元数据。
-
桶(Buckets):桶是一组对象的逻辑集合,类似于文件夹或目录。每个桶都有唯一的名称,并且可以包含多个对象。
-
用户(Users):Ceph RGW支持用户管理,每个用户可以拥有自己的访问密钥、桶和对象。用户权限可以通过身份验证和访问控制列表(ACLs)进行管理。
三、realm、zonegroup、zone
在 Ceph RGW(RADOS Gateway) 中,多站点(Multi-Site) 部署是一个非常重要的功能。它允许你在多个物理站点之间同步对象存储的数据,确保数据的可用性和一致性。为了实现这一点,Ceph 引入了三个关键概念:Realm、Zone Group 和 Zone。
-
Realm(领域):
-
Realm是一个RGW多站点配置的最高层次。它包含一个或多个zonegroups,可以跨越多个Ceph集群,类似于一个“全局命名空间”,它包含了所有与多站点相关的配置,比如用户、访问策略、存储策略等。
-
一个realm允许你定义一个全局的命名空间,这意味着你可以在多个不同的Ceph集群之间同步桶和对象。每个realm都有自己的唯一名称和一套同步策略。
-
管理全局配置,确保所有站点的配置一致。支持跨站点的用户和权限共享。
-
-
Zonegroup(区域组):
-
Zonegroup是一个或多个zones的集合,通常对应一个地理区域。是 Realm 下的一个逻辑分组,类似于一个“区域集合”。定义了一组逻辑上相关的 Zone(区域),这些 Zone 可以分布在不同的物理站点上。
-
zonegroup使得你可以在不同的数据中心或地理位置同步和复制数据。每个 Zone Group 可以配置为 主区域组(Master Zone Group) 或 从区域组(Slave Zone Group),用于数据同步。
-
定义数据同步的逻辑关系。 配置主从角色,支持数据的主动同步。
-
-
Zone(区域):
-
Zone是一个物理的Ceph RGW实例,是最底层的逻辑单元,类似于一个“物理站点”。通常在一个单独的Ceph集群中运行。每个 Zone 代表一个实际的 Ceph RGW 部署,可以是一个数据中心、一个机房,或者一个集群。在一个 Zone Group 中,Zone 可以是 主区域(Master Zone) 或 从区域(Slave Zone),具体取决于它在数据同步中的角色。
-
一个zone负责处理实际的对象存储操作,并可以配置为主zone或辅助zone。主zone负责处理写操作,并将数据同步到辅助zone。
-
代表一个具体的物理站点。 作为数据同步的基本单元。
-
Realm 是最大的范围,管理所有相关的配置和命名空间。
Zone Group 是 Realm 下的一个逻辑分组,定义了哪些 Zone 需要同步数据。
Zone 是 Zone Group 下的具体物理站点,实际负责数据的存储和同步。
使用场景:
-
灾难恢复:你可以配置多个zone在不同的数据中心,以便在一个数据中心发生故障时,其他数据中心可以接管服务。
-
数据本地化:对于跨地域的业务,通过在不同地区设置不同的zonegroup和zone,可以将数据存储在离用户最近的位置,降低延迟,提高访问速度。
-
法规遵从:某些法律法规可能要求数据必须存储在特定的国家或地区。通过设置不同的zonegroup和zone,可以确保数据遵守这些规定。
-
负载均衡和容量规划:在多个地点部署zone可以帮助均衡请求负载,并根据需要扩展存储容量。
总的来说,Ceph的RGW多站点配置提供了高度的灵活性和可扩展性,使得企业可以根据自己的需求和规模来部署和管理对象存储。
1、在 Ceph RGW 中创建一个多站点环境步骤
1)创建 realm
示例:创建名为 tpy 的 realm,Realm是用来表示一个多站点配置的环境,可以包含多个zonegroup
radosgw-admin realm create --rgw-realm=tpy
radosgw-admin realm list //查看
Realm 是多站点配置的顶层逻辑单位,类似于一个“全局命名空间”。
创建了一个名为 tpy 的 Realm,用于管理所有与多站点相关的配置(如用户、权限、存储策略等)。
通过 realm list 查看当前的所有 Realm。
2)创建 zonegroup
示例:创建名为 tpy-gt 的 zonegroup,并将其设置为master zonegroup。Zonegroup是一组zone的集合,通常对应一个地理区域或数据中心。一个master zonegroup负责协调数据的复制和同步
radosgw-admin zonegroup create --rgw-zonegroup=tpy-gt --master
radosgw-admin zonegroup list //查看
Zone Group 是一个逻辑分组,包含多个 Zone(区域)。
你创建了一个名为 tpy-gt 的 Zone Group,并将其设置为 主区域组(Master Zone Group)。
主区域组负责协调数据的写入和同步。
通过 zonegroup list 查看当前的所有 Zone Group。
3)创建 zone
示例:创建名为 gt-default 的zone,并将其添加到 tpy-gt zonegroup中。此外,这个zone被指定为master zone,负责处理写入操作并同步数据到其他zone。
radosgw-admin zone create --rgw-zonegroup=tpy-gt --rgw-zone=gt-default --master
radosgw-admin zone list //查看
Zone 是最底层的逻辑单元,代表一个具体的物理站点。
你创建了一个名为 gt-default 的 Zone,并将其添加到 tpy-gt Zone Group 中。
这个 Zone 被指定为 主区域(Master Zone),负责处理写入操作并将数据同步到其他 Zone。
通过 zone list 查看当前的所有 Zone。
4)更新realm的配置周期
示例:更新realm的配置周期。在Ceph RGW中,period是一个版本化的配置快照,它包含了realm、zonegroups和zones的当前配置。此命令的--commit选项表示立即将这些变更生效。
radosgw-admin period update --rgw-realm=tpy --commit
Period 是 Ceph RGW 的一个版本化的配置快照,包含了 Realm、Zone Group 和 Zone 的当前配置。
更新配置周期是为了确保所有的更改(如创建 Realm、Zone Group 和 Zone)立即生效。
--commit 选项表示立即提交更改。
5)使用Ceph的Orch模块来部署新的RGW服务实例
命令:orch apply rgw <svc_id> [<placement>] [--realm <value>] [--zonegroup <value>] [--zone <value>] [--Update the number of RGW instances for the given zone networks <value>...] [--port <int>] [--ssl] [--dry-run] [--format {plain|json|json-pretty|yaml|xml-pretty|xml}] [--unmanaged] [--no-overwrite]
示例:该RGW实例属于tpy realm、tpy-gt zonegroup和gt-default zone。--placement=label:rgw选项指定了服务应该部署在带有rgw标签的节点上。
ceph orch host label add ceph-mon-vm4-3-37-mon-12-59 rgw
ceph orch apply rgw tpy-gt --realm=tpy --zonegroup=tpy-gt --zone=gt-default --placement=label:rgw
Ceph Orchestrator 是 Ceph 的自动化管理工具,用于部署和管理服务。
你为节点 ceph-mon-vm4-3-37-mon-12-59 添加了一个标签 rgw,表示该节点可以部署 RGW 服务。
然后,你使用 orch apply rgw 命令部署一个新的 RGW 服务实例,指定其属于 tpy Realm、tpy-gt Zone Group 和 gt-default Zone。
--placement=label:rgw 指定了服务应该部署在带有 rgw 标签的节点上。
总结:这些命令整合起来,配置了一个新的多站点Ceph RGW环境,其结构包含一个realm、一个zonegroup和一个zone,这些配置通常用于跨区域数据复制、冗余和灾难恢复方案中。通过这种方式,可以实现对象存储的高可用性和数据持久性。
Lab: 部署对象存储网关
1. 检查环境
[root@foundation0 ~]# ssh student@workstation
[student@workstation ~]$ lab start object-radosgw
Starting lab.
· Checking lab systems ................................ SUCCESS
· Backup the RGW service .............................. SUCCESS
· Stop the existing RGW service ....................... SUCCESS
· Delete the existing RGW service ..................... SUCCESS
[root@foundation0 ~]# ssh root@serverc
[root@serverc ~]# cephadm shell
[ceph: root@serverc /]# ceph -s //查看服务器状态
[ceph: root@serverc /]# ceph orch ls //确认没有rgw服务
## 确认没有rgw服务
- 命令:ceph orch ls --service-type rgw
[ceph: root@serverc /]# ceph orch ls --service-type rgw No services reported

2. 配置realm、zonegroup、zone
[ceph: root@serverc /]# radosgw-admin realm create --rgw-realm=myrealm
[ceph: root@serverc /]# radosgw-admin zonegroup create --rgw-zonegroup=myzonegroup --master
[ceph: root@serverc /]# radosgw-admin zone create --rgw-zonegroup=myzonegroup --rgw-zone=myzone --master
[ceph: root@serverc /]# radosgw-admin period update --rgw-realm=myrealm --commit
3. 创建rgw_service.yaml文件
解释:在serverd和servere主机配置启动两个rgw服务,服务端口号为8080.
[ceph: root@serverc /]# vi rgw_service.yaml
service_type: rgw
service_id: myrealm.myzonegroup
service_name: rgw.myrealm.myzonegroup
placement:
count: 2
hosts:
- serverd.lab.example.com
- servere.lab.example.com
spec:
rgw_frontend_port: 8080
使用Ceph编排器通过rgw_service创建 rgw_service.yaml 文件。
[ceph: root@serverc /]# ceph orch apply -i rgw_service.yaml
Scheduled rgw.myrealm.myzonegroup update...
[ceph: root@serverc /]# ceph -s
[ceph: root@serverc /]# ceph orch ps --daemon-type rgw
[ceph: root@serverc /]# exit

4. 测试
[root@serverc ~]# curl http://serverd:8080
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
[root@serverc ~]# curl http://servere:8080
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
补充:
Ceph RADOS Gateway(RGW)是一个内置于Ceph分布式存储系统中的对象存储接口,它提供与Amazon S3和OpenStack Swift兼容的RESTful API。要在Ceph集群中创建一个RADOS Gateway,你需要遵循一系列步骤,并且会用到一些命令。以下是一个粗略的创建步骤和相关命令:
前提条件
-
已经有一个运行中的Ceph集群。
-
已经安装了Ceph的管理工具。
-
你拥有足够权限(如root或sudo权限)来执行相关命令。
1)安装 RADOS Gateway
首先,你需要在一台或多台准备作为gateway的服务器上安装Ceph RADOS Gateway软件包。安装方法取决于你的操作系统。例如,在基于Debian的系统上,你可以使用以下命令:
sudo apt install ceph-radosgw
在基于Red Hat的系统上,你可以使用以下命令:
sudo yum install ceph-radosgw
2)创建 RADOS Gateway 用户
在Ceph集群中,你需要创建一个专门的用户来管理RADOS Gateway。使用以下命令:
ceph auth get-or-create client.rgw.{hostname} osd 'allow rwx' mon 'allow rw' -o /etc/ceph/ceph.client.rgw.{hostname}.keyring
将 {hostname} 替换为你的服务器的主机名。
3)配置 RADOS Gateway
编辑Ceph配置文件 /etc/ceph/ceph.conf,在其中添加RGW相关的配置。例如:
[client.rgw.{hostname}]
host = {hostname}
keyring = /etc/ceph/ceph.client.rgw.{hostname}.keyring
rgw_frontends = "civetweb port=80"
将 {hostname} 替换为你的服务器的主机名。
4)启动 RADOS Gateway 服务
启动RGW服务。具体的启动方法取决于你的操作系统和使用的init系统。例如,使用systemd的系统中,你可以使用以下命令:
sudo systemctl enable ceph-radosgw@rgw.{hostname}.service
sudo systemctl start ceph-radosgw@rgw.{hostname}.service
确保将 {hostname} 替换为你的服务器的主机名。
5)验证服务
验证RGW服务是否正常运行:
sudo systemctl status ceph-radosgw@rgw.{hostname}.service
6)创建第一个 S3 用户
使用 radosgw-admin 命令创建第一个S3用户:
radosgw-admin user create --uid="myuser" --display-name="My User"
这将输出新用户的访问密钥和秘密密钥,你可以使用这些密钥来配置S3兼容的应用程序。
7)额外配置
你可能还需要配置额外的功能,比如多站点复制、日志记录、配额以及使用SSL等。
请注意,这些步骤仅为创建RADOS Gateway的概述,实际的步骤可能因你的Ceph版本、操作系统或具体环境而异。建议参考Ceph官方文档中的最新指南来进行配置和管理。
思维导图:

小结:
本篇为 【RHCA认证 - CL260 | Day08:对象存储 RGW】的学习笔记,希望这篇笔记可以让您初步了解什么是对象存储、RADOS Gateway、以及realm、zonegroup、zone的配置,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关环境、视频,可评论666并私信小安,请放下你的羞涩,花点时间直到你真正的理解。
1071

被折叠的 条评论
为什么被折叠?



