迁移到新服务器
您可以使用极狐 GitLab 备份和还原来将您的实例迁移到新服务器。本节概述了在单一服务器上运行极狐 GitLab 部署的典型流程。如果您正在运行极狐 GitLab Geo,另一种选择是Geo 灾难恢复以进行计划的故障转移。在选择 Geo 进行迁移之前,必须确保所有站点都符合 Geo 要求。
先决条件:
- 在迁移之前的某个时间,考虑通过广播消息横幅通知您的用户即将到来的计划维护。
- 确保您的备份完整且最新。创建完整的系统级备份,或者对迁移中涉及的所有服务器进行快照,以防止执行错误的破坏性命令(如
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 仪表板下,选择 定时 标签,然后选择 禁用所有。
- 等待正在运行的 CI/CD 作业完成,或者接受未完成的作业可能会丢失。在左侧边栏,选择 概览 > 作业,然后选择 运行。
- 等待 Sidekiq 作业完成:
- 在左侧边栏,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板下,选择 队列 然后选择 Live Poll。等待 Busy 和 Enqueued 下降到 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,备份可能需要很长时间。在这种情况下,您可能会发现将数据传输到新实例上的适当卷更容易。
您可能需要手动迁移的主要卷是:
- 包含所有 Git 数据的
/var/opt/gitlab/git-data
目录。请务必阅读移动仓库文档部分以消除 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 仪表板下,选择 定时 然后选择 启用所有 以重新启用周期性后台作业。
- 测试极狐 GitLab 实例上的只读操作是否按预期工作。例如,浏览项目存储库文件、合并请求和议题。
- 禁用维护模式,如果之前启用。
- 测试极狐 GitLab 实例是否按预期工作。
- 如适用,重新启用接收电子邮件并测试其是否按预期工作。
- 更新您的 DNS 或负载均衡器以指向新服务器。
-
通过删除之前添加的自定义 NGINX 配置来解除对新 CI/CD 作业的阻止:
# 必须删除以下行 nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
重新配置极狐 GitLab:
sudo gitlab-ctl reconfigure
- 移除计划维护的广播消息横幅。