6.2. 地理复制要求和约束


  • 在地理复制设置中,Red Hat Quay 要求所有区域都可以读取和写入所有其他区域的对象存储。对象存储必须可以被所有其他区域访问。
  • 如果一个地理复制站点的对象存储系统失败,该站点的 Red Hat Quay 部署必须被关闭,以便客户端由全局负载均衡器重定向到具有完整存储系统的剩余站点。否则,客户端将遇到拉取和推送失败。
  • Red Hat Quay 没有内部感知连接的对象存储系统的健康状态或可用性。用户必须配置全局负载均衡器(LB)来监控分布式系统的健康状况,并根据存储状态将流量路由到不同的站点。
  • 要检查 geo-replication 部署的状态,您必须使用 /health/endtoend 检查点,该检查点用于全局健康监控。您必须使用 /health/endtoend 端点手动配置重定向。/health/instance 端点仅检查本地实例健康状况。
  • 如果一个站点的对象存储系统不可用,则其余站点或站点没有自动重定向到剩余的存储系统或系统。
  • 地理复制(geo-replication)是异步的。如果一个站点永久丢失,则已存储在该站点的对象存储系统中,但在失败时还没有复制到剩余的站点的数据会丢失。
  • 单个数据库,因此所有区域都共享所有元数据和 Red Hat Quay 配置。

    地理复制不会复制数据库。如果出现停机,启用了地理复制功能的 Red Hat Quay 不会切换到另一个数据库。

  • 单个 Redis 缓存在整个 Red Hat Quay 设置间共享,需要可以被所有 Red Hat Quay pod 访问。
  • 所有区域应当使用相同的配置,但存储后端除外,这可以使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量明确进行配置。
  • 地理复制需要每个区域中的对象存储。它不适用于本地存储。
  • 每个区域必须能够访问每个区域中的每个存储引擎,这需要一个网络路径。
  • 或者,可以使用存储代理选项。
  • 整个存储后端(如所有 blob)被复制。相反,存储库镜像可以限制在存储库或镜像上。
  • 所有 Red Hat Quay 实例都必须共享相同的入口点,通常是通过负载均衡器。
  • 所有 Red Hat Quay 实例都必须具有相同的超级用户集合,因为它们在通用配置文件中定义。
  • 在地理复制环境中,您的 Clair 配置可以设置为 unmanaged。非受管 Clair 数据库允许 Red Hat Quay Operator 在跨地复制环境中工作,其中多个 Operator 实例必须与同一数据库通信。如需更多信息,请参阅高级 Clair 配置

    如果 Clair 配置保持 管理,则必须检索由 Operator 部署的 Clair 实例的配置文件。如需更多信息,请参阅 为 OpenShift Container Platform 上的 Clair 部署检索并解码 Clair 配置 secret

  • geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅 * Geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅使用 SSL/TLS 证书部署概念验证

如果无法满足上述要求,您应该使用两个或多个 Red Hat Quay 部署,并利用存储库镜像功能。

使用以下步骤在 OpenShift Container Platform 上设置 geo-replication。

流程

  1. 为 Red Hat Quay 部署 postgres 实例。
  2. 输入以下命令登录到数据库:

    psql -U <username> -h <hostname> -p <port> -d <database_name>
    Copy to Clipboard Toggle word wrap
  3. 为 Red Hat Quay 创建名为 quay 的数据库。例如:

    CREATE DATABASE quay;
    Copy to Clipboard Toggle word wrap
  4. 在数据库中启用 pg_trm 扩展

    \c quay;
    CREATE EXTENSION IF NOT EXISTS pg_trgm;
    Copy to Clipboard Toggle word wrap
  5. 部署 Redis 实例:

    注意
    • 如果您的云供应商有自己的服务,则部署 Redis 实例可能是必需的。
    • 如果您使用 Builders,则需要部署 Redis 实例。
    1. 为 Redis 部署虚拟机
    2. 验证是否可以从运行 Red Hat Quay 的集群访问
    3. 必须打开端口 6379/TCP
    4. 在实例内运行 Redis

      sudo dnf install -y podman
      podman run -d --name redis -p 6379:6379 redis
      Copy to Clipboard Toggle word wrap
  6. 创建两个对象存储后端,每个集群一个。理想情况下,一个对象存储桶将接近第一个或主集群,另一个则运行更接近第二个或次要集群。
  7. 使用同一配置捆绑包部署集群,使用环境变量覆盖来为单个集群选择适当的存储后端。
  8. 配置负载均衡器,以提供集群的单个入口点。

使用以下步骤为 OpenShift Container Platform 上的 Red Hat Quay 配置 geo-replication。

流程

  1. 创建在集群之间共享的 config.yaml 文件。此 config.yaml 文件包含通用 PostgreSQL、Redis 和存储后端的详情:

    geo-replication config.yaml 文件

    SERVER_HOSTNAME: <georep.quayteam.org or any other name> 
    1
    
    DB_CONNECTION_ARGS:
      autorollback: true
      threadlocals: true
    DB_URI: postgresql://postgres:password@10.19.0.1:5432/quay
    BUILDLOGS_REDIS:
      host: 10.19.0.2
      port: 6379
    USER_EVENTS_REDIS:
      host: 10.19.0.2
      port: 6379
    DATABASE_SECRET_KEY: 0ce4f796-c295-415b-bf9d-b315114704b8
    DISTRIBUTED_STORAGE_CONFIG:
      usstorage:
        - GoogleCloudStorage
        - access_key: GOOGQGPGVMASAAMQABCDEFG
          bucket_name: georep-test-bucket-0
          secret_key: AYWfEaxX/u84XRA2vUX5C987654321
          storage_path: /quaygcp
      eustorage:
        - GoogleCloudStorage
        - access_key: GOOGQGPGVMASAAMQWERTYUIOP
          bucket_name: georep-test-bucket-1
          secret_key: AYWfEaxX/u84XRA2vUX5Cuj12345678
          storage_path: /quaygcp
    DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS:
      - usstorage
      - eustorage
    DISTRIBUTED_STORAGE_PREFERENCE:
      - usstorage
      - eustorage
    FEATURE_STORAGE_REPLICATION: true
    Copy to Clipboard Toggle word wrap

    1
    路由必须使用正确的 SERVER_HOSTNAME,并且必须与全局负载平衡器的主机名匹配。
  2. 输入以下命令来创建 configBundleSecret

    $ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
    Copy to Clipboard Toggle word wrap
  3. 在每个集群中,设置 configBundleSecret,并使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量覆盖来为该集群配置适当的存储。例如:

    注意

    两个部署之间的 config.yaml 文件都必须匹配。如果对一个集群进行更改,还必须更改它。

    US cluster QuayRegistry 示例

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: georep-config-bundle
      components:
        - kind: objectstorage
          managed: false
        - kind: route
          managed: true
        - kind: tls
          managed: false
        - kind: postgres
          managed: false
        - kind: clairpostgres
          managed: false
        - kind: redis
          managed: false
        - kind: quay
          managed: true
          overrides:
            env:
            - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
              value: usstorage
        - kind: mirror
          managed: true
          overrides:
            env:
            - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
              value: usstorage
    Copy to Clipboard Toggle word wrap

    注意

    因为 SSL/TLS 是非受管的,且路由被管理,因此您必须直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 SSL/TLS 和路由

    欧洲集群

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: georep-config-bundle
      components:
        - kind: objectstorage
          managed: false
        - kind: route
          managed: true
        - kind: tls
          managed: false
        - kind: postgres
          managed: false
        - kind: clairpostgres
          managed: false
        - kind: redis
          managed: false
        - kind: quay
          managed: true
          overrides:
            env:
            - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
              value: eustorage
        - kind: mirror
          managed: true
          overrides:
            env:
            - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
              value: eustorage
    Copy to Clipboard Toggle word wrap

    注意

    因为 SSL/TLS 是非受管的,且路由被管理,因此您必须直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 SSL/TLS 和路由

6.2.2. 用于异地复制的混合存储

Red Hat Quay geo-replication 支持使用不同的和多个复制目标,例如在公有云上使用 AWS S3 存储,并在内部使用 Ceph 存储。这简化了从所有 Red Hat Quay pod 和集群节点授予对所有存储后端的访问权限的关键要求。因此,建议您使用以下方法:

  • VPN 以防止内部存储的可见性,或者
  • 只允许访问 Red Hat Quay 使用的特定存储桶的令牌对

这会导致 Red Hat Quay 公共云实例有权访问内部存储,但网络将被加密、保护,并使用 ACL,从而满足安全要求。

如果您无法实现这些安全措施,最好部署两个不同的 Red Hat Quay registry,并使用存储库镜像作为异地复制的替代选择。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat