GitLab 2000用户参考架构设计与部署指南
前言
本文详细介绍了GitLab自托管环境下支持2000用户或40请求/秒(RPS)的参考架构设计方案。该架构基于真实用户场景设计,可满足中小型团队的代码托管、CI/CD等核心需求。
架构概览
核心组件与规格
该架构包含以下核心服务组件,各组件规格经过严格性能测试验证:
| 服务组件 | 节点数 | 推荐配置 | 说明 | |------------------------|--------|------------------|---------------------------| | 外部负载均衡器 | 1 | 4 vCPU, 3.6GB内存 | 建议使用云服务商LB方案 | | PostgreSQL数据库 | 1 | 2 vCPU, 7.5GB内存 | 支持第三方托管数据库服务 | | Redis缓存 | 1 | 1 vCPU, 3.75GB内存 | 支持第三方托管Redis服务 | | Gitaly版本控制服务 | 1 | 4 vCPU, 15GB内存 | 大型仓库需增加资源配置 | | Sidekiq后台任务处理器 | 1 | 4 vCPU, 15GB内存 | 可配置为自动扩展组 | | GitLab Rails应用节点 | 2 | 8 vCPU, 7.2GB内存 | 处理Web/API/Git请求 | | 监控节点 | 1 | 2 vCPU, 1.8GB内存 | 运行Prometheus监控系统 | | 对象存储 | - | - | 必须配置的外部存储服务 |
架构拓扑图
[外部负载均衡器]
├── [GitLab Rails x2]
│ ├── Gitaly
│ ├── PostgreSQL
│ ├── Redis
│ └── 对象存储
├── Sidekiq
│ ├── Redis
│ ├── PostgreSQL
│ └── 对象存储
└── Prometheus监控
├── 所有服务组件
└── 负载均衡器
性能指标
该架构设计满足以下峰值负载要求:
- API请求:40 RPS
- Web请求:4 RPS
- Git拉取操作:4 RPS
- Git推送操作:1 RPS
这些指标基于2000用户规模的实际生产环境数据,包含CI流水线等自动化负载。
详细配置指南
1. 负载均衡器配置
基础端口配置
| LB端口 | 后端端口 | 协议 | 说明 | |--------|----------|--------|-----------------------| | 80 | 80 | HTTP | Web访问 | | 443 | 443 | TCP/HTTPS | 安全访问(SSL终止点) | | 22 | 22 | TCP | SSH访问 |
SSL处理方案
根据安全需求选择以下SSL处理模式:
-
应用节点终止SSL
- LB配置443端口为TCP透传
- SSL证书部署在GitLab Rails节点
-
LB终止SSL(无后端加密)
- LB配置443端口为HTTPS
- 需配置
X-Forwarded-Proto
头
-
LB终止SSL(后端加密)
- LB与应用节点间维持加密通道
- 需在GitLab配置SSL证书
2. PostgreSQL数据库配置
自托管方案
- 安装GitLab包(仅安装步骤1-2)
- 生成密码哈希:
sudo gitlab-ctl pg-password-md5 gitlab
- 配置
/etc/gitlab/gitlab.rb
:roles(['postgres_role']) postgresql['listen_address'] = '0.0.0.0' postgresql['sql_user_password'] = '生成的密码哈希' postgresql['trust_auth_cidr_addresses'] = %w(应用服务器IP/32)
云数据库服务
支持Google Cloud SQL和Amazon RDS(注意Aurora不兼容)。需确保:
- 创建
gitlab
用户 - 授权创建
gitlabhq_production
数据库 - 配置正确的连接参数
3. Redis缓存配置
自托管方案
- 安装GitLab包(仅安装步骤1-2)
- 配置
/etc/gitlab/gitlab.rb
:roles(['redis_role']) redis['bind'] = '0.0.0.0' redis['port'] = 6379 redis['password'] = '强密码'
云Redis服务
支持ElastiCache等托管服务,需配置:
- 启用持久化
- 设置适当的内存策略
- 配置安全组允许应用服务器访问
4. Gitaly版本服务配置
- 配置
/etc/gitlab/gitlab.rb
:gitaly['configuration'] = { listen_addr: '0.0.0.0:8075', auth: { token: '共享密钥', }, }
- 大型仓库需调整:
gitaly['cgroups_count'] = 2 gitaly['cgroups_mountpoint'] = '/sys/fs/cgroup'
5. 对象存储配置
必须配置的外部存储,支持:
- AWS S3
- Google Cloud Storage
- 自建MinIO集群
配置示例:
gitlab_rails['object_store']['connection'] = {
'provider' => 'AWS',
'aws_access_key_id' => '访问密钥',
'aws_secret_access_key' => '秘密密钥',
'region' => '区域',
'endpoint' => '可选端点'
}
监控与维护
Prometheus监控配置
- 基础监控配置:
prometheus['monitor_kubernetes'] = false prometheus['listen_address'] = '0.0.0.0:9090'
- 关键监控指标:
- PostgreSQL连接数
- Sidekiq队列积压
- Gitaly内存使用
- Rails请求延迟
特别注意事项
- 大型仓库处理:超过数GB的单仓库需显著增加Gitaly资源配置
- 高可用需求:如需高可用,请参考3000用户架构方案
- 混合云方案:Kubernetes混合部署可更好处理迁移等单点任务
性能调优建议
-
数据库优化:
- 配置适当的work_mem(建议8-16MB)
- 调整shared_buffers(建议25%总内存)
-
Ruby调整:
puma['worker_processes'] = 4 sidekiq['concurrency'] = 20
-
缓存优化:
gitlab_rails['redis_cache_instance'] = 'redis://:密码@redis-host:6379/0'
本架构经过严格测试验证,可满足2000用户规模下的各类操作需求。实际部署时应根据具体工作负载特点进行适当调整。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考