gitlab迁移(服务器迁移)

gitlab服务迁移

    • git迁移中出现的问题
        • 1、gitlab页面查询分支404
        • 2、Gitlab rails节点启动报错
        • 3、gitlab连不上redis,页面显示500
        • 4、 gitlab 代码库迁移遇到的问题
        • 5 ssh拉取问题
        • 6 页面修改登录登出跳转链接url
        • 7 迁移praefet过程中注意事项

先记录迁移中的问题,后续补充具体迁移步骤。
迁移内容包括,对象存储数据迁移,所有节点(gitlab-rails,gitaly,praefect,pg,pgb,redis所有节点迁移)

git迁移中出现的问题

1、gitlab页面查询分支404

清理redis缓存,

到redis节点上执行flushdb(/opt/gitlab/bin/gitlab-redis-cli -h redisip
或者rails执行

gitlab-rake cache:clear

原因是中途存在切回原redis节点,导致原redis出现数据延迟

2、Gitlab rails节点启动报错
sudo gitlab-ctl reconfigure
rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails
 database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellComm
andFailed: Command execution failed. STDOUT/STDERR suppressed for sensitive resource

Gitlab_rails[‘auto_migrate’]=false解决

3、gitlab连不上redis,页面显示500

日志只提示无法连接redis无特殊日志

增加redis相关配置

Redis[‘host’]

4、 gitlab 代码库迁移遇到的问题

前提

迁移api http://127.0.0.1:4000/14.10/ee/administration/operations/moving_repositories.html

使用API为存储碎片上的所有项目安排存储库存储移动。
curl --request POST --header "Private-Token: " \     --header "Content-Type: application/json" \     --data '{"source_storage_name":"","destination_storage_name":""}' \     "https://gitlab.example.com/api/v4/project_repository_storage_moves"
搬家已经成功完成。state字段finished。
行动正在进行中。重新查询存储库移动,直到它成功完成。
动作失败了。大多数故障都是暂时的,可以通过重新安排搬家来解决

 查询所有移动项目状态 
curl --request GET --header "PRIVATE-TOKEN: _Zo4HUxM-6p8aQxxxxxx"--header "Content-Type: application/json" 
"http://rails-ip/api/v4/project_repository_storage_moves" 

查询在default下项目 
curl --request GET --header "Private-Token: _Zo4HUxM-6p8xxxxx"--header "Content-Type: application/json"\ 
"http://rails-ip/api/v4/projects?repository_storage=default" 

curl --request GET --header "Private-Token: _JKVFwqFxxxxx]" --header "Content-Type: application/jsan"\ 
"http://rails-ip/api/v4/projects?repository_storage=praefect" 

单个项目迁移到praefect节点下 
curl --request POST --header "PRIVATE-TOKEN:_Zo4HUxM-6p8aQYWiYy5" --header "Content-Type: application/json"\ 
--data '{"destination_storage_name": "praefect"}'\ 
"http://rails-ip/api/v4/projects/32928/repository_storage_moves" 

 POST /projects/:project_id/repository_storage_moves 

 项目的迁移状态 
 curl --request GET --header "PRIVATE-TOKEN:_Zo4HUxM-6p8aQYWiYy5" --header "Content-Type: application/json" 
 "http://rails-ip/api/v4/projects/33544/repository_storage_moves" 

迁移所有项目 
curl --request POST --header "PRIVATE-TOKEN:_Zo4HUxM-6p8aQYWiYy5" --header "Content-Type: application/json"\ 
 --data '{"source_storage_name";"default","destination_storage_name":"praefect"}'\ 
"http://rails-ip/api/v4/project_repository_storage_moves" 

可从gitlabhq_production数据库project_repositories表通过id查询仓库disk_path

​ 可从praefect_production数据库repo表中通过仓库sha256sum查询存储所在

​ 可从praefect_production数据库storage_repo表查询gitaly机器存储仓库情况

​ 可从gitlabhq_production数据库中project_repository_storage_moves查看迁移任务状态

​ 可从gitlabhq_production数据库中projects查看仓库状态 read_only

1、praefect 数据库中repo和storage_repo中仓库存放数据不一致,导致页面显示仓库数据问题

临时方法:修改stroage_repo中仓库的generation和repo一致,增加stroage_repo中所有节点的数据。可能存在只有gitaly-1或者只有gitaly-2的情况

原因:新praefect启动后,虽然未连接rails,但是会自动同步数据库,新praefect中default的节点和原praefct中default的节点冲突导致

迁移状态state :2 schedule 、3 started、4 finished、5 failed。2和3状态i会将仓库设置成readyonly

2、批量执行迁移,队列中代码仓库迁移状态为2和3导致仓库只读

先将gitlabhq_production数据库中project_repository_storage_moves该迁移id下state改为5,然后修改projects表该项目read_only修改为false

可批量执行修改状态

3、repo中原virtual_storage和新virtual_storage都存在,导致再次迁移还是失败

删除praefect_production数据库中repo表中新virtual_storage记录,后执行迁移api

相同仓库的sha256,需同步将wiki.git的记录删除后迁移

另需保证repo和storage_repo的generation保持一致后迁移

5 ssh拉取问题

需开通elb到机器22端口 ,需将之前的/var/opt/gitlab/.ssh/authorized_keys复制到新节点,不然需重新生成key

6 页面修改登录登出跳转链接url

修改失败,提示存储没有default

因为仓库节点存储是从default到kylin,后面rails节点配置将data_dir中default注释掉了,需保证有default存储后可修改

且只需修改一个节点,这个配置是存数据库的

7 迁移praefet过程中注意事项

迁移praefect节点时,未修改新praefect节点配置直接启动了,rails节点虽然未连接新praefect,但是praefect仍然会连接数据库,当时没注意就导致数据库中repository表数据总是被删除,导致git页面上仓库信息显示异常。

你可能感兴趣的:(gitlab,服务器,运维)