一、背景
1、現公司源代碼統一用git管理,流水線對git有着強依賴。流水線一切的構建都會從git倉庫拉取代碼進行編譯構建操作。
2、現git是單節點模式,雖然對數據有備份。但是一旦gitlab服務或者服務器異常,將導致服務不可用。需排查問題及解決故障以后方可使用,這期間將直接導致流水線不可用、以及開發人員無法遠程提交代碼等尷尬境地。
二、目標
實現gitlab的高可用,其中任何一個gitlab的異常不會引起整個系統的異常。通過實現gitlab高可用,多台具有相同能力的服務同時對外提供透明服務,並且分擔處理服務請求。
三、方案
方案1
負載均衡器nginx+NFS+redis+PostgreSQL Database
方案要術:NFS主從、redis集群(redis哨兵模式高可用方案)
1、通過NFS文件系統,通過共享掛載,gitlab應用和數據分離,更加安全,不會因為realserver的機器故障而引起數據的丟失。通過對NFS服務器集群可以大大改善單點故障發生的概率在高並發的場合,NFS效率性能有限(一般幾千萬以下pv的網站不是瓶頸)。
2、redis哨兵模式本身具有高可用的特性,作為緩存redis也有很高的效率。
3、用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數據通過互備的方式,嚴重依賴備份的准確性。沒有緩存,速度會稍微慢一些。數據與服務未分離。
優點:配置簡單,維護成本很低。