排查 Geo 故障转移问题
- Tier: Premium, Ultimate
- Offering: GitLab Self-Managed
修复故障转移或提升辅助站点为主站点时的错误
以下是在故障转移期间或将辅助站点提升为主站点时可能遇到的错误消息,以及相应的解决策略。
消息: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_primary 或 gitlab-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 注册表记录。
修复登录错误
消息:The redirect URI included is not valid
如果您能够登录到主站点的 Web 界面,但在尝试登录辅助站点的 Web 界面时收到此错误消息,则应验证 Geo 站点的 URL 是否与其外部 URL 匹配。
在主站点上:
- 在左侧边栏的底部,选择管理员。
- 选择 Geo > Sites。
- 找到受影响的辅助站点,然后选择编辑。
- 确保URL字段与辅助站点 Rails 节点上的
/etc/gitlab/gitlab.rb文件中external_url "https://gitlab.example.com"的值相匹配。
在辅助站点上使用 SAML 进行身份验证时总是跳转到主站点
此问题通常在升级到 GitLab 15.1时遇到。要解决此问题,请参阅在 Geo 中配置实例范围的 SAML 以实现单点登录。
从部分故障转移中恢复
到 Geo 辅助站点的部分故障转移可能是由临时性或瞬时性问题导致的。因此,首先请尝试再次运行提升命令。
-
SSH 登录到辅助站点中的每个 Sidekiq、PostgreSQL、Gitaly 和 Rails 节点,并运行以下命令之一:
-
将辅助站点提升为主站点:
sudo gitlab-ctl geo promote -
将辅助站点提升为主站点**(无需进一步确认)**:
sudo gitlab-ctl geo promote --force
-
-
验证您能否使用先前用于辅助站点的 URL 连接到新提升的主站点。
-
如果成功,辅助站点现已提升为主站点。
如果上述步骤不成功,请执行以下步骤:
-
SSH 登录到辅助站点中的每个 Sidekiq、PostgreSQL、Gitaly 和 Rails 节点,并执行以下操作:
-
创建一个
/etc/gitlab/gitlab-cluster.json文件,内容如下:{ "primary": true, "secondary": false } -
重新配置 GitLab 以使更改生效:
sudo gitlab-ctl reconfigure
-
-
验证您能否使用先前用于辅助站点的 URL 连接到新提升的主站点。
-
如果成功,辅助站点现已提升为主站点。