多数据库

引入于 15.7 版本。

caution此功能尚未准备好用于生产。

默认情况下,极狐GitLab 使用单个应用程序数据库,称为 main 数据库。

要扩展极狐GitLab,您可以将极狐GitLab 配置为使用多个应用程序数据库。

由于已知问题,使用多数据库配置极狐GitLab 功能处于 Alpha 阶段。

已知问题

  • 尚不支持将数据从 main 数据库迁移到 ci 数据库。
  • 一旦数据迁移到 ci 数据库,您就无法将其迁移回来。

设置多数据库

使用以下方法,为新的极狐GitLab 安装实例设置多个数据库。

目前不支持为现有的极狐GitLab 安装实例进行设置。

在您设置多个数据库后,极狐GitLab 为 CI/CD 功能使用第二个应用程序数据库,称为 ci 数据库。 例如,极狐GitLab 读取和写入 ci 数据库中的 ci_pipelines 表。

caution在设置多个数据库之前,您必须停止极狐GitLab,防止脑裂情况,比如 main 数据被写入 ci 数据库,反之亦然。

源安装实例

  1. 备份极狐GitLab,以防出现不可预见的问题。

  2. 停止极狐GitLab:

    sudo service gitlab stop
    
  3. 打开 config/database.yml,并在 production: 下添加一个 ci: 部分。有关新部分的可能值,请参阅 config/database.yml.decomposed-postgresql。修改后,config/database.yml 应如下所示:

    production:
      main:
        # ...
      ci:
        adapter: postgresql
        encoding: unicode
        database: gitlabhq_production_ci
        # ...
    
  4. 保存 config/database.yml 文件。

  5. 更新服务文件以将 GITLAB_ALLOW_SEPARATE_CI_DATABASE 环境变量设置为 true

  6. 创建 gitlabhq_production_ci 数据库:

    sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
    sudo -u git -H bundle exec rake db:schema:load:ci
    
  7. main 数据库中的 ci 表进行锁定写入,反之亦然:

    sudo -u git -H bundle exec rake gitlab:db:lock_writes
    
  8. 重启极狐GitLab:

    sudo service gitlab restart
    

Omnibus GitLab 安装实例

  1. 备份极狐GitLab,以防出现不可预见的问题。

  2. 停止极狐GitLab:

    sudo gitlab-ctl stop
    
  3. 编辑 /etc/gitlab/gitlab.rb 并添加以下行:

    gitlab_rails['env'] = { 'GITLAB_ALLOW_SEPARATE_CI_DATABASE' => 'true' }
    gitlab_rails['databases']['ci']['enable'] = true
    gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production_ci'
    
  4. 保存 /etc/gitlab/gitlab.rb 文件。

  5. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    
  6. 可选。重新配置极狐GitLab 应该会创建 gitlabhq_production_ci。如果没有,请手动创建 gitlabhq_production_ci

    sudo gitlab-ctl start postgresql
    sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d template1 -c "CREATE DATABASE gitlabhq_production_ci OWNER gitlab;"
    sudo gitlab-rake db:schema:load:ci
    
  7. main 数据库中的 ci 表进行锁定写入,反之亦然:

    sudo gitlab-ctl start postgresql
    sudo gitlab-rake gitlab:db:lock_writes
    
  8. 重启极狐GitLab:

    sudo gitlab-ctl restart