注意

本文档适用于 Ceph 开发版本。

RGW 服务

部署 RGWs

Cephadm将对象网关(RGW)作为一组守护进程来部署,这些守护进程管理单个集群部署或特定在多站点部署中的一个多站点。)

注意,守护进程是通过监控配置数据库进行配置的,而不是通过cephadm, radosgw daemons are configured via the monitor configuration database instead of via a ceph.conf或命令行。如果该配置尚未就绪(通常在client.rgw.<something>部分中),则radosgw守护进程将使用默认设置启动(例如,绑定到端口

要部署一组radosgw守护进程,并使用任意服务名称name生成 SSH 密钥,运行以下命令:

ceph orch apply rgw *<name>* [--realm=*<realm-name>*] [--zone=*<zone-name>*] --placement="*<num-daemons>* [*<host1>* ...]"

简单设置

例如,要为单个集群RGW部署部署两个守护进程(默认值),并使用任意服务IDfoo:

ceph orch apply rgw foo

指定网关

一个常见的情况是,有一组标记的主机将充当网关,多个radosgw实例在连续的端口8000和8001上运行:

ceph orch host label add gwhost1 rgw  # the 'rgw' label can be anything
ceph orch host label add gwhost2 rgw
ceph orch apply rgw foo '--placement=label:rgw count-per-host:2' --port=8000

See also: 守护进程的共位置.

指定网络

RGW服务可以将它们绑定的网络配置为YAML服务规范。

示例规范文件:

service_type: rgw
service_id: foo
placement:
  label: rgw
  count_per_host: 2
networks:
- 192.169.142.0/24
spec:
  rgw_frontend_port: 8080

传递前端额外参数

RGW服务规范可用于通过使用rgw_frontend_extra_args参数列表将额外参数传递给前端。

示例规范文件:

service_type: rgw
service_id: foo
placement:
  label: rgw
  count_per_host: 2
spec:
  rgw_realm: myrealm
  rgw_zone: myzone
  rgw_frontend_type: "beast"
  rgw_frontend_port: 5000
  rgw_frontend_extra_args:
  - "tcp_nodelay=1"
  - "max_header_size=65536"

Note

cephadm结合来自spec部分的参数和来自rgw_frontend_extra_args的参数,生成一个空格分隔的参数列表,该列表用于设置rgw_frontends配置参数的值。

多站点区

要部署为多站点myorg域和us-east-1区提供服务的RGWs,请使用myhost1myhost2:

ceph orch apply rgw east --realm=myorg --zonegroup=us-east-zg-1 --zone=us-east-1 --placement="2 myhost1 myhost2"

注意,在多站点情况下,cephadm仅部署守护进程。它不会创建或更新域或区配置。要创建新的域、区和区组,请使用RGW模块或发出以下形式的命令:

radosgw-admin realm create --rgw-realm=<realm-name>
radosgw-admin zonegroup create --rgw-zonegroup=<zonegroup-name>  --master
radosgw-admin zone create --rgw-zonegroup=<zonegroup-name> --rgw-zone=<zone-name> --master
radosgw-admin period update --rgw-realm=<realm-name> --commit

请参阅守护进程放置了解放置规范的详细信息。有关设置多站点RGW的更多信息,请参阅多站点 for more information of setting up multisite RGW.

参见多站点.

设置HTTPS

要为RGW服务启用HTTPS,请应用遵循此方案的规范文件:

service_type: rgw
service_id: myrgw
spec:
  rgw_frontend_ssl_certificate: |
    -----BEGIN PRIVATE KEY-----
    V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
    ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
    IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
    YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
    ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
    ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
    IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
    YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
    ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
    -----END CERTIFICATE-----
  ssl: true

然后应用此yaml文档:

ceph orch apply -i myrgw.yaml

注意rgw_frontend_ssl_certificate的值是一个字面量字符串,如|字符所示,它保留换行符。

使用通配符SAN设置HTTPS

要为RGW服务启用HTTPS,请应用遵循此方案的规范文件:

service_type: rgw
service_id: foo
placement:
  label: rgw
  count_per_host: 1
spec:
  ssl: true
  generate_cert: true
  rgw_frontend_port: 8080
  wildcard_enabled: true  # Enables wildcard SANs in the certificate
  zonegroup_hostnames:
  - s3.cephlab.com

然后应用此yaml文档:

ceph orch apply -i myrgw.yaml

The wildcard_enabled标志确保自签名证书中包含通配符SAN条目,允许虚拟主机模式下的桶访问。默认情况下,此标志是禁用的。*.s3.cephlab.com)

禁用多站点同步流量

有一个RGW配置选项称为rgw_run_sync_thread,它告诉RGW守护进程不要传输多站点复制数据。如果您希望该RGW守护进程专门用于I/O而不是多站点同步操作,则这很有用。disable_multisite_sync_traffic,当设置为“True”时,将告诉cephadm为该RGW服务部署的所有RGW守护进程将rgw_run_sync_thread设置为false。例如

service_type: rgw
service_id: foo
placement:
  label: rgw
spec:
  rgw_realm: myrealm
  rgw_zone: myzone
  rgw_zonegroup: myzg
  disable_multisite_sync_traffic: True

Note

这将阻止RGW守护进程(s)发送复制数据。

关闭时断开客户端连接

当RGW守护进程因任何原因被停止时,包括在cephadm升级过程中,RGW提供了一个设置来延迟关闭,因为RGW守护进程试图完成正在进行的客户端请求。此设置默认关闭,但可以通过传递--stop-timeout=<timeout-in-seconds>到RGW进程或通过为RGW守护进程设置rgw_exit_timeout_secs配置选项手动激活。此值可以在RGW服务规范文件中通过在规范文件中指定rgw_exit_timeout_secs参数来配置。例如

service_type: rgw
service_id: foo
placement:
  label: rgw
spec:
  rgw_realm: myrealm
  rgw_zone: myzone
  rgw_zonegroup: myzg
  rgw_exit_timeout_secs: 120

将告诉cephadm为rgw.foo服务部署的RGW守护进程等待最长120秒,以完成当前的客户端请求。请注意,在此期间,RGW守护进程将拒绝新的客户端请求。

Note

在cephadm部署中,此设置默认为开启和120秒。如果您希望禁用此功能,您必须在规范rgw_exit_timeout_secs设置为0。对此设置在规范中的修改直到服务重新部署时才会被RGW守护进程采用,重新部署使用

Note

中将ceph orch redeploy <service-name>ceph orch daemon redeploy <daemon-name>命令

服务规范

class ceph.deployment.service_spec.RGWSpec(service_type='rgw', service_id=, placement=, rgw_realm=, rgw_zonegroup=, rgw_zone=, rgw_frontend_port=, rgw_frontend_ssl_certificate=, rgw_frontend_type=, rgw_frontend_extra_args=, unmanaged=False, ssl=False, preview_only=False, config=, 网络=, subcluster=, extra_container_args=, extra_entrypoint_args=, custom_configs=, only_bind_port_on_networks=False, rgw_realm_token=, update_endpoints=False, zone_endpoints=, zonegroup_hostnames=, data_pool_attributes=, rgw_user_counters_cache=False, rgw_user_counters_cache_size=, rgw_bucket_counters_cache=False, rgw_bucket_counters_cache_size=, generate_cert=False, disable_multisite_sync_traffic=, wildcard_enabled=False, rgw_exit_timeout_secs=120)

配置(多站点)Ceph RGW的设置

service_type: rgw
service_id: myrealm.myzone
spec:
    rgw_realm: myrealm
    rgw_zonegroup: myzonegroup
    rgw_zone: myzone
    ssl: true
    rgw_frontend_port: 1234
    rgw_frontend_type: beast
    rgw_frontend_ssl_certificate: ...

See also: 服务规范

data_pool_attributes

在rgw realm引导命令中为<zone-name>.rgw.buckets.data池创建的属性

disable_multisite_sync_traffic

用于使RGW不进行多站点复制,以便它可以专门用于I/O

generate_cert

如果未提供,是否应为我们生成证书/密钥

网络: 列表[字符串]

一个网络标识符列表,指示守护进程仅在列表中的特定网络上绑定。如果集群分布在多个网络上,您可以添加多个网络。请参阅网络和端口, 指定网络指定网络.

only_bind_port_on_networks

是否将绑定到的IP限制为“networks”参数中指定的内容

placement: PlacementSpec

请参阅守护进程放置.

rgw_bucket_counters_cache

要通过桶配置值跟踪操作指标,rgw_bucket_counters_cache必须设置为true

rgw_bucket_counters_cache_size

用于设置每个桶计数器缓存中的条目数

rgw_exit_timeout_secs

RGW在被告知关闭时将等待多长时间以尝试完成客户端请求

rgw_frontend_extra_args: 列表[字符串] |

rgw_frontend的额外参数列表,形式为opt=value。有关更多信息,请参阅HTTP前端

rgw_frontend_port: int |

RGW守护进程的端口

rgw_frontend_ssl_certificate: 字符串 | 列表[字符串] |

SSL证书列表

rgw_frontend_type: 字符串 |

civetweb或beast(默认:beast)。有关更多信息,请参阅HTTP前端

rgw_realm: 字符串 |

与此服务关联的RGW域。如果直接将规范应用于cephdam,则需要手动创建。如果是rgw模块,则域将自动创建。

rgw_user_counters_cache

要通过用户配置值跟踪操作指标,rgw_user_counters_cache必须设置为true

rgw_user_counters_cache_size

用于设置每个用户计数器缓存中的条目数

rgw_zone: 字符串 |

与此服务关联的RGW区。如果直接将规范应用于cephdam,则需要手动创建。如果是rgw模块,则区将自动创建。

rgw_zonegroup: 字符串 |

与此服务关联的RGW区组。如果直接将规范应用于cephdam,则需要手动创建。如果是rgw模块,则区组将自动创建。

ssl

启用SSL

RGW 的高可用性服务 )。 (实验性

The ingress服务允许您使用最少的配置选项为RGW创建一个高可用性端点。编排器将部署和管理haproxy和keepalived的组合,以在浮动虚拟IP上提供负载均衡。

如果RGW服务配置为启用SSL,则入站服务将在后端配置中使用sslverify none选项。由于后端通过IP地址而不是FQDN访问,因此禁用信任验证。

../../../_images/HAProxy_for_RGW.svg

有N个主机部署了入站服务。每个主机都有一个haproxy守护进程和一个keepalived守护进程。虚拟IP仅在一个主机上自动配置一次。

每个keepalived守护进程每隔几秒钟检查同一主机上的haproxy守护进程是否正在响应。Keepalived还会检查主keepalived守护进程是否运行没有问题。如果“主”keepalived守护进程或活动的haproxy没有响应,则运行在备份模式下的一个剩余keepalived守护进程将被选为主节点,虚拟IP将移动到该节点。

活动的haproxy充当负载均衡器,将所有RGW请求分配给所有可用的RGW守护进程。

前提条件

  • 现有的RGW服务。

部署

使用命令:

ceph orch apply -i <ingress_spec_file>

服务规范

服务规范是具有以下属性的YAML块:

service_type: ingress
service_id: rgw.something    # adjust to match your existing RGW service
placement:
  hosts:
    - host1
    - host2
    - host3
spec:
  backend_service: rgw.something            # adjust to match your existing RGW service
  virtual_ip: <string>/<string>             # ex: 192.168.20.1/24
  frontend_port: <integer>                  # ex: 8080
  monitor_port: <integer>                   # ex: 1967, used by haproxy for load balancer status
  virtual_interface_networks: [ ... ]       # optional: list of CIDR networks
  use_keepalived_multicast: <bool>          # optional: Default is False.
  vrrp_interface_network: <string>/<string> # optional: ex: 192.168.20.0/24
  health_check_interval: <string>           # optional: Default is 2s.
  ssl_cert: |                               # optional: SSL certificate and key
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    ...
    -----END PRIVATE KEY-----
service_type: ingress
service_id: rgw.something    # adjust to match your existing RGW service
placement:
  hosts:
    - host1
    - host2
    - host3
spec:
  backend_service: rgw.something      # adjust to match your existing RGW service
  virtual_ips_list:
  - <string>/<string>                 # ex: 192.168.20.1/24
  - <string>/<string>                 # ex: 192.168.20.2/24
  - <string>/<string>                 # ex: 192.168.20.3/24
  frontend_port: <integer>            # ex: 8080
  monitor_port: <integer>             # ex: 1967, used by haproxy for load balancer status
  virtual_interface_networks: [ ... ] # optional: list of CIDR networks
  first_virtual_router_id: <integer>  # optional: default 50
  health_check_interval: <string>     # optional: Default is 2s.
  ssl_cert: |                         # optional: SSL certificate and key
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    ...
    -----END PRIVATE KEY-----

其中服务规范的属性为:

  • service_type

    必须设置为“ingress”

  • service_id

    服务的名称。我们建议根据您正在控制的入站服务命名此服务(例如,rgw.foo).

  • placement hosts

    希望运行HA守护进程的主机。在这些主机上会部署haproxy和keepalived容器。这些主机不需要与RGW部署的节点匹配。

  • virtual_ip

    入站服务将可用的虚拟IP(和网络)以CIDR格式表示。

  • virtual_ips_list

    入站服务可用的CIDR格式的虚拟IP地址。

  • virtual_interface_networks

    用于标识要用于虚拟IP的以太网接口的接口列表。

  • frontend_port

    用于访问入站服务的端口。

  • ssl_cert:

    如果要启用SSL,则为SSL证书。这必须包含以.pem格式表示的证书和私钥块。

  • use_keepalived_multicast

    默认为False。默认情况下,cephadm将部署keepalived配置以使用单播IP,使用主机的IP。所选的IP将是cephadm用于连接到机器的相同IP。但如果更喜欢多播,我们可以设置use_keepalived_multicasttoTrue,Keepalived将使用多播IP(224.0.0.18)在实例之间通信,使用与VIP相同的接口。

  • vrrp_interface_network

    默认情况下,cephadm将配置keepalived以使用与VIP相同的接口进行VRRP通信。如果需要另一个接口,可以通过vrrp_interface_network设置,并使用网络来标识要使用的以太网接口。

  • first_virtual_router_id

    默认为50。当部署多个入站时,此参数可用于确保每个keepalived具有不同的虚拟_router_id。在使用virtual_ips_list的情况下,每个IP将创建自己的虚拟路由器。因此,第一个将具有first_virtual_router_id,第二个将具有first_virtual_router_id+ 1,等等。有效值从1到255。

  • health_check_interval

    默认为2秒。此参数可用于设置与后端服务器进行haproxy健康检查的间隔。

选择虚拟IP的网络接口

您不能简单地提供要在其上配置虚拟IP的网络接口的名称,因为接口名称可能在不同主机(和/或重新启动)之间有所不同。相反,cephadm将根据其他已配置的IP地址选择接口。

通常,虚拟IP将配置在具有相同子网中现有IP的第一个网络接口上。例如,如果虚拟IP是192.168.0.80/24,而eth2具有静态IP

在某些情况下,虚拟IP可能不属于与现有静态IP相同的子网。在这种情况下,您可以提供一个与现有IP匹配的子网列表,cephadm将虚拟IP放在与现有IP匹配的第一个网络接口上。例如,如果虚拟IP是192.168.0.80/24,而我们希望它在同一接口上与机器的静态IP在

service_type: ingress
service_id: rgw.something
spec:
  virtual_ip: 192.168.0.80/24
  virtual_interface_networks:
    - 10.10.0.0/16
  ...

此策略的一个后果是,您目前无法将虚拟IP配置在没有任何现有IP地址的接口上。在这种情况下,我们建议在正确的接口上配置一个“虚拟”IP地址,并在 unroutable 网络上,并在网络列表中引用该虚拟网络(见上文)。

入站的实用提示

  • 建议至少有三个radosgw守护进程以实现可用性和负载均衡。

  • 我们建议至少有三个主机用于ingress服务。

更多阅读

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.