























企业级GitLab高可用部署主要有以下几种主流方案:
方案一:DRBD + Pacemaker + Corosync(主备模式)
该架构为Active/Passive(主/备)模式,只有主节点运行GitLab服务并挂载存储,备节点通过DRBD实时同步数据。当主节点宕机时,Pacemaker自动将VIP和存储切换到备节点。此方案适合中小型企业,硬件成本低,约比单节点增加40%。
方案二:GitLab Geo(地理分布式)
GitLab企业版(EE)原生提供的Geo功能,可实现完整的实例级复制。主站点可读写,辅助站点只读,支持自动故障转移。需要GitLab Premium或Ultimate订阅。
方案三:分层高可用架构(官方参考架构)
将GitLab各组件拆分部署:前端负载均衡(HAProxy/Nginx)+ 多个GitLab应用节点 + PostgreSQL集群(Patroni+etcd)+ Redis Sentinel + 共享存储(NFS/Ceph)。适合大规模企业。
本文推荐方案一(DRBD + Pacemaker) ,性价比高、部署相对简单,适合大多数企业场景。如团队规模超过200人,建议升级到方案三。
⚠️ 生产环境强烈建议使用SSD存储,GitLab官方建议禁用swap分区。
安装postfix时,如选择“Internet Site”,输入你的邮件域名;如暂不需要邮件功能可跳过。
使用官方源(国外服务器较快):
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
使用国内清华镜像源(推荐国内用户):
💡 如使用社区版(CE),将上述命令中的
gitlab-ee替换为gitlab-ce。企业版(EE)提供更多高可用特性,生产环境建议使用企业版。
如果尚未配置域名和SSL证书,可先使用IP地址:
EXTERNAL_URL="http://192.168.1.10"
基础配置项:
sudo gitlab-ctl reconfigure
该命令会启动所有必要服务,耗时几分钟。
DRBD实现两台服务器间数据的实时块级同步。
在两台节点上安装DRBD:
sudo apt install -y drbd-utils
在主节点创建DRBD配置文件:
sudo vim /etc/drbd.d/gitlab.res
resource gitlab {
protocol C;
meta-disk internal;
device /dev/drbd0;
disk /dev/sdb; # 请替换为实际的数据盘设备
net {
cram-hmac-alg sha1;
shared-secret "your-secure-secret-key";
}
on gitlab-primary {
address 192.168.1.10:7789;
}
on gitlab-secondary {
address 192.168.1.11:7789;
}
}
初始化DRBD资源(两台节点执行):
配置自动挂载:
echo '/dev/drbd0 /mnt/gitlab-data ext4 defaults,noatime 0 0' | sudo tee -a /etc/fstab
修改GitLab数据目录:
sudo vim /etc/gitlab/gitlab.rb
迁移现有数据到共享存储(如已存在数据):
GitLab官方推荐使用Patroni + etcd实现PostgreSQL自动主备切换。
在两台节点安装etcd和Patroni:
sudo apt install -y etcd patroni patroni-pgq
配置etcd集群(两台节点):
sudo vim /etc/default/etcd
主节点配置:
ETCD_NAME="etcd1" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.10:2380" ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.10:2379" ETCD_INITIAL_CLUSTER="etcd1=http://192.168.1.10:2380,etcd2=http://192.168.1.11:2380" ETCD_INITIAL_CLUSTER_STATE="new"
备节点将IP替换为192.168.1.11,ETCD_NAME改为etcd2。
启动etcd:
sudo systemctl enable etcd
sudo systemctl start etcd
配置Patroni:
sudo vim /etc/patroni/patroni.yml
scope: gitlab
name: gitlab-pg-1
启动Patroni:
sudo systemctl enable patroni
sudo systemctl start patroni
配置GitLab使用外部PostgreSQL:
安装Redis(两台节点):
sudo apt install -y redis-server
配置Redis主从:
主节点 /etc/redis/redis.conf:
bind 0.0.0.0 port 6379 requirepass your-redis-password masterauth your-redis-password
备节点 /etc/redis/redis.conf:
bind 0.0.0.0 port 6379 requirepass your-redis-password masterauth your-redis-password replicaof 192.168.1.10 6379
配置Redis Sentinel(两台节点):
sudo vim /etc/redis/sentinel.conf
bind 0.0.0.0 port 26379 sentinel monitor gitlab-redis 192.168.1.10 6379 2 sentinel auth-pass gitlab-redis your-redis-password sentinel down-after-milliseconds gitlab-redis 5000 sentinel failover-timeout gitlab-redis 60000
启动服务:
sudo systemctl enable redis-server redis-sentinel
sudo systemctl start redis-server redis-sentinel
配置GitLab使用Redis Sentinel:
安装Keepalived(两台节点):
sudo apt install -y keepalived
主节点配置 /etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass your-auth-password
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
check_gitlab
}
}
vrrp_script check_gitlab {
script "/usr/local/bin/check_gitlab.sh"
interval 5
weight -10
}
备节点配置(state改为BACKUP,priority改为90)。
健康检查脚本 /usr/local/bin/check_gitlab.sh:
#!/bin/bash
if curl -s -o /dev/null -w "%{http_code}" http://localhost:80/ | grep -q "200\|302"; then
exit 0
else
exit 1
fi
sudo chmod +x /usr/local/bin/check_gitlab.sh
sudo systemctl enable keepalived
sudo systemctl start keepalived
如需在前端增加负载均衡层:
sudo apt install -y nginx
sudo apt install -y certbot python3-certbot-nginx
sudo apt install -y grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
访问 http://gitlab.local:3000,添加Prometheus数据源,导入GitLab官方仪表盘。
建议设置以下告警:
PostgreSQL连接数 > 最大值的80%
Redis内存使用 > 8GB
仓库存储空间 > 90%
Sidekiq队列积压 > 1000
HTTP 500错误率 > 1%
通过Keepalived + DRBD + Pacemaker组合可实现自动故障转移。配置Pacemaker资源管理:
sudo apt install -y pacemaker corosync
启用2FA双因素认证
配置IP白名单限制管理访问
禁用默认root账户登录
定期更新系统与GitLab版本
启用审计日志
以上是完整的Ubuntu系统企业级GitLab高可用主备部署指南。建议在正式上线前,在测试环境完整演练一遍部署流程和故障切换场景。如团队规模超过200人,建议参考GitLab官方参考架构进行分层部署。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。