GItlab的高可用方案

1、背景nginx

一、现公司源代码统一用git管理,流水线对git有着强依赖。流水线一切的构建都会从git仓库拉取代码进行编译构建操做。git

 

二、现git是单节点模式,虽然对数据有备份。可是一旦gitlab服务或者服务器异常,将致使服务不可用。需排查问题及解决故障之后方可以使用,这期间将直接致使流水线不可用、以及开发人员没法远程提交代码等尴尬境地。redis

 

 

2、目标数据库

实现gitlab的高可用,其中任何一个gitlab的异常不会引发整个系统的异常。经过实现gitlab高可用,多台具备相同能力的服务同时对外提供透明服务,而且分担处理服务请求。缓存

 

 

3、方案安全

方案1服务器

负载均衡器nginx+NFS+redis+PostgreSQL Database并发

 

方案要术:NFS主从、redis集群(redis哨兵模式高可用方案)负载均衡

 

 

一、经过NFS文件系统,经过共享挂载,gitlab应用和数据分离,更加安全,不会由于realserver的机器故障而引发数据的丢失。经过对NFS服务器集群能够大大改善单点故障发生的几率在高并发的场合,NFS效率性能有限(通常几千万如下pv的网站不是瓶颈)。高并发

二、redis哨兵模式自己具备高可用的特性,做为缓存redis也有很高的效率。

三、用nginx做为负载均衡器分发流量,性能好,配置简单,彻底没必要用官方推荐的F5(商业的)。

 

方案2

heartbeat+rsync+innotify

只须要两台相同配置的服务器,每台机器都有相同的 GitLab 资源库, 配置, 和数据库. 从服务器的做用是备份主服务器的文件一旦主服务器挂掉,从服务器自动接管主服务器的全部工做

 

 

原理:Gitlab(master)节点和Gitlab(slave)节点,经过keepalived互相监控对方的状态。当master节点发生异常,对外提供的虚拟IP自动漂浮到slave节点上对外提供服务。

 

要点:master节点的数据和slave的数据必须保持高度一致性,可沿用文件服务器高可用的方案rsync+innotify+heartbeat实现双机热备方案

 

 

四:方案优缺点


方案一:

缺点:须要对NFS文件系统服务器集群,redis集群,服务都须要部署在不一样的机器上,花销较大,维护成本高。

优势:文件经过NFS文件系统来访问存储,可以保证GITlab数据的高一致性。而且有redis缓存机制,大大提升了git的效率。

 

方案二:

缺点:git数据经过互备的方式,严重依赖备份的准确性。没有缓存,速度会稍微慢一些。数据与服务未分离。

优势:配置简单,维护成本很低。