温馨提示×

Linux GitLab如何搭建集群

小樊
40
2026-07-14 12:22:02
栏目: 智能运维

在 Linux 上搭建 GitLab 集群,通常指 GitLab 高可用(HA)集群,而不是像 Kubernetes 那样“无状态集群”。GitLab 官方支持 多节点高可用架构,但不支持完全自动化的水平扩展集群(如 GitLab 本身不推荐多活 Web + 多活 DB 的简单集群)。

下面我按 可落地方案 给你讲清楚 ✅


一、GitLab 集群架构选型(非常重要)

GitLab 官方推荐 两种 HA 架构

✅ 方案一:GitLab 官方 HA(推荐)

适合企业级生产环境

架构组件拆分:

组件 是否可集群 说明
GitLab Rails (Web) ✅ 多节点 无状态
Sidekiq ✅ 多节点 任务队列
Gitaly ✅ 集群 Git 仓库存储
PostgreSQL ✅ 主从 / Patroni 数据库
Redis ✅ Sentinel / Cluster 缓存
GitLab Pages / Registry ✅ 多节点 可选

❌ 方案二:GitLab 单节点(不叫集群)

  • 一个服务器装 Omnibus
  • 不支持高可用
  • 重启即中断

二、最小 GitLab HA 集群架构(推荐起步)

          ┌─────────────┐
          │   Load      │
          │  Balancer   │
          └──────┬──────┘
                 │
      ┌──────────┴──────────┐
      │                     │
┌─────▼─────┐         ┌─────▼─────┐
│ GitLab    │         │ GitLab    │
│ Web/API   │         │ Web/API   │
└─────┬─────┘         └─────┬─────┘
      │                     │
      └──────────┬──────────┘
                 │
      ┌──────────┴──────────┐
      │                     │
┌─────▼─────┐         ┌─────▼─────┐
│ PostgreSQL│         │   Redis   │
│  (主从)   │         │ Sentinel  │
└───────────┘         └───────────┘

三、Linux 环境准备

1️⃣ 服务器规划(示例)

节点 角色
node1 GitLab Web + Sidekiq
node2 GitLab Web + Sidekiq
node3 PostgreSQL 主
node4 PostgreSQL 从
node5 Redis + Sentinel
node6 Gitaly

✅ 最小建议:4 台以上


2️⃣ 系统要求

OS: Ubuntu 20.04 / 22.04 或 CentOS 7/8
内存: ≥ 8GB(Web 节点)
CPU: ≥ 4 核

四、GitLab 集群搭建步骤(核心)


1️⃣ 安装 GitLab(所有 Web 节点)

# Ubuntu
curl -fsSL https://packages.gitlab.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/gitlab.gpg

echo "deb [signed-by=/usr/share/keyrings/gitlab.gpg] https://packages.gitlab.com/gitlab/gitlab-ee/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab_gitlab-ee.list

sudo apt update
sudo apt install gitlab-ee

⚠️ 必须 EE 版本(企业版)才支持 HA


2️⃣ 拆分数据库(PostgreSQL 集群)

方式一:Patroni + etcd(最稳)

PostgreSQL 主从 + 自动故障切换

方式二:官方推荐

  • 主从复制
  • 手动 failover(简单但不够自动)

3️⃣ Redis 高可用(Sentinel)

# redis-sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2

GitLab 配置:

gitlab_rails['redis_sentinels'] = [
  {host: 'redis1', port: 26379},
  {host: 'redis2', port: 26379}
]

4️⃣ Gitaly 集群(Git 仓库高可用)

gitaly['configuration'] = {
  storage: [
    { name: 'default', path: '/var/opt/gitlab/git-data' }
  ]
}

多节点 Gitaly + Praefect:

praefect['nodes'] = [
  { storage: 'gitaly1', address: 'gitaly1:8075' },
  { storage: 'gitaly2', address: 'gitaly2:8075' }
]

5️⃣ GitLab Web 节点配置(关键)

gitlab_rails['db_host'] = 'postgres-master'
gitlab_rails['redis_host'] = 'redis-vip'
gitlab_rails['gitaly_address'] = 'tcp://gitaly:8075'

6️⃣ 负载均衡(Nginx / HAProxy)

upstream gitlab {
    server node1:80;
    server node2:80;
}

五、GitLab 官方 HA 方案总结

官方支持

  • Web 多节点
  • Gitaly 集群
  • PostgreSQL 主从
  • Redis Sentinel

不支持

  • GitLab 本身多主写入
  • 全自动 Kubernetes 式集群

六、如果你只是想“简单点”

✅ 推荐方案

需求 建议
学习 / 测试 单节点
小企业 单节点 + 定时备份
中大型企业 GitLab HA
云原生 GitLab Helm + Kubernetes

七、我可以继续帮你

你可以直接告诉我:

1️⃣ 你用的是 Ubuntu 还是 CentOS
2️⃣ 服务器数量
3️⃣ 是否必须 高可用
4️⃣ 是否考虑 K8s

我可以给你:

  • 一步一步可复制命令
  • 生产级 HA 架构图
  • GitLab + K8s Helm 方案

你现在是 学习环境 还是 生产环境

0