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數據經過互備的方式,嚴重依賴備份的準確性。沒有緩存,速度會稍微慢一些。數據與服務未分離。
優勢:配置簡單,維護成本很低。