{{< details >}}
- Tier: 专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
在故障转移后,可以恢复到降级的 主 站点以恢复原始配置。此过程包括两个步骤:
- 将旧 主 站点设置为 次级 站点。
- 将 次级 站点提升为 主 站点。
{{< alert type=”warning” >}}
如果您对该站点上的数据一致性有任何疑虑,我们建议从头开始设置。
{{< /alert >}}
配置原 主 站点为 次级 站点
由于原 主 站点与当前 主 站点不同步,第一步是使原 主 站点保持最新。注意,当将原 主 站点重新同步时,存储在磁盘上的数据(如存储库和上传)的删除操作不会重放,这可能导致磁盘使用量增加。或者,您可以设置新的 次级 极狐GitLab 实例以避免这种情况。
要使原 主 站点保持最新:
- 通过 SSH 登录到落后的原 主 站点。
-
删除
/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
再次成为单一的真实来源。 -
确保所有服务都已启动:
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 >}}
-
设置 Geo。在这种情况下,次级 站点指的是原 主 站点。
- 如果在 当前次级 站点(当它是主站点时)启用了 PgBouncer,则通过编辑
/etc/gitlab/gitlab.rb
并运行sudo gitlab-ctl reconfigure
禁用它。 - 然后,您可以在 次级 站点上设置数据库复制。
- 如果在 当前次级 站点(当它是主站点时)启用了 PgBouncer,则通过编辑
如果您失去了原始 主 站点,请按照设置说明设置新的 次级 站点。
将 次级 站点提升为 主 站点
当初始复制完成且 主 站点和 次级 站点紧密同步时,您可以进行计划的故障转移。
恢复 次级 站点
如果您的目标是再次拥有两个站点,您需要通过重复第一步来恢复您的 次级 站点(配置原 主 站点为 次级 站点)来使 次级 站点重新上线。
恢复额外的 次级 站点
如果有多个 次级 站点,现在可以使其上线。对于每个剩余的站点,与 主 站点启动复制过程。
跳过 次级 站点上的数据重新传输
当添加 次级 站点时,如果它包含本应从主站点同步的数据,则 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。条件严格,因为重新同步几乎总是有意的,我们不能冒险错误地跳过传输。