4.8. Ceph 对象网关的高可用性


作为存储管理员,您可以将多个 Ceph 对象网关实例分配到一个区域。这可让您随着负载增加(即同一 zone group 和 zone)进行横向扩展,但您不需要联合架构来使用高可用性代理。由于每个 Ceph 对象网关守护进程都有自己的 IP 地址,因此您可以使用 ingress 服务在许多 Ceph 对象网关守护进程或节点之间平衡负载。ingress 服务管理 Ceph 对象网关环境的 HAProxy 和 keepalived 守护进程。您还可以在 HAProxy 服务器上终止 HTTPS 流量,并为 Ceph 对象网关使用 HAProxy 服务器和 Beast 前端 web 服务器实例之间的 HTTP。

先决条件

  • 在不同主机上运行至少两个 Ceph 对象网关守护进程。
  • 具有不同主机上运行的 入口 服务的两个实例的容量。

4.8.1. 高可用性服务

ingress 服务为 Ceph 对象网关提供高可用性端点。可以根据需要将入口 服务部署到任意数量的主机上。红帽建议至少有两个支持的 Red Hat Enterprise Linux 服务器,每个服务器都配置了 ingress 服务。您可以使用最小配置选项运行高可用性(HA)服务。Ceph 编配器部署 入口 服务,该服务通过提供浮动虚拟 IP 地址的负载平衡来管理 haproxykeepalived 守护进程。活跃的 haproxy 将所有 Ceph 对象网关请求分发到所有可用的 Ceph 对象网关守护进程。

一次在其中一个 入口 主机上自动配置虚拟 IP 地址,称为主主机。Ceph 编配器基于配置为同一子网一部分的现有 IP 地址选择第一个网络接口。如果虚拟 IP 地址不属于同一子网,您可以为 Ceph 编配器定义子网列表以匹配现有 IP 地址。如果 keepalived 守护进程和活跃 haproxy 在主主机上没有响应,则虚拟 IP 地址会移到备份主机上。此备份主机成为新的主主机。

警告

目前,您无法在没有配置 IP 地址的网络接口中配置虚拟 IP 地址。

重要

要使用安全套接字层(SSL),SSL 必须通过 ingress 服务而不是 Ceph 对象网关终止。

高可用性架构图

4.8.2. 为 Ceph 对象网关配置高可用性

要为 Ceph 对象网关配置高可用性(HA),您编写 YAML 配置文件,Ceph 编配器则执行 入口 服务的安装、配置和管理。ingress 服务使用 haproxykeepalived 守护进程为 Ceph 对象网关提供高可用性。

先决条件

  • 至少两个运行 Red Hat Enterprise Linux 9 或更高版本的主机,用于安装 ingress 服务。
  • 一个正常运行的 Red Hat Ceph Storage 集群。
  • 最少两个 Ceph 对象网关守护进程在不同主机上运行。
  • 对运行 入口 服务的主机的根级别访问权限。
  • 如果使用防火墙,则打开 HTTP 的端口 80,为 HTTPS 流量打开端口 443。

流程

  1. 创建新的 ingress.yaml 文件:

    示例

    [root@host01 ~] touch ingress.yaml

  2. 打开 ingress.yaml 文件进行编辑。添加了以下选项,并添加适用于环境的值:

    语法

    service_type: ingress 1
    service_id: SERVICE_ID 2
    placement: 3
      hosts:
        - HOST1
        - HOST2
        - HOST3
    spec:
      backend_service: SERVICE_ID
      virtual_ip: IP_ADDRESS/CIDR 4
      frontend_port: INTEGER 5
      monitor_port: INTEGER 6
      virtual_interface_networks: 7
        - IP_ADDRESS/CIDR
      ssl_cert: | 8

    1
    必须设置为 ingress
    2
    必须与现有的 Ceph 对象网关服务名称匹配。
    3
    部署 haproxykeepalived 容器的位置。
    4
    ingress 服务可用的虚拟 IP 地址。
    5
    访问 入口服务的端口
    6
    访问 haproxy 负载均衡器状态的端口。
    7
    可用子网的可选列表。
    8
    可选 SSL 证书和私钥。

    示例

    service_type: ingress
    service_id: rgw.foo
    placement:
      hosts:
        - host01.example.com
        - host02.example.com
        - host03.example.com
    spec:
      backend_service: rgw.foo
      virtual_ip: 192.168.1.2/24
      frontend_port: 8080
      monitor_port: 1967
      virtual_interface_networks:
        - 10.10.0.0/16
      ssl_cert: |
        -----BEGIN CERTIFICATE-----
        MIIEpAIBAAKCAQEA+Cf4l9OagD6x67HhdCy4Asqw89Zz9ZuGbH50/7ltIMQpJJU0
        gu9ObNtIoC0zabJ7n1jujueYgIpOqGnhRSvsGJiEkgN81NLQ9rqAVaGpadjrNLcM
        bpgqJCZj0vzzmtFBCtenpb5l/EccMFcAydGtGeLP33SaWiZ4Rne56GBInk6SATI/
        JSKweGD1y5GiAWipBR4C74HiAW9q6hCOuSdp/2WQxWT3T1j2sjlqxkHdtInUtwOm
        j5Ism276IndeQ9hR3reFR8PJnKIPx73oTBQ7p9CMR1J4ucq9Ny0J12wQYT00fmJp
        -----END CERTIFICATE-----
        -----BEGIN PRIVATE KEY-----
        MIIEBTCCAu2gAwIBAgIUGfYFsj8HyA9Zv2l600hxzT8+gG4wDQYJKoZIhvcNAQEL
        BQAwgYkxCzAJBgNVBAYTAklOMQwwCgYDVQQIDANLQVIxDDAKBgNVBAcMA0JMUjEM
        MAoGA1UECgwDUkhUMQswCQYDVQQLDAJCVTEkMCIGA1UEAwwbY2VwaC1zc2wtcmhj
        czUtOGRjeHY2LW5vZGU1MR0wGwYJKoZIhvcNAQkBFg5hYmNAcmVkaGF0LmNvbTAe
        -----END PRIVATE KEY-----

  3. 启动 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell --mount ingress.yaml:/var/lib/ceph/radosgw/ingress.yaml

  4. 配置最新的 haproxykeepalived 镜像:

    语法

    ceph config set mgr mgr/cephadm/container_image_haproxy HAPROXY_IMAGE_ID
    ceph config set mgr mgr/cephadm/container_image_keepalived KEEPALIVED_IMAGE_ID

    Red Hat Enterprise Linux 9

    [ceph: root@host01 /]# ceph config set mgr mgr/cephadm/container_image_haproxy registry.redhat.io/rhceph/rhceph-haproxy-rhel9:latest
    [ceph: root@host01 /]# ceph config set mgr mgr/cephadm/container_image_keepalived registry.redhat.io/rhceph/keepalived-rhel9:latest

  5. 使用 Ceph 编配器安装和配置新的 ingress 服务:

    [ceph: root@host01 /]# ceph orch apply -i /var/lib/ceph/radosgw/ingress.yaml
  6. Ceph 编配器完成后,验证 HA 配置。

    1. 在运行 ingress 服务的主机上,检查是否显示虚拟 IP 地址:

      示例

      [root@host01 ~]# ip addr show

    2. 尝试从 Ceph 客户端访问 Ceph 对象网关:

      语法

      wget HOST_NAME

      示例

      [root@client ~]# wget host01.example.com

      如果返回带有类似以下示例内容的 index.html,则 Ceph 对象网关的 HA 配置可以正常工作。

      示例

      <?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>

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.