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。
流程
- 为 Red Hat Quay 部署 postgres 实例。
输入以下命令登录到数据库:
psql -U <username> -h <hostname> -p <port> -d <database_name>
psql -U <username> -h <hostname> -p <port> -d <database_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 Red Hat Quay 创建名为
quay
的数据库。例如:CREATE DATABASE quay;
CREATE DATABASE quay;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在数据库中启用 pg_trm 扩展
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Redis 实例:
注意- 如果您的云供应商有自己的服务,则部署 Redis 实例可能是必需的。
- 如果您使用 Builders,则需要部署 Redis 实例。
- 为 Redis 部署虚拟机
- 验证是否可以从运行 Red Hat Quay 的集群访问
- 必须打开端口 6379/TCP
在实例内运行 Redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 创建两个对象存储后端,每个集群一个。理想情况下,一个对象存储桶将接近第一个或主集群,另一个则运行更接近第二个或次要集群。
- 使用同一配置捆绑包部署集群,使用环境变量覆盖来为单个集群选择适当的存储后端。
- 配置负载均衡器,以提供集群的单个入口点。
使用以下步骤为 OpenShift Container Platform 上的 Red Hat Quay 配置 geo-replication。
流程
创建在集群之间共享的
config.yaml
文件。此config.yaml
文件包含通用 PostgreSQL、Redis 和存储后端的详情:geo-replication
config.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 路由必须使用正确的
SERVER_HOSTNAME
,并且必须与全局负载平衡器的主机名匹配。
输入以下命令来创建
configBundleSecret
:oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在每个集群中,设置
configBundleSecret
,并使用QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量覆盖来为该集群配置适当的存储。例如:注意两个部署之间的
config.yaml
文件都必须匹配。如果对一个集群进行更改,还必须更改它。US cluster
QuayRegistry
示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意因为 SSL/TLS 是非受管的,且路由被管理,因此您必须直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 SSL/TLS 和路由。
欧洲集群
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意因为 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,并使用存储库镜像作为异地复制的替代选择。