GitLab在CentOS上的数据库选择建议
小樊
31
2025-12-07 14:01:06
首选数据库与版本建议
- 在 CentOS 上部署 GitLab,应使用 PostgreSQL,这是官方唯一支持的数据库;Omnibus GitLab 软件包已内置 PostgreSQL,也可对接外部 PostgreSQL。自 GitLab 12.1 起不再支持 MySQL/MariaDB。如计划使用 GitLab Geo 或 Gitaly 集群,更推荐由 Omnibus 管理的数据库实例,第三方托管(例如部分云 RDS)存在兼容性风险且不被保证。数据库服务器建议至少预留 5–10 GB 存储,并加载所需扩展(由 GitLab 在迁移/启动阶段按需创建与使用)。
部署与架构建议
- 单机一体化:使用 Omnibus 内置 PostgreSQL,部署与维护最简单,适合大多数中小规模场景。
- 外部数据库:将 PostgreSQL 部署在独立主机或云数据库上,便于高可用与资源隔离;务必遵循官方支持的扩展与权限要求,避免 schema 被手工修改。
- 高可用与容灾:对关键业务启用主从复制、流复制或云厂商高可用形态;使用 GitLab Geo 时优先 Omnibus 管理库以获得更稳定的兼容性与支持。
- 资源与调优:数据库节点建议使用 SSD、充足内存与合理连接池;为操作系统保留适量 swap(≥2 GB) 以降低 OOM 风险,同时避免频繁 swap 影响性能。
PostgreSQL 配置要点
- 字符集与事务隔离:为 GitLab 数据库用户设置客户端编码为 UTF8,默认事务隔离级别为 read committed,时区为 UTC,示例:
- CREATE DATABASE gitlabhq_production;
- CREATE USER gitlab WITH PASSWORD ‘your_password’;
- ALTER ROLE gitlab SET client_encoding TO ‘UTF8’;
- ALTER ROLE gitlab SET default_transaction_isolation TO ‘read committed’;
- ALTER ROLE gitlab SET timezone TO ‘UTC’;
- GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production TO gitlab;
- 连接与权限:仅授予应用所需最小权限;避免使用超级用户直连;限制来源网段并采用强口令与证书校验(如启用 SSL)。
- 维护与升级:遵循 GitLab 升级流程,避免手工变更 schema/触发器;升级前做好全量备份与回滚预案。
常见误区与说明
- 不要选择 MySQL/MariaDB:自 12.1 起已不再支持,生产环境使用会导致功能缺失与升级受阻。
- 不要将数据库用于多套 GitLab 或非 GitLab 负载混用:主应用会创建并使用 public、gitlab_partitions_static、gitlab_partitions_dynamic 等 schema,需保持专库专用与权限最小化。
- 谨慎跨系统/容器迁移 PostgreSQL 数据目录:不同 glibc 语言环境可能导致索引损坏,迁移前务必校验语言环境一致性与备份。