下面我按**“从零到可用”**的思路,给你讲 Linux 下 GitLab 集群(高可用)配置。
GitLab 官方从 14+ 起已主推 GitLab HA(Omnibus + 外部组件) 或 GitLab Helm(K8s) 两种路线。
| 场景 | 推荐方案 |
|---|---|
| 多台 Linux 物理机/虚拟机 | GitLab Omnibus HA(外部 PG / Redis) |
| Kubernetes 环境 | GitLab Helm Chart |
| 只是负载均衡 | 前端 Nginx + 多 Web |
⚠️ GitLab 不支持简单的“多主同时写”,核心是:
单写 + 高可用组件 + 负载均衡
Nginx / HAProxy
|
+-------------+-------------+
| |
GitLab Web1 GitLab Web2
| |
+------ 共享组件 -----------+
PostgreSQL
Redis
Gitaly
# 系统
CentOS 7/8 或 Ubuntu 20.04/22.04
# 关闭防火墙或放行端口
80, 443, 22, 5432, 6379, 8075
# Ubuntu
curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ee
# gitlab.rb
postgresql['enable'] = false
gitlab_rails['db_host'] = "pg-primary"
gitlab_rails['db_port'] = 5432
gitlab_rails['db_user'] = "gitlab"
gitlab_rails['db_password'] = "strongpass"
PostgreSQL 用 流复制 或 Patroni
redis['enable'] = false
gitlab_rails['redis_host'] = "redis-sentinel"
gitlab_rails['redis_port'] = 26379
gitaly['enable'] = false
git_data_dirs({
"default" => { "path" => "/var/opt/gitlab/git-data" }
})
Gitaly 可独立部署多节点
# 每个 Web 节点
roles ['application_role']
upstream gitlab {
server web1:80;
server web2:80;
}
server {
listen 443 ssl;
location / {
proxy_pass http://gitlab;
}
}
helm repo add gitlab https://charts.gitlab.io
helm install gitlab gitlab/gitlab \
--set global.hosts.domain=example.com \
--set global.edition=ee
❗ GitLab 不是无状态服务
❗ 仓库数据在 Gitaly,不是 Web
❗ 升级必须按官方顺序
❗ 至少 3 节点才能谈 HA
| 组件 | 数量 |
|---|---|
| Web | 2 |
| PostgreSQL | 2 |
| Redis | 3 |
| Gitaly | 2 |
你可以告诉我:
我可以 直接给你一套可执行的配置文件。