你可以使用极狐GitLab 备份和恢复来迁移实例到一个新服务器。本节概述了极狐GitLab 部署在单一服务器上的典型程序。如果你正在运行极狐GitLab Geo,可以考虑使用Geo 灾难恢复计划故障切换。在选择 Geo 进行迁移之前,必须确保所有站点都满足 Geo 要求。
{{< alert type=”warning” >}}
避免新旧服务器之间不协调的数据处理,其中多个服务器可能同时连接并处理相同的数据。例如,当使用接收邮件时,如果两个极狐GitLab 实例同时处理邮件,则两个实例会丢失一些数据。这类问题也可能发生在其他服务中,例如非软件包数据库、非软件包 Redis 实例或非软件包 Sidekiq。
{{< /alert >}}
前提条件:
- 在迁移之前的某个时间,考虑通过广播消息横幅通知用户即将进行的计划维护。
- 确保备份是完整且最新的。创建一个完整的系统级备份,或者对迁移中涉及的所有服务器拍摄快照,以防误执行破坏性命令(如
rm
)。
准备新服务器
要准备新服务器:
- 从旧服务器复制SSH 主机密钥,以避免中间人攻击警告。查看手动复制主站点的 SSH 主机密钥以获取示例步骤。
-
安装和配置极狐GitLab,除了接收邮件:
- 安装极狐GitLab。
- 通过从旧服务器复制
/etc/gitlab
文件到新服务器,并根据需要更新进行配置。阅读Linux 软件包安装备份和恢复说明以获取更多详细信息。 - 如果适用,禁用接收邮件。
-
在备份和恢复后初始启动时,阻止新的 CI/CD 作业启动。编辑
/etc/gitlab/gitlab.rb
并设置以下内容:nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
停止极狐GitLab 以避免任何潜在的无用和无意的数据处理:
sudo gitlab-ctl stop
-
配置新服务器以允许接收 Redis 数据库和极狐GitLab 备份文件:
sudo rm -f /var/opt/gitlab/redis/dump.rdb sudo chown <your-linux-username> /var/opt/gitlab/redis /var/opt/gitlab/backups
准备并传输旧服务器的内容
- 确保你有旧服务器的最新系统级备份或快照。
- 启用维护模式,如果你的极狐GitLab 版本支持。
- 阻止新的 CI/CD 作业启动:
-
编辑
/etc/gitlab/gitlab.rb
,并设置以下内容:nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
- 禁用定期后台作业:
- 在左侧边栏底部,选择 管理员。
- 在左侧边栏,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板下,选择 Cron 标签,然后选择 禁用所有。
- 等待正在运行的 CI/CD 作业完成,或接受未完成的作业可能会丢失。在左侧边栏,选择 概览 > 作业,然后选择 正在运行。
- 等待 Sidekiq 作业完成:
- 在左侧边栏,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板下,选择 队列 然后选择 实时轮询。等待 忙碌 和 排队 降至 0。这些队列包含用户提交的工作;在作业完成之前关闭可能会导致工作丢失。记录迁移后验证时在 Sidekiq 仪表板中显示的数字。
-
将 Redis 数据库刷新到磁盘,并停止除迁移所需服务外的其他极狐GitLab 服务:
sudo /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket save && sudo gitlab-ctl stop && sudo gitlab-ctl start postgresql && sudo gitlab-ctl start gitaly
-
创建极狐GitLab 备份:
sudo gitlab-backup create
-
禁用以下极狐GitLab 服务,并通过在
/etc/gitlab/gitlab.rb
底部添加以下内容来防止无意的重启:alertmanager['enable'] = false gitlab_exporter['enable'] = false gitlab_pages['enable'] = false gitlab_workhorse['enable'] = false grafana['enable'] = false logrotate['enable'] = false gitlab_rails['incoming_email_enabled'] = false nginx['enable'] = false node_exporter['enable'] = false postgres_exporter['enable'] = false postgresql['enable'] = false prometheus['enable'] = false puma['enable'] = false redis['enable'] = false redis_exporter['enable'] = false registry['enable'] = false sidekiq['enable'] = false
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
验证所有内容已停止,并确认没有服务在运行:
sudo gitlab-ctl status
-
在新服务器上停止 Redis 以便传输 Redis 数据库备份:
sudo gitlab-ctl stop redis
-
将 Redis 数据库和极狐GitLab 备份传输到新服务器:
sudo scp /var/opt/gitlab/redis/dump.rdb <your-linux-username>@new-server:/var/opt/gitlab/redis sudo scp /var/opt/gitlab/backups/your-backup.tar <your-linux-username>@new-server:/var/opt/gitlab/backups
对于具有大量 Git 和对象数据的实例
如果你的极狐GitLab 实例在本地卷上有大量数据,例如超过 1 TB,备份可能需要很长时间。在这种情况下,你可能会发现将数据传输到新实例的相应卷上更容易。
你可能需要手动迁移的主要卷是:
-
/var/opt/gitlab/git-data
目录,其中包含所有 Git 数据。请务必阅读移动存储库文档部分,以消除 Git 数据损坏的可能性。 -
/var/opt/gitlab/gitlab-rails/shared
目录,其中包含对象数据,如产物。 - 如果你使用的是包含在 Linux 软件包中的捆绑 PostgreSQL,你还需要迁移
/var/opt/gitlab/postgresql/data
下的 PostgreSQL 数据目录。
在停止所有极狐GitLab 服务后,你可以使用 rsync
或挂载卷快照等工具将数据移动到新环境。
在新服务器上恢复数据
-
恢复适当的文件系统权限:
sudo chown gitlab-redis /var/opt/gitlab/redis sudo chown gitlab-redis:gitlab-redis /var/opt/gitlab/redis/dump.rdb sudo chown git:root /var/opt/gitlab/backups sudo chown git:git /var/opt/gitlab/backups/your-backup.tar
-
启动 Redis:
sudo gitlab-ctl start redis
Redis 会自动拾取并恢复
dump.rdb
。 - 恢复极狐GitLab 备份。
- 验证 Redis 数据库是否正确恢复:
- 在左侧边栏底部,选择 管理员。
- 在左侧边栏,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板下,验证数字是否与旧服务器上显示的数字匹配。
- 仍在 Sidekiq 仪表板下,选择 Cron 然后选择 启用所有 以重新启用定期后台作业。
- 测试极狐GitLab 实例上的只读操作是否按预期工作。例如,浏览项目存储库文件、合并请求和议题。
- 如果之前启用了维护模式,请禁用它。
- 测试极狐GitLab 实例是否按预期工作。
- 如果适用,重新启用接收邮件并测试其是否按预期工作。
- 更新 DNS 或负载均衡器以指向新服务器。
-
通过移除之前添加的自定义 NGINX 配置解除对新 CI/CD 作业启动的阻止:
# The following line must be removed nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
- 移除计划维护广播消息横幅。