使用阿里雲文件存儲NAS構建GitLab高可用環境
GitLab簡介
GitLab是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目。Ruby on Rails 是一個可使你開發、部署、維護 web 應用程序變得簡單的框架。GitLab擁有與Github相似的功能,可以瀏覽源代碼,管理缺陷和註釋。能夠管理團隊對倉庫的訪問,它很是易於瀏覽提交過的版本並提供一個文件歷史庫。它還提供一個代碼片斷收集功能能夠輕鬆實現代碼複用,便於往後有須要的時候進行查找。
因爲Git的分佈式特性,即便Gitlab不可用,開發人員仍然能夠在本地提交代碼。可是,某些Gitlab功能,好比CI,問題跟蹤和持續集成會不可用,也會嚴重影響線上使用。所以高可用架構仍是不可缺乏的。GitLab軟件架構以下圖所示:node
GitLab高可用設計
主備模式:啓動2個實例,只有一個工做提供服務,數據經過分佈式存儲保持一致
主主模式(scales):Rails server啓動多個,同時提供服務,數據庫保持獨立,數據經過NAS文件存儲共享
GitLab高可用方案
水平擴展
這種架構適用於許多Gitlab客戶訪問的使用場景,解決高API使用率,大量排隊的Sidekiq做業的問題。web
- 3 PostgreSQL nodes
- 2 Redis nodes
- 3 Consul/Sentinel nodes
- 2 or more GitLab application nodes (Unicorn, Workhorse, Sidekiq, PGBouncer)
- 1 NFS/Gitaly server
混合擴展
這種架構經過組件在專用節點上分離,提供高資源使各組件不會相互干擾,解決服務爭用/高負載的問題。數據庫
- 3 PostgreSQL nodes
- 1 PgBouncer node
- 2 Redis nodes
- 3 Consul/Sentinel nodes
- 2 or more Sidekiq nodes
- 2 or more GitLab application nodes (Unicorn, Workhorse)
- 1 or more NFS/Gitaly servers
- 1 Monitoring node (Prometheus, Grafana)
全分佈式擴展
該體系結構可擴展到數十萬用戶和項目,是GitLab.com體系結構的基礎。 雖然分佈式架構能夠很好地擴展,但它增長了節點的複雜性,配置,管理和監控的難度,不易維護。後端
- 3 PostgreSQL nodes
- 4 or more Redis nodes (2 separate clusters for persistent and cache data)
- 3 Consul nodes
- 3 Sentinel nodes
Multiple dedicated Sidekiq nodes (Split into real-time, best effort, ASAP, CI Pipeline and Pull Mirror sets)
- 2 or more Git nodes (Git over SSH/Git over HTTP)
- 2 or more API nodes (All requests to /api)
- 2 or more Web nodes (All other web requests)
- 2 or more NFS/Gitaly servers
阿里雲文件存儲NAS選型
GitLab場景一般爲海量小文件場景,須要併發的進行文件的讀寫操做。該種場景適用於極速型NAS。該種NAS後端基於RDMA網絡進行時延優化,對於元數據操做密集型的業務有很高的OPS和較低的訪問時延。api
原文連接
本文爲雲棲社區原創內容,未經容許不得轉載。網絡