{{< details >}}

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

{{< /details >}}

修复故障转移期间或将次要站点提升为主要站点时的错误

以下是可能在故障转移期间或将次要站点提升为主要站点时遇到的错误消息以及解决策略。

消息:ActiveRecord::RecordInvalid: Validation failed: Name has already been taken

提升一个次要站点时,你可能会遇到以下错误消息:

Running gitlab-rake geo:set_secondary_as_primary...

rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Name has already been taken
/opt/gitlab/embedded/service/gitlab-rails/ee/lib/tasks/geo.rake:236:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/service/gitlab-rails/ee/lib/tasks/geo.rake:221:in `block (2 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'
Tasks: TOP => geo:set_secondary_as_primary
(See full trace by running task with --trace)

You successfully promoted this node!

如果你在运行 gitlab-rake geo:set_secondary_as_primarygitlab-ctl promote-to-primary-node 时遇到此消息,请进入 Rails 控制台并运行:

Rails.application.load_tasks; nil
Gitlab::Geo.expire_cache!
Rake::Task['geo:set_secondary_as_primary'].invoke

消息:NoMethodError: undefined method `secondary?' for nil:NilClass

提升一个次要站点时,你可能会遇到以下错误消息:

sudo gitlab-rake geo:set_secondary_as_primary

rake aborted!
NoMethodError: undefined method `secondary?' for nil:NilClass
/opt/gitlab/embedded/service/gitlab-rails/ee/lib/tasks/geo.rake:232:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/service/gitlab-rails/ee/lib/tasks/geo.rake:221:in `block (2 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'
Tasks: TOP => geo:set_secondary_as_primary
(See full trace by running task with --trace)

此命令仅用于在次要站点上执行,如果你尝试在主要站点上运行此命令,则会显示此错误消息。

过期的产物

如果你注意到某种原因导致 Geo 次要站点上的产物多于 Geo 主要站点,你可以使用 Rake 任务来清理孤立的产物文件

在 Geo 次要站点,此命令还会清理所有与磁盘上的孤立文件相关的 Geo 注册表记录。

修复登录错误

消息:包含的重定向 URI 无效

如果你可以登录到主要站点的 Web 界面,但在尝试登录到次要 Web 界面时收到此错误消息,你应该验证 Geo 站点的 URL 是否与其外部 URL 匹配。

主要站点:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 Geo > 站点
  3. 找到受影响的次要站点并选择 编辑
  4. 确保 URL 字段与 /etc/gitlab/gitlab.rbexternal_url "https://gitlab.example.com" 的值匹配,在次要站点的 Rails 节点。

在次要站点使用 SAML 进行身份验证总是登陆到主要站点

这个问题通常在升级到极狐GitLab 15.1 时遇到。要修复此问题,请参阅在 Geo 中配置实例范围的 SAML 与单点登录

从部分故障转移中恢复

部分故障转移到次要 Geo 站点 可能是暂时/瞬态问题的结果。因此,首先尝试再次运行提升命令。

  1. SSH 进入次要站点的每个 Sidekiq、PostgreSQL、Gitaly 和 Rails 节点,并运行以下命令之一:

    • 将次要站点提升为主要站点:

      sudo gitlab-ctl geo promote
      
    • 将次要站点提升为主要站点无需进一步确认

      sudo gitlab-ctl geo promote --force
      
  2. 验证你是否可以使用之前用于次要站点的 URL 连接到新提升的主要站点。
  3. 如果成功,则次要站点现已提升为主要站点。

如果上述步骤不成功,请继续执行以下步骤:

  1. SSH 到次要站点的每个 Sidekiq、PostgreSQL、Gitaly 和 Rails 节点,并执行以下操作:

    • 创建一个 /etc/gitlab/gitlab-cluster.json 文件,内容如下:

      {
        "primary": true,
        "secondary": false
      }
      
    • 重新配置极狐GitLab 以使更改生效:

      sudo gitlab-ctl reconfigure
      
  2. 验证你是否可以使用之前用于次要站点的 URL 连接到新提升的主要站点。
  3. 如果成功,次要站点现已提升为主要站点。