本方案主要满足以下业务场景
git 本是个分布式源码管理 。所以本方案期望不增加过高复杂度和硬件成本的前提,保证gitlab主体具备高可用,同时由于源码重要性和实时性需要具备数据一致性,而且为避免硬件问题导致数据丢失,采用rsync+定时冷备的方案。
GITLAB服务组成
nginx:静态web服务器。
gitlab-shell:用于处理Git命令和修改authorized keys列表。
gitlab-workhorse: 轻量级的反向代理服务器。
logrotate:日志文件管理工具。
postgresql:数据库。
redis:缓存数据库。
sidekiq:用于在后台执行队列任务(异步执行)。
方案概述
关注点偏移后的简单架构。
1. Web层高可用:在不考虑新增硬件(F5)增加复杂度的情况下。采用主备模式,前置nginx+KeepAlived用于单点异常漂移,确保至少一个gitlab节点可用。
2. 存储高可用:暂不采用nfs及其他分布式方案,gitlab小文件居多,可能存在小文件传输慢的问题。
现状
现有开发人数不多,直接双机主从硬盘挂载,应用和数据分离,。
热备:主节点直接使用rsync同步增量到从节点。出现问题或有其他需要时切换即可。中间如果有丢失部分项目git commit树,本地push 即可。考虑到故障切换后数据流到disk1,所以rsync需要双向同步,disk1->disk0,保证主服务恢复后切回,不会出现数据丢失、覆盖等问题
冷备:使用gitlab-backup 在disk0定时执行,每天4点执行一次。备份最多保留14天。
中间件高可用:
1)redis直接使用哨兵模式实现高可用(1master+2slave +3 sentinel)。
2)Pgsql使用Pgo(Postgres-Operator方式安装启动)