Geo 常见问题解答
- Tier: Premium, Ultimate
- Offering: GitLab Self-Managed
运行 Geo 的最低要求是什么?
要求在索引页面中列出
Geo 如何知道要同步哪些项目?
在每个辅助站点上,都有一个 GitLab 数据库的只读复制副本。 辅助站点还有一个跟踪数据库,用于存储已同步的项目。 Geo 比较这两个数据库,以查找尚未跟踪的项目。
开始时,这个跟踪数据库是空的,所以 Geo 尝试从它在 GitLab 数据库中可以看到的每个项目进行更新。
对于每个要同步的项目:
- Geo 发出
git fetch geo --mirror命令以从主站点获取最新信息。 如果没有变化,同步会很快。否则,它必须拉取最新的提交。 - 辅助站点更新跟踪数据库,以存储已按名称同步项目的事实。
- 重复此过程,直到所有项目都同步完成。
当有人向主站点推送提交时,它会在 GitLab 数据库中生成一个仓库已更改的事件。 辅助站点看到此事件,将相关项目标记为"dirty"(需要同步),并安排该项目重新同步。
为确保管道问题(例如,同步失败次数过多或作业丢失)不会永久停止项目同步,Geo 还会定期检查跟踪数据库中标记为 dirty 的项目。此检查发生在并发同步数低于 repos_max_capacity 且没有新项目等待同步时。
Geo 还有一个校验和功能,它对所有 Git 引用的 SHA 值运行 SHA256 求和。 如果主站点和辅助站点之间的引用不匹配,则辅助站点会将该项目标记为 dirty 并尝试重新同步。 因此,即使我们的跟踪数据库已过时,验证也应该激活并发现仓库状态的差异并重新同步。
可以在灾难恢复情况下使用 Geo 吗?
是的,但我们复制的内容有限制(请参阅哪些数据会复制到辅助站点?)。
请阅读灾难恢复的文档。
哪些数据会复制到辅助站点?
我们复制整个 rails 数据库、项目仓库、LFS 对象、生成的附件、头像等。这意味着用户帐户、问题、合并请求、组和项目数据等信息可供查询。
有关 Geo 复制的数据的完整列表,请参阅支持的 Geo 数据类型页面。
我可以 git push 到辅助站点吗?
支持直接推送到辅助站点(包括 HTTP 和 SSH,包括 Git LFS)。
将提交复制到辅助站点需要多长时间?
所有复制操作都是异步的,并排队等待分发。因此,这取决于很多因素,例如流量大小、提交的大小、站点之间的连接性以及您的硬件。
如果 SSH 服务器运行在不同的端口怎么办?
那完全没问题。我们使用 HTTP(s) 从主站点获取仓库更改到所有辅助站点。
我可以为辅助站点创建一个容器注册表来镜像主站点吗?
是的,但是我们仅支持此功能用于灾难恢复场景。请参阅辅助站点的容器注册表。
可以登录到辅助站点吗?
是的,但辅助站点从主实例接收所有身份验证数据(如用户帐户和登录)。这意味着您会被重定向到主站点进行身份验证,然后被路由回来。
所有 Geo 站点都需要与主站点相同吗?
不,Geo 站点可以基于不同的参考架构。例如,您可以让主站点基于 3K 参考架构,一个辅助站点基于 3K 参考架构,另一个基于 1K 参考架构。
Geo 会复制已归档的项目吗?
是的,只要它们没有通过选择性同步被排除。
Geo 会复制个人项目吗?
是的,只要它们没有通过选择性同步被排除。
延迟删除的项目会复制到辅助站点吗?
是的,通过延迟删除计划删除但尚未永久删除的项目会复制到辅助站点。
当我的主站点宕机时,我的辅助站点会发生什么?
当主站点宕机时,您的辅助站点将无法通过 UI 访问,除非您恢复主站点上的服务或在辅助站点上执行升级操作。