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