适用于 SUSE Enterprise Storage 5

9 Ceph Object Gateway

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 检索数据。

重要
重要:DeepSea 部署的对象网关

从 SUSE Enterprise Storage 5 开始,对象网关作为 DeepSea 角色安装,因此,您不需要手动安装。

要在集群部署期间安装对象网关,请参见第 4.3 节 “集群部署”

要将包含对象网关的新节点添加到集群,请参见第 1.2 节 “为节点添加新的角色”

9.1 手动安装对象网关

  1. 在未使用端口 80 的节点上安装对象网关。例如,运行 openATTIC 的节点已在使用端口 80。以下命令会安装所有必需的组件:

    cephadm > sudo zypper ref && sudo zypper in ceph-radosgw
  2. 如果之前的对象网关实例中的 Apache 服务器正在运行,请停止该服务器并禁用相关的服务:

    cephadm > sudo systemctl stop disable apache2.service
  3. 编辑 /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
  4. 重启动对象网关服务。

    cephadm > sudo systemctl restart ceph-radosgw@rgw.gateway_host

9.1.1 对象网关配置

配置对象网关需要执行多个步骤。

9.1.1.1 基本配置

配置 Ceph Object Gateway 需要一个正常运行的 Ceph 存储集群。Ceph Object Gateway 是 Ceph 存储集群的客户端。作为 Ceph 存储集群客户端,它需要:

  • 网关实例的主机名,例如 gateway

  • 具有相应权限和密钥环的存储集群用户名。

  • 用于存储网关数据的存储池。

  • 网关实例的数据目录。

  • Ceph 配置文件中的实例项。

每个实例都必须具有用户名和密钥才能与 Ceph 存储集群通讯。在以下步骤中,我们将使用监视器节点创建引导密钥环,然后基于引导密钥环创建对象网关实例用户密钥环。随后创建客户端用户名和密钥。接下来,我们将密钥添加到 Ceph 存储集群。最后,将密钥环分发到包含网关实例的节点。

  1. 为网关创建密钥环:

    cephadm > sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.rgw.keyring
    cephadm > sudo chmod +r /etc/ceph/ceph.client.rgw.keyring
  2. 为每个实例生成 Ceph Object Gateway 用户名和密钥。例如,我们将在 client.radosgw 后面使用名称 gateway

    cephadm > sudo ceph-authtool /etc/ceph/ceph.client.rgw.keyring \
      -n client.rgw.gateway --gen-key
  3. 为密钥添加功能:

    cephadm > sudo ceph-authtool -n client.rgw.gateway --cap osd 'allow rwx' \
      --cap mon 'allow rwx' /etc/ceph/ceph.client.rgw.keyring
  4. 创建可让 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
  5. 将密钥环分发到包含网关实例的节点:

    cephadm > sudo scp /etc/ceph/ceph.client.rgw.keyring  ceph@hostname:/home/ceph
    cephadm > ssh hostname
    cephadm > sudo mv ceph.client.rgw.keyring /etc/ceph/ceph.client.rgw.keyring
提示
提示:使用引导密钥环

一种替代方法是创建对象网关引导密钥环,然后基于该密钥环创建对象网关密钥环:

  1. 在某个监视器节点上创建对象网关引导密钥环:

    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
  2. 创建 /var/lib/ceph/radosgw/ceph-rgw_name 目录,用于存储引导密钥环:

    cephadm > sudo mkdir \
    /var/lib/ceph/radosgw/ceph-rgw_name
  3. 基于新建的引导密钥环创建对象网关密钥环:

    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
  4. 将对象网关密钥环复制到对象网关主机:

    cephadm > sudo scp \
    /var/lib/ceph/radosgw/ceph-rgw_name/keyring \
    rgw_host:/var/lib/ceph/radosgw/ceph-rgw_name/keyring

9.1.1.2 创建存储池(可选)

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 存储池执行纠删码操作。需要复制所有其他存储池,否则将无法访问网关。

9.1.1.3 将网关配置添加到 Ceph

将 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 服务器。

9.1.1.4 创建数据目录

部署脚本可能无法创建默认的 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

9.1.1.5 重启动服务并启动网关

为了确保所有组件重新加载其配置,建议重启动 Ceph 存储集群服务。然后启动 radosgw 服务。有关详细信息,请参见第 2 章 “简介第 11.3 节 “操作对象网关服务”

服务启动并运行后,您可以发出匿名的 GET 请求,以检查网关是否返回响应。向域名发出简单的 HTTP 请求应会返回以下响应:

<ListAllMyBucketsResult>
      <Owner>
              <ID>anonymous</ID>
              <DisplayName/>
      </Owner>
      <Buckets/>
</ListAllMyBucketsResult>
打印此页