注意
本文档适用于 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,请使用myhost1
和myhost2
:
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_port: int | 无
RGW守护进程的端口
- rgw_frontend_ssl_certificate: 字符串 | 列表[字符串] | 无
SSL证书列表
- 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,则入站服务将在后端配置中使用ssl和verify none选项。由于后端通过IP地址而不是FQDN访问,因此禁用信任验证。
有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_multicast
toTrue
,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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.