- 收集极狐GitLab 和系统信息
- 显示极狐GitLab许可证信息
- 检查极狐GitLab配置
- 重建
authorized_keys
文件 - 清除 Redis 缓存
- 预编译资产
- 检查到远程站点的 TCP 连接
- 清除独占租约 (危险)
- 显示数据库迁移状态
- 运行未完成的数据库迁移
- 重建数据库索引
- 转储数据库架构
- 检查数据库架构不一致性
- 收集有关数据库的信息和统计数据
- 检查数据库以去重 CI/CD 标签
- 故障排除
{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
极狐GitLab 提供了用于常规维护的 Rake 任务。
收集极狐GitLab 和系统信息
此命令收集有关您的极狐GitLab安装及其运行系统的信息。这些信息在寻求帮助或报告议题时可能会很有用。在多节点环境中,运行此命令的节点需运行极狐GitLab Rails,以避免 PostgreSQL 套接字错误。
-
Linux 软件包安装:
sudo gitlab-rake gitlab:env:info
-
自编译安装:
bundle exec rake gitlab:env:info RAILS_ENV=production
示例输出:
System information
System: Ubuntu 20.04
Proxy: no
Current User: git
Using RVM: no
Ruby Version: 2.7.6p219
Gem Version: 3.1.6
Bundler Version:2.3.15
Rake Version: 13.0.6
Redis Version: 6.2.7
Sidekiq Version:6.4.2
Go Version: unknown
GitLab information
Version: 15.5.5-ee
Revision: 5f5109f142d
Directory: /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 13.8
URL: https://app.gitaly.gcp.gitlabsandbox.net
HTTP Clone URL: https://app.gitaly.gcp.gitlabsandbox.net/some-group/some-project.git
SSH Clone URL: git@app.gitaly.gcp.gitlabsandbox.net:some-group/some-project.git
Elasticsearch: no
Geo: no
Using LDAP: no
Using Omniauth: yes
Omniauth Providers:
GitLab Shell
Version: 14.12.0
Repository storage paths:
- default: /var/opt/gitlab/git-data/repositories
- gitaly: /var/opt/gitlab/git-data/repositories
GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell
Gitaly
- default Address: unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version: 15.5.5
- default Git Version: 2.37.1.gl1
- gitaly Address: tcp://10.128.20.6:2305
- gitaly Version: 15.5.5
- gitaly Git Version: 2.37.1.gl1
显示极狐GitLab许可证信息
{{< details >}}
- Tier: 专业版,旗舰版
- Offering: 极狐GitLab私有化部署
{{< /details >}}
此命令显示有关您的极狐GitLab许可证的信息以及使用的席位数量。它仅在极狐GitLab企业版安装中可用:许可证不能安装在极狐GitLab基础版中。这些信息在与支持部门交流时或程序化检查您的许可证参数时可能会很有用。
-
Linux 软件包安装:
sudo gitlab-rake gitlab:license:info
-
自编译安装:
bundle exec rake gitlab:license:info RAILS_ENV=production
示例输出:
Today's Date: 2020-02-29
Current User Count: 30
Max Historical Count: 30
Max Users in License: 40
License valid from: 2019-11-29 to 2020-11-28
Email associated with license: user@example.com
检查极狐GitLab配置
gitlab:check
Rake 任务运行以下 Rake 任务:
gitlab:gitlab_shell:check
gitlab:gitaly:check
gitlab:sidekiq:check
gitlab:incoming_email:check
gitlab:ldap:check
gitlab:app:check
-
gitlab:geo:check
(仅当您运行Geo时)
它检查每个组件是否按照安装指南进行设置,并建议修复发现的问题。此命令必须在您的应用服务器上运行,并且在组件服务器上(例如 Gitaly)无法正确工作。
您也可以查看我们的故障排除指南:
此外,您还应该验证数据库值是否可以使用当前密钥解密。
要运行 gitlab:check
,请执行以下命令:
-
Linux 软件包安装:
sudo gitlab-rake gitlab:check
-
自编译安装:
bundle exec rake gitlab:check RAILS_ENV=production
如果您希望从输出中省略项目名称,请为 gitlab:check
使用 SANITIZE=true
。
示例输出:
Checking Environment ...
Git configured for git user? ... yes
Has python2? ... yes
python2 is supported version? ... yes
Checking Environment ... Finished
Checking GitLab Shell ...
GitLab Shell version? ... OK (1.2.0)
Repo base directory exists? ... yes
Repo base directory is a symlink? ... no
Repo base owned by git:git? ... yes
Repo base access is drwxrws---? ... yes
post-receive hook up-to-date? ... yes
post-receive hooks in repos are links: ... yes
Checking GitLab Shell ... Finished
Checking Sidekiq ...
Running? ... yes
Checking Sidekiq ... Finished
Checking GitLab App...
Database config exists? ... yes
Database is SQLite ... no
All migrations up? ... yes
GitLab config exists? ... yes
GitLab config up to date? ... no
Cable config exists? ... yes
Resque config exists? ... yes
Log directory writable? ... yes
Tmp directory writable? ... yes
Init script exists? ... yes
Init script up-to-date? ... yes
Redis version >= 2.0.0? ... yes
Checking GitLab ... Finished
重建 authorized_keys
文件
在某些情况下,有必要重建 authorized_keys
文件,例如,如果在升级后您在通过 SSH 推送时收到 Permission denied (publickey)
错误,并在 gitlab-shell.log 文件 中发现 404 Key Not Found
错误。要重建 authorized_keys
,请运行:
-
Linux 软件包安装:
sudo gitlab-rake gitlab:shell:setup
-
自编译安装:
cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:shell:setup RAILS_ENV=production
示例输出:
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes
清除 Redis 缓存
如果由于某种原因仪表盘显示了错误信息,您可能需要清除 Redis 的缓存。要执行此操作,请运行:
-
Linux 软件包安装:
sudo gitlab-rake cache:clear
-
自编译安装:
cd /home/git/gitlab sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production
预编译资产
有时在版本升级期间,您可能会遇到一些错误的 CSS 或缺少一些图标。在这种情况下,请尝试再次预编译资产。
此 Rake 任务仅适用于自编译安装。有关在运行 Linux 软件包时解决此问题的更多信息,请阅读更多内容。Linux 软件包的指南可能适用于极狐GitLab 的 Kubernetes 和 Docker 部署,尽管通常情况下,基于容器的安装没有缺少资产的问题。
-
自编译安装:
cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production
对于 Linux 软件包安装,未优化的资产(JavaScript、CSS)在极狐GitLab 上游版本发布时被冻结。Linux 软件包安装包含那些资产的优化版本。除非您在安装软件包后在生产机器上修改 JavaScript / CSS 代码,否则没有理由在生产机器上重新执行 rake gitlab:assets:compile
。如果您怀疑资产已损坏,您应该重新安装 Linux 软件包。
检查到远程站点的 TCP 连接
有时您需要知道您的极狐GitLab安装是否可以连接到另一台计算机上的 TCP 服务(例如 PostgreSQL 或 Web 服务器),以解决代理问题。包括了一个 Rake 任务来帮助您进行此操作。
-
Linux 软件包安装:
sudo gitlab-rake gitlab:tcp_check[example.com,80]
-
自编译安装:
cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:tcp_check[example.com,80] RAILS_ENV=production
清除独占租约 (危险)
极狐GitLab 使用共享锁机制:ExclusiveLease
来防止在共享资源中同时进行操作。一个示例是对存储库运行定期垃圾收集。
在非常特定的情况下,由独占租约锁定的操作可能会失败而不释放锁。如果您无法等待它过期,您可以运行此任务以手动清除它。
要清除所有独占租约:
{{< alert type=”warning” >}}
在极狐GitLab 或 Sidekiq 运行时不要运行它
{{< /alert >}}
sudo gitlab-rake gitlab:exclusive_lease:clear
要指定租约 类型
或租约 类型 + id
,请指定范围:
# 清除存储库垃圾收集的所有租约:
sudo gitlab-rake gitlab:exclusive_lease:clear[project_housekeeping:*]
# 清除特定项目中的存储库垃圾收集租约:(id=4)
sudo gitlab-rake gitlab:exclusive_lease:clear[project_housekeeping:4]
显示数据库迁移状态
请参阅后台迁移文档,了解在升级极狐GitLab时如何检查迁移是否完成。
要检查特定迁移的状态,可以使用以下 Rake 任务:
sudo gitlab-rake db:migrate:status
要检查 Geo 辅助站点上的跟踪数据库,可以使用以下 Rake 任务:
sudo gitlab-rake db:migrate:status:geo
这会输出一个表格,其中每个迁移的 Status
为 up
或 down
。示例:
database: gitlabhq_production
Status Migration ID Type Milestone Name
--------------------------------------------------
up 20240701074848 regular 17.2 AddGroupIdToPackagesDebianGroupComponents
up 20240701153843 regular 17.2 AddWorkItemsDatesSourcesSyncToIssuesTrigger
up 20240702072515 regular 17.2 AddGroupIdToPackagesDebianGroupArchitectures
up 20240702133021 regular 17.2 AddWorkspaceTerminationTimeoutsToRemoteDevelopmentAgentConfigs
up 20240604064938 post 17.2 FinalizeBackfillPartitionIdCiPipelineMessage
up 20240604111157 post 17.2 AddApprovalPolicyRulesFkOnApprovalGroupRules
从极狐GitLab 17.1 开始,迁移以符合极狐GitLab 发布节奏的顺序执行。
运行未完成的数据库迁移
数据库迁移可能会卡在未完成状态,在 sudo gitlab-rake db:migrate:status
命令输出中呈现 down
状态。
-
要完成这些迁移,请使用以下 Rake 任务:
sudo gitlab-rake db:migrate
-
命令完成后,运行
sudo gitlab-rake db:migrate:status
以检查所有迁移是否已完成(状态为up
)。 -
热重载
puma
和sidekiq
服务:sudo gitlab-ctl hup puma sudo gitlab-ctl restart sidekiq
从极狐GitLab 17.1 开始,迁移以符合极狐GitLab 发布节奏的顺序执行。
重建数据库索引
{{< details >}}
- 状态:实验
{{< /details >}}
{{< alert type=”warning” >}}
此功能是实验性的,默认情况下未启用。在生产环境中运行时请谨慎,并在非高峰时段运行。
{{< /alert >}}
数据库索引可以定期重建,以回收空间并随着时间的推移保持健康的索引膨胀水平。重新索引还可以作为常规 cron 作业运行。“健康”水平的膨胀高度依赖于特定索引,但通常应低于 30%。
先决条件:
- 此功能需要 PostgreSQL 12 或更高版本。
- 不支持这些索引类型:表达式索引、分区索引和用于约束排除的索引。
要手动重建数据库索引:
-
可选。要向 Grafana(4.6 或更高版本)端点发送注释,请使用这些自定义环境变量启用注释(参见设置自定义环境变量):
-
GRAFANA_API_URL
:Grafana 的基本 URL,例如http://some-host:3000
。 -
GRAFANA_API_KEY
:至少具有Editor role
的 Grafana API 密钥。
-
-
运行 Rake 任务以重建估计膨胀最高的两个索引:
sudo gitlab-rake gitlab:db:reindex
-
重新索引任务(
gitlab:db:reindex
)仅重建每个数据库中膨胀最高的两个索引。要重建两个以上的索引,请再次运行任务,直到所有需要的索引都已重建。
注意事项
- 重建数据库索引是一项磁盘密集型任务,因此您应该在非高峰时段执行该任务。在高峰时段运行任务可能会导致膨胀增加,并且还可能导致某些查询执行缓慢。
- 任务需要用于恢复索引的可用磁盘空间。创建的索引附加了
_ccnew
。如果重新索引任务失败,重新运行任务会清理临时索引。 - 完成数据库索引重建所需的时间取决于目标数据库的大小。可能需要几个小时到几天。
转储数据库架构
在极少数情况下,即使所有数据库迁移都已完成,数据库架构也可能与应用程序代码预期的不同。如果发生这种情况,可能会导致极狐GitLab 中出现奇怪的错误。
要转储数据库架构:
SCHEMA=/tmp/structure.sql gitlab-rake db:schema:dump
Rake 任务会创建一个包含数据库架构转储的 /tmp/structure.sql
文件。
要确定是否有任何差异:
- 转到
db/structure.sql
文件中的gitlab
项目。选择与您的极狐GitLab版本匹配的分支。例如,极狐GitLab 16.2 的文件:https://jihulab.com/gitlab-cn/gitlab/-/blob/16-2-stable-ee/db/structure.sql。 - 将
/tmp/structure.sql
与您版本的db/structure.sql
文件进行比较。
检查数据库架构不一致性
{{< history >}}
- 在极狐GitLab 15.11 中引入。
{{< /history >}}
此 Rake 任务检查数据库架构是否存在任何不一致性并在终端中打印它们。此任务是一个诊断工具,应在极狐GitLab 支持的指导下使用。您不应该将任务用于常规检查,因为数据库不一致性可能是预期的。
gitlab-rake gitlab:db:schema_checker:run
收集有关数据库的信息和统计数据
{{< history >}}
- 在极狐GitLab 17.11 中引入。
{{< /history >}}
gitlab:db:sos
命令收集有关您的极狐GitLab数据库的配置、性能和诊断数据,以帮助您解决问题。运行此命令的位置取决于您的配置:
- Scaled 极狐GitLab:在您的 Puma 或 Sidekiq 服务器上。
- 云原生安装:在工具箱 pod 上。
- 所有其他配置:在您的极狐GitLab服务器上。
根据需要修改命令:
-
默认路径 - 要使用默认文件夹路径(
tmp/sos.zip
)运行命令,请运行gitlab-rake gitlab:db:sos
。 -
自定义路径 - 要更改文件夹路径,请运行
gitlab-rake gitlab:db:sos["custom/path/to/folder"]
。 -
Zsh 用户 - 如果您没有修改 Zsh 配置,您必须在整个命令周围添加引号,如下所示:
gitlab-rake "gitlab:db:sos[custom/path/to/folder]"
Rake 任务运行五分钟。它在您指定的路径中创建一个压缩文件夹。压缩文件夹包含大量文件。
启用可选查询统计数据
gitlab:db:sos
Rake 任务还可以使用 pg_stat_statements
扩展收集数据以排除慢查询故障。
启用此扩展是可选的,并且需要重新启动 PostgreSQL 和极狐GitLab。此数据可能需要排查极狐GitLab 由慢数据库查询引起的性能问题。
先决条件:
- 您必须是具有超级用户权限的 PostgreSQL 用户才能启用或禁用扩展。
{{< tabs >}}
{{< tab title=”Linux 软件包 (Omnibus)” >}}
-
修改
/etc/gitlab/gitlab.rb
以添加以下行:postgresql['shared_preload_libraries'] = 'pg_stat_statements'
-
运行重新配置:
sudo gitlab-ctl reconfigure
-
PostgreSQL 需要重新启动以加载此扩展,这需要极狐GitLab 也重新启动:
sudo gitlab-ctl restart postgresql sudo gitlab-ctl restart sidekiq sudo gitlab-ctl restart puma
{{< /tab >}}
{{< tab title=”Docker” >}}
-
修改
/etc/gitlab/gitlab.rb
以添加以下行:postgresql['shared_preload_libraries'] = 'pg_stat_statements'
-
运行重新配置:
docker exec -it <container-id> gitlab-ctl reconfigure
-
PostgreSQL 需要重新启动以加载此扩展,这需要极狐GitLab 也重新启动:
docker exec -it <container-id> gitlab-ctl restart postgresql docker exec -it <container-id> gitlab-ctl restart sidekiq docker exec -it <container-id> gitlab-ctl restart puma
{{< /tab >}}
{{< tab title=”外部 PostgreSQL 服务” >}}
-
在您的
postgresql.conf
文件中添加或取消注释以下参数shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all
-
重启 PostgreSQL 以使更改生效。
-
重启极狐GitLab:网络(Puma)和 Sidekiq 服务应重启。
{{< /tab >}}
{{< /tabs >}}
-
在数据库控制台运行:
CREATE EXTENSION pg_stat_statements;
-
检查扩展是否正常工作:
SELECT extname FROM pg_extension WHERE extname = 'pg_stat_statements'; SELECT * FROM pg_stat_statements LIMIT 10;
检查数据库以去重 CI/CD 标签
{{< history >}}
- 在极狐GitLab 17.10 中引入。
{{< /history >}}
此 Rake 任务检查 tags
表中的 ci
数据库是否有重复标签。此问题可能会影响经历了长时间多次重大升级的实例。运行以下命令以搜索重复标签,然后重写任何引用重复标签的标签分配,以使用原始标签。
sudo gitlab-rake gitlab:db:deduplicate_tags
要在干运行模式下运行此命令,请设置环境变量 DRY_RUN=true
。
故障排除
顾问锁连接信息
运行 db:migrate
Rake 任务后,您可能会看到类似以下内容的输出:
main: == [advisory_lock_connection] object_id: 173580, pg_backend_pid: 5532
main: == [advisory_lock_connection] object_id: 173580, pg_backend_pid: 5532
返回的消息是信息性的,可以忽略。
执行 gitlab:env:info
Rake 任务时的 PostgreSQL 套接字错误
在 Gitaly 或其他非 Rails 节点上运行 sudo gitlab-rake gitlab:env:info
后,您可能会看到以下错误:
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
这是因为在多节点环境中,gitlab:env:info
Rake 任务应仅在运行 极狐GitLab Rails 的节点上执行。