当前位置: 首页 > article >正文

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

http://www.kler.cn/a/513878.html

相关文章:

  • UE5 开启“Python Remote Execution“
  • 机器学习(5):支持向量机
  • 汇编与逆向(一)-汇编工具简介
  • uniapp(小程序、app、微信公众号、H5)预览下载文件(pdf)
  • ChatGPT被曝存在爬虫漏洞,OpenAI未公开承认
  • CentOS 安装Redis
  • 知识图谱中的word2vec 技术是做什么的?
  • 机器学习10-解读CNN代码Pytorch版
  • Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题
  • matlab实现数据极坐标显示
  • 【深度学习】关键技术-模型训练(Model Training)
  • 【Springboot相关知识】Springboot结合SpringSecurity实现身份认证以及接口鉴权
  • vue md5加密
  • 性能调优篇 四、JVM运行时参数
  • 数据结构(四) B树/跳表
  • elementui完美做到table动态复杂合并行、合并列,适用于vue2、vue3
  • CVPR 2024 人脸方向总汇(人脸识别、头像重建、人脸合成和3D头像等)
  • 声学前端算法方案,提升设备语音交互体验,ESP32-S3智能化联网应用
  • 美区TikTok危机缓解,TikTok 直播运营专线助力稳定运营
  • iOS-支付相关
  • 学习第七十三行
  • 能用导航菜单 单弹 双弹 缩小显手机端 原生css js
  • 数据结构(三) 排序/并查集/图
  • Python公有属性与私有属性
  • NAT·综合实验——静态+动态复用+TCP负载分担
  • 国产编辑器EverEdit - 大纲视图