• 极狐Gitlab备份与恢复


    极狐Gitlab备份与恢复

    1. 备份说明

    官方原文:

    根据官方文档,备份有多种方式,比如 local、s3、nfs 等。无论上述哪种备份方式,在备份数据的时候,极狐GitLab都会在默认本地备份路径先备份一份,再上传到 remote。

    命令会备份的内容:

    • Database
    • Attachments
    • Git repositories data
    • CI/CD job output logs
    • CI/CD job artifacts
    • LFS objects
    • Container Registry images
    • GitLab Pages content
    • Snippets
    • Group wikis

    命令不会备份的内容:

    • Terraform state files
    • Package registry files
    • Mattermost data
    • 配置信息(gitlab-secrets,gitlab.rb等)

    2. 备份准备

    2.1 安装rsync

    yum install rsync -y
    

    2.2 备份路径配置

    默认的备份路径在 /var/opt/gitlab/backups,可以通过 /etc/gitlab/gitlab.rb 修改成其它路径

    ## Backup settings
    gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
    

    3. 本地备份

    3.1 备份数据

    如果极狐Gitlab 版本是 <= 12.1,则

    gitlab-rake gitlab:backup:create
    

    如果极狐Gitlab 版本是 >= 12.2,则

    gitlab-backup create
    

    备份的文件

    $ ls -l /var/opt/gitlab/backups/
    total 340
    -rw------- 1 git git 348160 Feb 25 14:49 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
    

    备份选项参考:Back up and restore GitLab | GitLab

    3.2 备份配置文件

    在 Omnibus 方式安装的极狐GitLab 中所有的配置保存在 /etc/gitlab 下,其中 gitlab-secrets.json 非常重要,切勿丢失

    配置文件包括:

    • GitLab two-factor authentication (2FA) user secrets (‘QR codes’)
    • GitLab CI ‘secure variables’
    • ssl 证书文件

    要备份所有配置,请执行:

    gitlab-ctl backup-etc <DIRECTORY>
    
    • 若不指定 DIRECTORY,极狐GitLab 会自动创建 /etc/gitlab/config_backup/ 保存配置的备份文件。

    注意:请不要将配置的备份与数据的备份保存在一起,以免数据泄露。如果早期版本没有上述命令,请手工备份 /etc/gitlab 目录下文件

    tar -cvf gitlab-config.backup.20220225.tar /etc/gitlab/
    

    3.3 备份 ssh 密钥

    机器的SSH主机密钥保存在 /etc/ssh/ 中。如果需要执行整个机器的还原,必须备份,参考:备份这些密钥

    cd /etc/ssh
    $ tar zcvf ssh_key.backup.20220225.tar.gz ssh_host_*
    ssh_host_ecdsa_key
    ssh_host_ecdsa_key.pub
    ssh_host_ed25519_key
    ssh_host_ed25519_key.pub
    ssh_host_rsa_key
    ssh_host_rsa_key.pub
    

    4. 远程备份

    远程备份步骤和本地备份差不多,只是需要添加一些配置而已,比如 s3 备份:

    添加以下配置到/etc/gitlab/gitlab.rb

    gitlab_rails['backup_upload_connection'] = {
      'provider' => 'AWS',
      'aws_access_key_id' => 'YOUR-ACCESS-KEY-OR-USERNAME-HERE',
      'aws_secret_access_key' => 'YOUR-SECRET-KEY-HERE',
      'endpoint' => 'https://minio.yourdomain.com:9000',
      'path_style' => true
    }
    gitlab_rails['backup_upload_remote_directory'] = 'backup'
    
    • 为了使配置生效需要再执行以下命令: gitlab-ctl reconfigure

    具体方法就不赘述了

    5. 恢复实例

    5.1 恢复前提

    • 已经安装 完全相同的版本和类型(CE / EE)的极狐GitLab Omnibus 或者 docker 版本。
    • 已经运行过sudo gitlab-ctl reconfigure至少一次。
    • 极狐GitLab正在运行。如果不是,请使用启动它sudo gitlab-ctl start

    5.2 恢复到 docker 实例

    备份文件:

    • 数据:1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
    • 配置文件:gitlab_config_1645771925_2022_02_25.tar
    • ssh 密钥:ssh_key.backup.20220225.tar.gz

    把 3 个备份文件到目标恢复主机

    1)使用 docker 安装相同版本的 gitlab

    首先创建目录

    mkdir -p /srv/gitlab
    export GITLAB_HOME=/srv/gitlab
    

    启动命令

    docker run -d \
      --hostname gitlab.example.com \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com/';gitlab_rails['initial_root_password'] = 'yourpassword';gitlab_rails['initial_shared_runners_registration_token'] = 'yourtoken'" \
      --publish 443:443 --publish 80:80 --publish 22:22 \
      --name gitlab \
      --restart always \
      --volume $GITLAB_HOME/config:/etc/gitlab \
      --volume $GITLAB_HOME/logs:/var/log/gitlab \
      --volume $GITLAB_HOME/data:/var/opt/gitlab \
      --shm-size 256m \
      gitlab/gitlab-ee:14.7.3-ee.0
    

    2)停止所有连接到数据库的进程

    docker exec -it gitlab /bin/bash
    # 老版本使用的 unicorn,14 版本后使用 puma 运行 rails
    gitlab-ctl stop unicorn && gitlab-ctl stop puma
    
    gitlab-ctl stop sidekiq
    
    # 确认
    gitlab-ctl status
    

    3)恢复数据

    # 拷贝备份文件到 docker 备份目录
    cp 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar /srv/gitlab/data/backups
    
    docker exec -it gitlab /bin/bash
    chown git.git /var/opt/gitlab/backups/1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
    
    # 这条命令会覆盖 GitLab 数据库的内容!注意和文件名的结尾有区别,结尾没有 gitlab_backup ,只到 ee
    gitlab-backup restore BACKUP=1645771779_2022_02_25_14.7.3-ee
    
    # 如果是 GitLab 12.1 或更旧版本,执行如下命令:
    gitlab-rake gitlab:backup:restore
    
    • 会自动恢复 /var/opt/gitlab/.ssh/authorized_keys 认证文件,即用户添加的 ssh keys

    4)恢复配置文件

    tar -xvf gitlab_config_1645771925_2022_02_25.tar
    # 恢复 /etc/gitlab/gitlab.rb
    cp -r etc/gitlab/gitlab.rb /srv/gitlab/config/gitlab.rb
    
    # 恢复 /etc/gitlab/gitlab-secrets.json
    cp -r etc/gitlab/gitlab-secrets.json  /srv/gitlab/config/gitlab-secrets.json
    
    # 如果有,恢复 ssl 证书
    cp -r etc/gitlab/ssl/*  /srv/gitlab/config/ssl/
    

    5)恢复 ssh 密钥

    tar zxvf ssh_key.backup.20220225.tar.gz
    cp -r ssh_host_* /srv/gitlab/config/
    
    • 默认是 ssh 密钥是保存在 /etc/ssh 中的,但是 docker 是在 /etc/gitlab 中

    6)重启 docker 实例生效

    docker restart gitlab
    

    5.3 恢复到 Omnibus 实例

    备份文件:

    • 数据:1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
    • 配置文件:gitlab_config_1645771925_2022_02_25.tar
    • ssh 密钥:ssh_key.backup.20220225.tar.gz

    把 3 个备份文件到目标恢复主机

    1)使用 Omnibus 安装相同版本的极狐gitlab

    具体步骤参考其他文档,搭建完成后执行一次:gitlab-ctl reconfigure

    2)停止所有连接到数据库的进程

    # 老版本使用的 unicorn,14版本后使用 puma 运行 rails
    gitlab-ctl stop unicorn && gitlab-ctl stop puma
    
    gitlab-ctl stop sidekiq
    
    # 确认
    gitlab-ctl status
    

    3)恢复数据

    # 拷贝备份文件到 docker 备份目录
    cp 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar /var/opt/gitlab/backups/
    
    chown git.git /var/opt/gitlab/backups/1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
    chown -R registry:git /var/opt/gitlab/gitlab-rails/shared/registry
    
    # 这条命令会覆盖 GitLab 数据库的内容!注意和文件名的结尾有区别,结尾没有 gitlab_backup ,只到 ee
    gitlab-backup restore BACKUP=1645771779_2022_02_25_14.7.3-ee
    
    # 如果是 GitLab 12.1 或更旧版本,执行如下命令:
    gitlab-rake gitlab:backup:restore
    
    • 恢复过程中会提示是否恢复 /var/opt/gitlab/.ssh/authorized_keys 认证文件,即用户添加的 ssh keys,选择 yes

    4)恢复配置文件

    tar -xvf gitlab_config_1645771925_2022_02_25.tar
    # 恢复 /etc/gitlab/gitlab.rb
    cp -r etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb
    
    # 恢复 /etc/gitlab/gitlab-secrets.json
    cp -r etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json 
    
    # 如果有,恢复 ssl 证书
    cp -r etc/gitlab/ssl/* /etc/gitlab/ssl/
    

    5)恢复 ssh 密钥

    tar zxvf ssh_key.backup.20220225.tar.gz
    cp -r ssh_host_* /etc/ssh/
    

    6)重启生效

    systemctl restart sshd
    gitlab-ctl reconfigure
    gitlab-ctl restart
    
    # 检测组件状态,需要执行 restart 后多等一会所有内部服务都启动完成后再执行
    gitlab-rake gitlab:check SANITIZE=true
    

    如果极狐GitLab 版本在 13.1 及更高版本时,可以对数据库中的值进行解密,以便验证当前的配置文件 gitlab-secrets.json 是否正确,执行如下命令:

    $ gitlab-rake gitlab:doctor:secrets
    I, [2022-02-28T10:59:16.212678 #6153]  INFO -- : Checking encrypted values in the database
    I, [2022-02-28T10:59:26.987515 #6153]  INFO -- : - Ci::InstanceVariable failures: 0
    I, [2022-02-28T10:59:27.003740 #6153]  INFO -- : - Ci::PipelineScheduleVariable failures: 0
    I, [2022-02-28T10:59:27.022424 #6153]  INFO -- : - Ci::Variable failures: 0
    I, [2022-02-28T10:59:27.042150 #6153]  INFO -- : - Ci::GroupVariable failures: 0
    I, [2022-02-28T10:59:27.056166 #6153]  INFO -- : - Ci::JobVariable failures: 0
    I, [2022-02-28T10:59:27.069193 #6153]  INFO -- : - Ci::PipelineVariable failures: 0
    I, [2022-02-28T10:59:27.095875 #6153]  INFO -- : - ApplicationSetting failures: 0
    I, [2022-02-28T10:59:27.310622 #6153]  INFO -- : - User failures: 0
    I, [2022-02-28T10:59:27.325427 #6153]  INFO -- : - GeoNode failures: 0
    I, [2022-02-28T10:59:27.343479 #6153]  INFO -- : - Clusters::Platforms::Kubernetes failures: 0
    I, [2022-02-28T10:59:27.364214 #6153]  INFO -- : - Snippet failures: 0
    I, [2022-02-28T10:59:27.366518 #6153]  INFO -- : - PersonalSnippet failures: 0
    I, [2022-02-28T10:59:27.368022 #6153]  INFO -- : - ProjectSnippet failures: 0
    I, [2022-02-28T10:59:27.384082 #6153]  INFO -- : - Clusters::Applications::Helm failures: 0
    I, [2022-02-28T10:59:27.396294 #6153]  INFO -- : - Clusters::Applications::Prometheus failures: 0
    I, [2022-02-28T10:59:27.408780 #6153]  INFO -- : - AlertManagement::HttpIntegration failures: 0
    I, [2022-02-28T10:59:27.424009 #6153]  INFO -- : - GrafanaIntegration failures: 0
    I, [2022-02-28T10:59:27.442778 #6153]  INFO -- : - PagesDomain failures: 0
    I, [2022-02-28T10:59:27.456616 #6153]  INFO -- : - PagesDomainAcmeOrder failures: 0
    I, [2022-02-28T10:59:27.472027 #6153]  INFO -- : - JiraConnectInstallation failures: 0
    I, [2022-02-28T10:59:27.488012 #6153]  INFO -- : - ProjectImportData failures: 0
    I, [2022-02-28T10:59:27.504495 #6153]  INFO -- : - RemoteMirror failures: 0
    I, [2022-02-28T10:59:27.520466 #6153]  INFO -- : - WebHook failures: 0
    I, [2022-02-28T10:59:27.522920 #6153]  INFO -- : - ProjectHook failures: 0
    I, [2022-02-28T10:59:27.524795 #6153]  INFO -- : - ServiceHook failures: 0
    I, [2022-02-28T10:59:27.526514 #6153]  INFO -- : - SystemHook failures: 0
    I, [2022-02-28T10:59:27.528127 #6153]  INFO -- : - GroupHook failures: 0
    I, [2022-02-28T10:59:27.545203 #6153]  INFO -- : - IncidentManagement::ProjectIncidentManagementSetting failures: 0
    I, [2022-02-28T10:59:27.558290 #6153]  INFO -- : - Alerting::ProjectAlertingSetting failures: 0
    I, [2022-02-28T10:59:27.571397 #6153]  INFO -- : - Atlassian::Identity failures: 0
    I, [2022-02-28T10:59:27.584517 #6153]  INFO -- : - BulkImports::Configuration failures: 0
    I, [2022-02-28T10:59:27.602716 #6153]  INFO -- : - Clusters::KubernetesNamespace failures: 0
    I, [2022-02-28T10:59:27.620096 #6153]  INFO -- : - Integrations::IssueTrackerData failures: 0
    I, [2022-02-28T10:59:27.637791 #6153]  INFO -- : - Integrations::JiraTrackerData failures: 0
    I, [2022-02-28T10:59:27.650149 #6153]  INFO -- : - Integrations::ZentaoTrackerData failures: 0
    I, [2022-02-28T10:59:27.662388 #6153]  INFO -- : - ErrorTracking::ProjectErrorTrackingSetting failures: 0
    I, [2022-02-28T10:59:27.677523 #6153]  INFO -- : - Serverless::DomainCluster failures: 0
    I, [2022-02-28T10:59:27.679687 #6153]  INFO -- : - Clusters::Integrations::Prometheus failures: 0
    I, [2022-02-28T10:59:27.693328 #6153]  INFO -- : - StatusPage::ProjectSetting failures: 0
    I, [2022-02-28T10:59:27.707538 #6153]  INFO -- : - Dast::SiteProfileSecretVariable failures: 0
    I, [2022-02-28T10:59:27.726360 #6153]  INFO -- : - Clusters::Providers::Aws failures: 0
    I, [2022-02-28T10:59:27.743271 #6153]  INFO -- : - Clusters::Providers::Gcp failures: 0
    I, [2022-02-28T10:59:27.760446 #6153]  INFO -- : - Packages::Debian::GroupDistributionKey failures: 0
    I, [2022-02-28T10:59:27.775108 #6153]  INFO -- : - Packages::Debian::ProjectDistributionKey failures: 0
    I, [2022-02-28T10:59:27.777438 #6153]  INFO -- : - Gitlab::BackgroundMigration::BackfillJiraTrackerDeploymentType2::JiraTrackerDataTemp failures: 0
    I, [2022-02-28T10:59:27.791744 #6153]  INFO -- : - Ci::Runner failures: 0
    I, [2022-02-28T10:59:27.813291 #6153]  INFO -- : - Ci::Build failures: 0
    I, [2022-02-28T10:59:27.961570 #6153]  INFO -- : - Group failures: 0
    I, [2022-02-28T10:59:28.015377 #6153]  INFO -- : - Project failures: 0
    I, [2022-02-28T10:59:28.031628 #6153]  INFO -- : - DeployToken failures: 0
    I, [2022-02-28T10:59:28.049531 #6153]  INFO -- : - Clusters::AgentToken failures: 0
    I, [2022-02-28T10:59:28.064523 #6153]  INFO -- : - ScimOauthAccessToken failures: 0
    I, [2022-02-28T10:59:28.080880 #6153]  INFO -- : - Operations::FeatureFlagsClient failures: 0
    I, [2022-02-28T10:59:28.080980 #6153]  INFO -- : Total: 0 row(s) affected
    I, [2022-02-28T10:59:28.080999 #6153]  INFO -- : Done!
    

    5.4 当配置文件丢失时

    如果没有备份旧的配置文件,那么需要手工重置很多组件的令牌。参见当机密文件丢失时,使用其中的信息,后果自负

  • 相关阅读:
    [Leetcode] Longest Substring Without Repeating Characters
    [Leetcode] Clone Graph
    [Leetcode] LRU Cache
    行转列
    微信 Demo
    微信开发-step by stemp
    知识库
    SSAS GUID 添加 行计数,非重复计数 等 遇到的莫名其妙的问题
    javascript 前段MVVM 框架
    微信接口开发
  • 原文地址:https://www.cnblogs.com/leffss/p/16476256.html
Copyright © 2020-2023  润新知