{{< details >}}

  • Tier: 专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

在故障转移后,可以恢复到降级的 站点以恢复原始配置。此过程包括两个步骤:

  1. 将旧 站点设置为 次级 站点。
  2. 次级 站点提升为 站点。

{{< alert type=”warning” >}}

如果您对该站点上的数据一致性有任何疑虑,我们建议从头开始设置。

{{< /alert >}}

配置原 站点为 次级 站点

由于原 站点与当前 站点不同步,第一步是使原 站点保持最新。注意,当将原 站点重新同步时,存储在磁盘上的数据(如存储库和上传)的删除操作不会重放,这可能导致磁盘使用量增加。或者,您可以设置新的 次级 极狐GitLab 实例以避免这种情况。

要使原 站点保持最新:

  1. 通过 SSH 登录到落后的原 站点。
  2. 删除 /etc/gitlab/gitlab-cluster.json(如果存在)。

    如果要重新添加为 次级 站点的站点是通过 gitlab-ctl geo promote 命令提升的,那么它可能包含 /etc/gitlab/gitlab-cluster.json 文件。例如,在 gitlab-ctl reconfigure 过程中,您可能会看到类似输出:

    The 'geo_primary_role' is defined in /etc/gitlab/gitlab-cluster.json as 'true' and overrides the setting in the /etc/gitlab/gitlab.rb
    

    如果是这样,则必须从站点中的每个 Sidekiq、PostgreSQL、Gitaly 和 Rails 节点删除 /etc/gitlab/gitlab-cluster.json,以使 /etc/gitlab/gitlab.rb 再次成为单一的真实来源。

  3. 确保所有服务都已启动:

    sudo gitlab-ctl start
    

    {{< alert type=”note” >}}

    如果您永久禁用了 站点,现在需要撤销这些步骤。对于具有 systemd 的发行版,如 Debian/Ubuntu/CentOS7+,您必须运行 sudo systemctl enable gitlab-runsvdir。对于没有 systemd 的发行版,如 CentOS 6,您需要从头安装极狐GitLab 实例并按照设置说明将其设置为 次级 站点。在这种情况下,您无需执行下一步。

    {{< /alert >}}

    {{< alert type=”note” >}}

    如果您在灾难恢复过程中更改了该站点的 DNS 记录,可能需要在此过程中阻止对该站点的所有写入

    {{< /alert >}}

  4. 设置 Geo。在这种情况下,次级 站点指的是原 站点。
    1. 如果在 当前次级 站点(当它是主站点时)启用了 PgBouncer,则通过编辑 /etc/gitlab/gitlab.rb 并运行 sudo gitlab-ctl reconfigure 禁用它。
    2. 然后,您可以在 次级 站点上设置数据库复制。

如果您失去了原始 站点,请按照设置说明设置新的 次级 站点。

次级 站点提升为 站点

当初始复制完成且 站点和 次级 站点紧密同步时,您可以进行计划的故障转移

恢复 次级 站点

如果您的目标是再次拥有两个站点,您需要通过重复第一步来恢复您的 次级 站点(配置原 站点为 次级 站点)来使 次级 站点重新上线。

恢复额外的 次级 站点

如果有多个 次级 站点,现在可以使其上线。对于每个剩余的站点,与 站点启动复制过程

跳过 次级 站点上的数据重新传输

当添加 次级 站点时,如果它包含本应从主站点同步的数据,则 Geo 会避免重新传输数据。

  • Git 存储库通过 git fetch 传输,仅传输缺失的引用。
  • Geo 的容器注册表同步代码比较标签,仅拉取缺失的标签。
  • 如果首次同步时存在 Blobs,则会跳过这些数据。

使用场景:

  • 您进行计划的故障转移,并通过将旧主站点作为次级站点附加来降级,而无需重建它。
  • 您有多个次级 Geo 站点。您进行计划的故障转移,并重新附加其他次级 Geo 站点而无需重建它们。
  • 您通过提升和降级次级站点进行故障转移测试,并在不重建的情况下重新附加它。
  • 您恢复备份并将站点作为次级站点附加。
  • 您手动复制数据到次级站点以解决同步问题。
  • 您删除或截断 Geo 跟踪数据库中的注册表表行以解决问题。
  • 您重置 Geo 跟踪数据库以解决问题。

跳过 Blobs 的重新传输

{{< history >}}

  • 引入于极狐GitLab 16.8,使用名为 geo_skip_download_if_exists功能标志。默认禁用。
  • 在极狐GitLab 16.9 中 GA,功能标志 geo_skip_download_if_exists 被移除。

{{< /history >}}

当您添加包含预先存在的 blobs 数据的次级站点时,次级 Geo 站点将避免重新传输这些数据。这适用于:

  • CI 作业产物
  • CI 流水线产物
  • CI 安全文件
  • LFS 对象
  • 合并请求差异
  • 软件包文件
  • 页面部署
  • Terraform 状态版本
  • 上传
  • 依赖代理清单
  • 依赖代理 blobs

如果次级站点的副本实际上已损坏,则后台验证最终会失败,并且 blob 将被重新同步。

只有在 Geo 跟踪数据库中没有相应注册记录时,才会以这种方式跳过 blobs。条件严格,因为重新同步几乎总是有意的,我们不能冒险错误地跳过传输。