14.3. 使用独立 Red Hat Quay 进行区域复制


在以下镜像中,Red Hat Quay 在两个独立的区域独立运行,一个通用数据库和通用 Redis 实例。本地化镜像存储在每个区域中提供,镜像拉取是从最接近的可用存储引擎提供的。容器镜像推送被写入 Red Hat Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。

注意

如果 Clair 在一个集群中失败,例如 US 集群,则美国用户不会在 Red Hat Quay for the second cluster (EU)中看到漏洞报告。这是因为所有 Clair 实例都有相同的状态。当 Clair 失败时,通常是因为集群中的问题。

地理复制架构

Geo-replication

14.3.1. 启用存储复制 - 独立 Quay

使用以下步骤在 Red Hat Quay 上启用存储复制。

流程

  1. 在 Red Hat Quay 配置编辑器中,找到 Registry Storage 部分。
  2. Enable Storage Replication
  3. 添加要复制数据的每个存储引擎。必须列出所有要使用的存储引擎。
  4. 如果需要将所有镜像完整复制到所有存储引擎,请在每个存储引擎配置下点 Replicate to storage engine。这样可确保所有镜像都复制到该存储引擎。

    注意

    要启用每个命名空间的复制,请联络 Red Hat Quay 支持。

  5. 完成后,点 Save Configuration Changes。Red Hat Quay 重启后将生效。
  6. 在为 geo-replication 添加存储并在存储引擎 中启用复制后,您必须在所有存储中同步现有镜像数据。要做到这一点,您必须在容器中 oc exec (alternative, docker execkubectl exec),并输入以下命令:

    # scl enable python27 bash
    # python -m util.backfillreplication
    注意

    这是一个在添加新存储后同步内容的一次性操作。

14.3.2. 使用存储首选项运行 Red Hat Quay

  1. 将 config.yaml 复制到运行 Red Hat Quay 的所有机器上
  2. 对于每个区域中的每台机器,使用运行机器的区域的首选存储引擎添加一个 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量。

    例如,对于在 Europe 中运行的机器,且主机上的 config 目录来自 $QUAY/config

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443  \
       --name=quay \
       -v $QUAY/config:/conf/stack:Z \
       -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \
       registry.redhat.io/quay/quay-rhel8:v3.9.7
    注意

    指定的环境变量的值必须与配置面板中定义的 Location ID 的名称匹配。

  3. 重启所有 Red Hat Quay 容器

14.3.3. 从独立的 Red Hat Quay 部署中删除地理复制站点

通过按照以下流程,Red Hat Quay 管理员可以删除地理复制设置中的站点。

先决条件

  • 您已为 Red Hat Quay geo-replication 配置至少两个站点,例如 usstorageeustorage
  • 每个站点都有自己的组织、存储库和镜像标签。

流程

  1. 运行以下命令,在所有定义的站点间同步 Blob:

    $ python -m util.backfillreplication
    警告

    在从 Red Hat Quay config.yaml 文件中删除存储引擎 前,您必须确保 所有 Blob 在所有定义的站点间同步。在继续操作前,请完成此步骤。

  2. 在站点 usstorage 的 Red Hat Quay config.yaml 文件中,删除 eustorage 站点的 DISTRIBUTED_STORAGE_CONFIG 条目。
  3. 输入以下命令获取正在运行的容器列表:

    $ podman ps

    输出示例

    CONTAINER ID  IMAGE                                                                     COMMAND         CREATED         STATUS             PORTS                                        NAMES
    92c5321cde38  registry.redhat.io/rhel8/redis-5:1                                        run-redis       11 days ago     Up 11 days ago     0.0.0.0:6379->6379/tcp                       redis
    4e6d1ecd3811  registry.redhat.io/rhel8/postgresql-13:1-109                              run-postgresql  33 seconds ago  Up 34 seconds ago  0.0.0.0:5432->5432/tcp                       postgresql-quay
    d2eadac74fda  registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131  registry        4 seconds ago   Up 4 seconds ago   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp  quay

  4. 输入以下命令在 PostgreSQL 容器内执行 shell:

    $ podman exec -it postgresql-quay -- /bin/bash
  5. 运行以下命令来输入 psql :

    bash-4.4$ psql
  6. 输入以下命令在 geo-replicated 部署中显示站点列表:

    quay=# select * from imagestoragelocation;

    输出示例

     id |       name
    ----+-------------------
      1 | usstorage
      2 | eustorage

  7. 输入以下命令退出 postgres CLI 以重新输入 bash-4.4 :

    \q
  8. 输入以下命令永久删除 eustorage 站点:

    重要

    无法撤销以下操作。请谨慎使用。

    bash-4.4$ python -m util.removelocation eustorage

    输出示例

    WARNING: This is a destructive operation. Are you sure you want to remove eustorage from your storage locations? [y/n] y
    Deleted placement 30
    Deleted placement 31
    Deleted placement 32
    Deleted placement 33
    Deleted location eustorage

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.