Ceph Object Gateway 是构建在 librgw
之上的对象存储接口,为应用提供用于访问 Ceph 集群的 RESTful 网关。该网关支持两种接口:
S3 兼容:通过与 Amazon S3 RESTful API 的某个大型子集兼容的接口提供对象存储功能。
Swift 兼容:通过与 OpenStack Swift API 的某个大型子集兼容的接口提供对象存储功能。
对象网关守护进程使用嵌入式 HTTP 服务器 (CivetWeb) 来与 Ceph 集群交互。由于对象网关提供与 OpenStack Swift 和 Amazon S3 兼容的接口,因此具有自己的用户管理功能。对象网关可将数据存储在用于存储来自 CephFS 客户端或 RADOS 块设备客户端的数据的同一个集群中。S3 和 Swift API 共享一个公用的名称空间,因此,您可以使用其中一个 API 写入数据,使用另一个 API 检索数据。
从 SUSE Enterprise Storage 5 开始,对象网关作为 DeepSea 角色安装,因此,您不需要手动安装。
要在集群部署期间安装对象网关,请参见第 4.3 节 “集群部署”。
要将包含对象网关的新节点添加到集群,请参见第 1.2 节 “为节点添加新的角色”。
在未使用端口 80 的节点上安装对象网关。例如,运行 openATTIC 的节点已在使用端口 80。以下命令会安装所有必需的组件:
cephadm >
sudo zypper ref && sudo zypper in ceph-radosgw
如果之前的对象网关实例中的 Apache 服务器正在运行,请停止该服务器并禁用相关的服务:
cephadm >
sudo systemctl stop disable apache2.service
编辑 /etc/ceph/ceph.conf
,添加以下几行:
[client.rgw.gateway_host] rgw frontends = "civetweb port=80"
如果您想将对象网关/CivetWeb 配置为用于 SSL 加密,请相应地修改该行:
rgw frontends = civetweb port=7480s ssl_certificate=path_to_certificate.pem
重启动对象网关服务。
cephadm >
sudo systemctl restart ceph-radosgw@rgw.gateway_host
配置对象网关需要执行多个步骤。
配置 Ceph Object Gateway 需要一个正常运行的 Ceph 存储集群。Ceph Object Gateway 是 Ceph 存储集群的客户端。作为 Ceph 存储集群客户端,它需要:
网关实例的主机名,例如 gateway
。
具有相应权限和密钥环的存储集群用户名。
用于存储网关数据的存储池。
网关实例的数据目录。
Ceph 配置文件中的实例项。
每个实例都必须具有用户名和密钥才能与 Ceph 存储集群通讯。在以下步骤中,我们将使用监视器节点创建引导密钥环,然后基于引导密钥环创建对象网关实例用户密钥环。随后创建客户端用户名和密钥。接下来,我们将密钥添加到 Ceph 存储集群。最后,将密钥环分发到包含网关实例的节点。
为网关创建密钥环:
cephadm >
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.rgw.keyringcephadm >
sudo chmod +r /etc/ceph/ceph.client.rgw.keyring
为每个实例生成 Ceph Object Gateway 用户名和密钥。例如,我们将在 client.radosgw
后面使用名称 gateway
:
cephadm >
sudo ceph-authtool /etc/ceph/ceph.client.rgw.keyring \
-n client.rgw.gateway --gen-key
为密钥添加功能:
cephadm >
sudo ceph-authtool -n client.rgw.gateway --cap osd 'allow rwx' \
--cap mon 'allow rwx' /etc/ceph/ceph.client.rgw.keyring
创建可让 Ceph Object Gateway 访问 Ceph 存储集群的密钥环和密钥之后,请将密钥添加到 Ceph 存储集群。例如:
cephadm >
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.rgw.gateway \
-i /etc/ceph/ceph.client.rgw.keyring
将密钥环分发到包含网关实例的节点:
cephadm >
sudo scp /etc/ceph/ceph.client.rgw.keyring ceph@hostname:/home/cephcephadm >
ssh hostnamecephadm >
sudo mv ceph.client.rgw.keyring /etc/ceph/ceph.client.rgw.keyring
一种替代方法是创建对象网关引导密钥环,然后基于该密钥环创建对象网关密钥环:
在某个监视器节点上创建对象网关引导密钥环:
cephadm >
sudo ceph \
auth get-or-create client.bootstrap-rgw mon 'allow profile bootstrap-rgw' \
--connect-timeout=25 \
--cluster=ceph \
--name mon. \
--keyring=/var/lib/ceph/mon/ceph-node_host/keyring \
-o /var/lib/ceph/bootstrap-rgw/keyring
创建 /var/lib/ceph/radosgw/ceph-rgw_name
目录,用于存储引导密钥环:
cephadm >
sudo mkdir \
/var/lib/ceph/radosgw/ceph-rgw_name
基于新建的引导密钥环创建对象网关密钥环:
cephadm >
sudo ceph \
auth get-or-create client.rgw.rgw_name osd 'allow rwx' mon 'allow rw' \
--connect-timeout=25 \
--cluster=ceph \
--name client.bootstrap-rgw \
--keyring=/var/lib/ceph/bootstrap-rgw/keyring \
-o /var/lib/ceph/radosgw/ceph-rgw_name/keyring
将对象网关密钥环复制到对象网关主机:
cephadm >
sudo scp \
/var/lib/ceph/radosgw/ceph-rgw_name/keyring \
rgw_host:/var/lib/ceph/radosgw/ceph-rgw_name/keyring
Ceph Object Gateway 需要使用 Ceph 存储集群池来存储特定的网关数据。如果创建的用户具有适当的权限,则网关会自动创建存储池。但是,请务必在 Ceph 配置文件中为每个存储池设置适当的默认归置组数量。
存储池名称遵循 ZONE_NAME.POOL_NAME
语法。使用默认区域配置网关时,本示例中的默认区域名称为“default”:
.rgw.root default.rgw.control default.rgw.meta default.rgw.log default.rgw.buckets.index default.rgw.buckets.data
要手动创建存储池,请参见第 7.2.2 节 “创建存储池”。
只能对 default.rgw.buckets.data
存储池执行纠删码操作。需要复制所有其他存储池,否则将无法访问网关。
将 Ceph Object Gateway 配置添加到 Ceph 配置文件。Ceph Object Gateway 配置要求您标识 Ceph Object Gateway 实例。然后,指定安装了 Ceph Object Gateway 守护进程的主机名、密钥环(用于 cephx)和日志文件(可选)。例如:
[client.rgw.instance-name] host = hostname keyring = /etc/ceph/ceph.client.rgw.keyring
要覆盖默认的对象网关日志文件,请包含以下命令:
log file = /var/log/radosgw/client.rgw.instance-name.log
当配置客户端类型为 Ceph Object Gateway (radosgw) 的 Ceph 存储集群客户端时,网关实例的 [client.rgw.*]
部分会识别 Ceph 配置文件的此部分。后接实例名称。例如:
[client.rgw.gateway] host = ceph-gateway keyring = /etc/ceph/ceph.client.rgw.keyring
host 必须是您的计算机主机名,不包括域名。
然后关闭 print continue
。如果将其设置为 true,执行 PUT 操作时可能会遇到问题:
rgw print continue = false
要通过子域 S3 调用使用 Ceph Object Gateway(例如 http://bucketname.hostname
),必须在 Ceph 配置文件的 [client.rgw.gateway]
段落下面添加 Ceph Object Gateway DNS 名称:
[client.rgw.gateway] ... rgw dns name = hostname
此外,在使用 http://bucketname.hostname
语法时,应考虑在客户端计算机上安装 Dnsmasq 这样的 DNS 服务器。dnsmasq.conf
文件应包含以下设置:
address=/hostname/host-ip-address listen-address=client-loopback-ip
然后,在客户端计算机上添加 client-loopback-ip IP 地址作为第一台 DNS 服务器。
部署脚本可能无法创建默认的 Ceph Object Gateway 数据目录。如果尚未为 radosgw 守护进程的每个实例创建数据目录,请加以创建。Ceph 配置文件中的 host
变量确定哪个主机运行 radosgw 守护进程的每个实例。通常的格式会指定 radosgw 守护进程、集群名称和守护进程 ID。
cephadm >
sudo mkdir -p /var/lib/ceph/radosgw/cluster-id
使用上面的示例 ceph.conf
设置执行以下命令:
cephadm >
sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway
为了确保所有组件重新加载其配置,建议重启动 Ceph 存储集群服务。然后启动 radosgw
服务。有关详细信息,请参见第 2 章 “简介”和第 11.3 节 “操作对象网关服务”。
服务启动并运行后,您可以发出匿名的 GET 请求,以检查网关是否返回响应。向域名发出简单的 HTTP 请求应会返回以下响应:
<ListAllMyBucketsResult> <Owner> <ID>anonymous</ID> <DisplayName/> </Owner> <Buckets/> </ListAllMyBucketsResult>