使降级的主要站点重新上线
故障转移后,可以回到降级的主要站点以恢复您的原始配置。这个过程包括两个步骤:
- 将旧的主要站点变成次要站点。
- 将次要站点提升为主要站点。
将之前的主要站点配置为次要站点
由于之前的主要站点与当前的主要站点不同步,所以第一步是更新之前的主要站点。请注意,当使以前的主要站点重新同步时,不会重复存储在磁盘上的数据(如仓库和上传文件)的删除,这可能会导致磁盘使用量增加。或者,您可以设置一个新的次要极狐 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
如果您在灾难恢复过程中更改了此站点的 DNS 记录,在此过程中,您可能需要阻止对该站点的所有写入。 -
设置数据库复制。在这种情况下,次要站点是指之前的主要站点。
- 如果 PgBouncer 在当前次要站点(当它是主要站点时)上启用,请通过编辑
/etc/gitlab/gitlab.rb
禁用它,并运行sudo gitlab-ctl reconfigure
。 - 然后,您可以在次要站点上设置数据库复制。
- 如果 PgBouncer 在当前次要站点(当它是主要站点时)上启用,请通过编辑
如果您丢失了原来的主要站点,请按照设置说明,设置新的次要站点。
将次要站点提升为主要站点
当初始复制完成并且主要站点和次要站点紧密同步时,您可以执行计划的故障转移。
恢复次要站点
如果您的目标是再次拥有两个站点,您还需要通过重复第一步(将前主要站点配置为次要站点),使您的次要站点重新上线。
Restoring additional secondary sites
回复其他的 次要 站点
如果有多个 次要 站点,您需要将它们全部重新上线。对于每个剩余的站点,用 主要 站点来启动复制过程。
在 次要 节点上跳过数据重传输。
当添加次要节点时,如果它包含需要从主站点同步的数据时,那么 Geo 会避免重新传输数据。
- Git 仓库使用
git fetch
传输,而且仅传输丢失的 refs。 - Geo 的容器惊险仓库同步代码会对比标签,而且仅拉取丢失的标签。
- Blobs/files会被跳过,前提是他们在首次同步时就已存在。
用户用例:
- 您需要进行一次有计划的故障转移,并通过将旧的主站点作为从站点连接(而不重建它)来降级该旧主站点。
- 如果您有多个次要站点。您需要进行一次有计划的故障转移,然后在无需重建其他次要节点的情况下来重新连接这些站点。
- 您需要通过提升和降级一个次要站点并在不重建它的情况下重新连接它来进行故障转移测试。
- 您需要恢复备份并将站点作为次要站点进行连接。
- 您需要手动拷贝数据到次要站点以解决同步问题。
- 您需要删除或截断 Geo 追踪数据库中的镜像仓库数据表来解决问题。
- 您需要重置 Geo 追踪数据库来解决问题。
跳过 blobs 或文件的重新传输
- 引入于极狐GitLab 16.8,使用名为
geo_skip_download_if_exists
的功能标志。默认禁用。- 在极狐GitLab 16.9 中 GA。功能标志
geo_skip_download_if_exists
被移除。
当您要添加一个有既有文件数据的次要节点时,则次要节点将避免重新传输该数据。这适用于:
- CI 作业产物
- CI 流水线产物
- CI 安全文件
- LFS 对象
- 合并请求差异
- 软件包文件
- Pages 部署
- Terraform 状态版本
- 上传
- 依赖代理清单
- 依赖代理 blobs
如果次要节点的拷贝被损坏,则后台的验证就会失败,并且文件会被重新同步。
只有当文件在 Geo 跟踪数据库中没有相应的注册表记录时,才会以这种方式跳过这些文件。条件设定得很严格,因为重新同步几乎总是有意为之,我们不能冒误跳过传输操作的风险。