迁移到新服务器
Tier: 基础版,专业版,旗舰版
Offering: 私有化部署
你可以使用极狐GitLab 备份和恢复功能将实例迁移到新服务器。本节概述了在使用 Linux 安装包的单台服务器上运行的极狐GitLab 部署的典型流程。
如果你正在运行极狐GitLab Geo,另一种选择是用于计划故障转移的 Geo 灾难恢复。在选择使用 Geo 进行迁移之前,你必须确保所有站点都满足 Geo 要求。
前提条件:
- 提前发布广播消息横幅以通知用户即将进行的迁移。
- 完整且最新的备份。创建完整的系统级备份,或 对所有参与迁移的服务器进行快照,以防错误地运行 破坏性命令(如 rm)。
- 管理员权限。
准备新服务器
要准备新服务器:
-
从旧服务器复制 SSH 主机密钥 以避免中间人攻击警告。 请参阅手动复制主站点的 SSH 主机密钥了解示例步骤。
-
通过将 /etc/gitlab 文件从旧服务器复制到新服务器来进行配置,并根据需要进行更新。 请阅读 Linux 安装包备份和恢复说明以获取更多详细信息。
-
如果适用,禁用接收邮件。
-
在备份和恢复后首次启动时,阻止新的 CI/CD 作业启动。 编辑 /etc/gitlab/gitlab.rb 并设置以下内容:
rubynginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n" -
重新配置极狐GitLab:
shellsudo gitlab-ctl reconfigure -
停止极狐GitLab 以避免任何不必要和意外的数据处理:
shellsudo gitlab-ctl stop -
停止 Redis:
shellsudo gitlab-ctl stop redis -
配置新服务器以允许接收 Redis 数据库和极狐GitLab 备份文件:
shellsudo 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,并设置以下内容:
rubynginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n" -
重新配置极狐GitLab:
shellsudo gitlab-ctl reconfigure
-
-
禁用周期性后台作业:
- 在右上角,选择 管理员。
- 在左侧边栏中,选择 监控 > 后台作业 以显示 Sidekiq 仪表板。
- 在 Sidekiq 仪表板上,在其顶部菜单中,选择 Cron。
- 在 Sidekiq 仪表板上,在其右上方,选择 全部禁用。
-
等待正在运行的 CI/CD 作业完成,或者接受未完成的作业可能会丢失。 要查看所有正在运行的作业:
- 在左侧边栏中,选择 CI/CD > 作业。
- 在过滤栏中,选择 状态 > 运行中。
-
等待 Sidekiq 作业完成:
- 在左侧边栏中,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板上,在其顶部菜单中,选择 队列。
- 在 Sidekiq 仪表板上,在其右上方,选择 实时轮询。 等待 Busy 和 Enqueued 降至 0。 这些队列包含用户提交的工作; 在这些作业完成之前关闭可能会导致工作丢失。 记下 Sidekiq 仪表板中显示的数字,以便迁移后验证。
-
将 Redis 数据库刷新到磁盘,并停止极狐GitLab,但迁移所需的服务除外:
shellsudo /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 备份:
shellsudo gitlab-backup create -
备份完成后,禁用以下极狐GitLab 服务,并通过将以下内容添加到 /etc/gitlab/gitlab.rb 的底部来防止意外重启:
ruby1alertmanager['enable'] = false 2gitaly['enable'] = false 3gitlab_exporter['enable'] = false 4gitlab_pages['enable'] = false 5gitlab_workhorse['enable'] = false 6grafana['enable'] = false 7logrotate['enable'] = false 8gitlab_rails['incoming_email_enabled'] = false 9nginx['enable'] = false 10node_exporter['enable'] = false 11postgres_exporter['enable'] = false 12postgresql['enable'] = false 13prometheus['enable'] = false 14puma['enable'] = false 15redis['enable'] = false 16redis_exporter['enable'] = false 17registry['enable'] = false 18sidekiq['enable'] = false -
重新配置极狐GitLab:
shellsudo gitlab-ctl reconfigure -
验证所有内容已停止,并确认没有服务正在运行:
shellsudo gitlab-ctl status -
将 Redis 数据库和极狐GitLab 备份传输到新服务器:
shellsudo 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 目录,包含对象数据,如产物。
- /var/opt/gitlab/gitlab-rails/uploads 目录,包含上传数据,如用户头像。
- 如果你正在使用 Linux 安装包自带的 PostgreSQL, 你还需要迁移 /var/opt/gitlab/postgresql/data 下的 PostgreSQL 数据目录。
在所有极狐GitLab 服务停止后,你可以使用诸如 rsync 或挂载卷快照之类的工具将数据 移动到新环境。
在新服务器上恢复数据
-
恢复适当的文件系统权限:
shellsudo 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:
shellsudo gitlab-ctl start redisRedis 会自动拾取并恢复 dump.rdb。
-
验证 Redis 数据库是否正确恢复:
- 在右上角,选择 管理员。
- 在左侧边栏中,选择 监控 > 后台作业。
- 在 Sidekiq 仪表板下,验证数字 是否与旧服务器上显示的匹配。
- 仍在 Sidekiq 仪表板下,选择 Cron,然后选择 全部启用 以重新启用周期性后台作业。
-
测试极狐GitLab 实例上的只读操作是否按预期工作。例如,浏览项目仓库文件、合并请求和议题。
-
如果之前启用,则禁用维护模式。
-
测试极狐GitLab 实例是否按预期工作。
-
如果适用,重新启用接收邮件并测试其是否按预期工作。
-
更新你的 DNS 或负载均衡器以指向新服务器。
-
通过删除你之前添加的自定义 NGINX 配置来允许新的 CI/CD 作业 启动:
ruby# 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:
shellsudo gitlab-ctl reconfigure -
删除预定的维护广播消息横幅。