自学内容网 自学内容网

gitlab使用多数据库

1. 说明

默认情况下,GitLab 使用一个单一的应用数据库,称为主数据库。为了扩展 GitLab,您可以将 GitLab 配置为使用多个应用数据库。

设置多个数据库后,GitLab 将使用第二个应用数据库用于 CI/CD 功能,称为 CI 数据库。我们并不排除将这两个数据库托管在单个 PostgreSQL 实例上。

主数据库和 CI 数据库中的所有表结构完全相同。
• 当配置了多个数据库时,ci_pipelines 表会同时存在于主数据库和 CI 数据库中,但 GitLab 只会在 CI 数据库的 ci_pipelines 表中进行读写。
• 同样,projects 表存在于主数据库和 CI 数据库中,但 GitLab 只会在主数据库的 projects 表中进行读写。
• 对于某些表(如 loose_foreign_keys_deleted_records),GitLab 会在主数据库和 CI 数据库中同时进行读写。请参见开发文档。

2. 配置

主要修改gitlab 的主配置文件(/etc/gitlab/gitlab.rb)

2.1 gitlab开放端口(gitlab 自带的数据库组件)

开放数据库的端口分两部操作

2.1.1 postgresql 的配置

数据库机器的 IP 为10.100.10.53

postgresql['listen_address'] = "0.0.0.0"
postgresql['port'] = 5432
postgresql['sql_user'] = "gitlab"
postgresql['sql_user_password'] = '0873d907a1dbffa91bae86d744306549' #通过该命令生成 gitlab-ctl pg-password-md5 gitlab
postgresql['md5_auth_cidr_addresses'] = %w(0.0.0.0/0)
postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/32)
#postgresql['ssl'] = 'off'
gitlab_rails['auto_migrate'] = false #如果是首次reconfigure可以不要,如果已经首次初始化了,必须要有此配置
gitlab-ctl reconfigure
gitlab-ctl restart postgresql
2.1.2 Rails 的配置
gitlab_rails['db_host'] = '10.100.10.53'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "gitlab123"
gitlab-ctl reconfigure

2.2 gitlab使用外部的数据库

2.2.1 外部的数据库需要的信息
# 创建用户
create user gitlab login password 'gitlab123';
# 创建数据库
create database gitlabhq_production owner=gitlab ENCODING = 'UTF8';
# 安装扩展
## 可以通过 "\dx" 或者 "select extname,extowner,extnamespace,extrelocatable,extversion from pg_extension;" 来查看gitlab自带数据库的扩展
CREATE EXTENSION pg_trgm;
CREATE EXTENSION btree_gist;
2.2.2 gitlab主配置文件添加配置
postgresql['enable'] = false
gitlab_rails['db_adapter'] = 'postgresql' #固定配置
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_database'] = 'gitlabhq_production'
#gitlab_rails['db_pool'] = 10
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'gitlab123'
gitlab_rails['db_host'] = '192.168.1.112'
gitlab_rails['db_port'] = 15432
gitlab-ctl reconfigure

3. gitlab配置使用多数据库(有ci相关数据的基础上)

主要修改gitlab 的主配置文件(/etc/gitlab/gitlab.rb)

3.1 场景1: main 和 ci 都使用自带的数据库pg

# 开放自带的pg端口
postgresql['listen_address'] = "0.0.0.0"
postgresql['port'] = 5432
postgresql['sql_user'] = "gitlab"
postgresql['sql_user_password'] = '0873d907a1dbffa91bae86d744306549'
postgresql['md5_auth_cidr_addresses'] = %w(0.0.0.0/0)
postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/32)
#postgresql['ssl'] = 'off'
gitlab_rails['auto_migrate'] = false
gitlab-ctl reconfigure
gitlab-ctl restart postgresql

rails 配置

gitlab_rails['db_host'] = '10.100.10.53'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "gitlab123"
gitlab-ctl reconfigure

配置CI库

gitlab_rails['env'] = { 'GITLAB_ALLOW_SEPARATE_CI_DATABASE' => 'true' }
gitlab_rails['databases']['ci']['enable'] = true
gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production_ci'
gitlab_rails['databases']['ci']['db_host']  = '10.100.10.53'
gitlab_rails['databases']['ci']['db_port'] = 5432
gitlab_rails['databases']['ci']['db_username'] = 'gitlab'
gitlab_rails['databases']['ci']['db_password'] = 'gitlab123'
gitlab_rails['databases']['ci']['db_adapter'] = 'postgresql'
gitlab_rails['databases']['ci']['db_encoding'] = 'UTF8'
gitlab-ctl reconfigure

<可选> 迁移表

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

main 数据库中的 ci 表进行锁定写入,反之亦然

sudo gitlab-ctl start postgresql
sudo gitlab-rake gitlab:db:lock_writes
sudo gitlab-ctl restart

说明:
如果现有的 gitlabhq_production 已经有了ci的相关数据,那么就通过 停止puma/rails 服务,然后备份 gitlabhq_production 库,在将备份的sql写入到 gitlabhq_production_ci 库,确保 多数据库配置好之后,ci相关数据走 gitlabhq_production_ci 库后有数据库,下面有操作。

3.2 场景2: main 和 ci 都使用外部的数据库pg

配置main库

# 不启用gitlab自带的数据库
postgresql['enable'] = false
# main database
gitlab_rails['db_database'] = 'gitlabhq_production'
gitlab_rails['db_host'] = '192.168.1.112'
gitlab_rails['db_port'] = 15432
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'gitlab123'
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['auto_migrate']= true
gitlab-ctl reconfigure

配置CI库

# ci database
gitlab_rails['env'] = { 'GITLAB_ALLOW_SEPARATE_CI_DATABASE' => 'true' }
gitlab_rails['databases']['ci']['enable'] = true
gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production_ci'
gitlab_rails['databases']['ci']['db_host']  = '192.168.1.112'
gitlab_rails['databases']['ci']['db_port'] = 15432
gitlab_rails['databases']['ci']['db_username'] = 'gitlab'
gitlab_rails['databases']['ci']['db_password'] = 'gitlab123'
gitlab_rails['databases']['ci']['db_adapter'] = 'postgresql'
gitlab_rails['databases']['ci']['db_encoding'] = 'utf8'

说明:
外部的数据库配置好上面的操作后,执行 gitlab-ctl reconfigure 会报错,但是 /var/opt/gitlab/gitlab-rails/etc/database.yml 实际已经渲染了配置,因为为了能实现 gitlab-ctl reconfigure ,可以通过备份恢复的方式将 gitlabhq_production 导入到 gitlabhq_production_ci 中 ,同时这样的好处就是 对于gitlabhq_production已经有了ci 相关的数据,导致有了ci库之后,走gitlabhq_production_ci 避免看不到之前ci相关的数据

# 备份 gitlabhq_production
/opt/gitlab/embedded/bin/pg_dump -h 10.100.10.53 -p 5432 -U gitlab -d gitlabhq_production -f database.sql

# 恢复到 gitlabhq_production_ci
/opt/gitlab/embedded/bin/psql -h 10.100.10.53 -p 5432 -U gitlab -d gitlabhq_production_ci -f database.sql
gitlab-ctl reconfigure 
# 重启服务
gitlab-ctl restart

4. 测试效果

在这里插入图片描述

5. gitlab配置使用多数据库(无ci相关数据的基础上)

同上述的配置方式,只是在reconfigure前添加环境变量,如

5.1 停止服务

gitlab-ctl stop

5.2 添加配置如下(/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'
gitlab-ctl reconfigure

5.3 ci库初始化

重新配置极狐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;"
export DISABLE_DATABASE_ENVIRONMENT_CHECK=1 && gitlab-rake db:schema:load:ci

5.4 对 main 数据库中的 ci 表进行锁定写入,反之亦然

gitlab-ctl start postgresql
gitlab-rake gitlab:db:lock_writes

5.5 重启GitLab

gitlab-ctl restart

原文地址:https://blog.csdn.net/weixin_44729138/article/details/145258284

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!