淺談gitlab備份機制

2021-02-20 IT信息安全顧問

0x00、事件描述

信息來源:https://twitter.com/gitlabstatus

2017年1月31日,上午10點左右官方公布出現問題,2017年2月1日,上午9:57 完成恢復,大約經歷了24小時。

0x01、事件原因

2017/01/31 18:00 UTC 發現spammers攻擊gitlab,使得資料庫不穩定。

2017/01/31 21:00 UTC 發現47 000 IPs籤名使用同一個帳號,造成資料庫高負載。(傳說中的CC?)

2017/01/31 22:00 UTC 資料庫集群同步被打斷。DB Replication沒有及時寫。

2017/01/31 23:00-ish pg_basebackup拒絕資料庫文件同步工作,由於PostgreSQL數據目錄存在(儘管是空的),管理員決定刪除該目錄。 一兩秒後,他注意到他在db1.cluster.gitlab.com上運行它,而不是db2.cluster.gitlab.com。導致生產數據被刪除,災難發生。

2017/01/31 23:27 管理員終止了刪除,但是為時已晚。 在大約300 GB左右,只剩下約4.5 GB (媽蛋,這可是主庫呀,還有和TMD rm -rf有JM關係,正常的維護,但是管理好像不懂postgresql集群工作原理。)

備份機制

定期備份似乎也只是每24小時一次,管理員還不知道在哪?

pg_dump失敗,因為postgresql版本不是9.6而是9.2

Disk snapshots在微軟Azure上只做NFS快照,沒有postgresql快照

shell腳本做複製非常脆弱,而且日誌記錄很糟糕。

S3上的備份沒有起作用。

發現,基本5種備份機制都失效了。

0x02、淺談gitlab備份容災機制

了解gitlab架構和工作原理

GitLab由以下服務構成:

nginx:靜態Web伺服器

gitlab-shell:用於處理Git命令和修改authorized keys列表

gitlab-workhorse:輕量級的反向代理伺服器,GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求,比如文件上傳、文件下載、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用,即反向代理給後端的unicorn。

logrotate:日誌文件管理工具

postgresql:資料庫

redis:緩存資料庫

sidekiq:用於在後臺執行隊列任務(異步執行)

unicorn:An HTTP server for Rack applications,GitLab Rails應用是託管在這個伺服器上面的。

工作原理圖:

系統自帶備份恢復方法:

https://docs.gitlab.com/ce/raketasks/backup_restore.html#configure-cron-to-make-daily-backups

備份調研:

當然根據自己的實際需求調整參數。

系統名稱數據類型數據量RPORTO備份周期備份保存周期Gitlab代碼託管系統應用數據10G1h4h每4小時全備(重複數據刪除)14天
postgresql資料庫(快照方式)30G1h4h每4小時全備(重複數據刪除)14天
repositories(NFS方式)60G1day1day每天全備(重複數據刪除)14天
postgresql資料庫(資料庫同步)30G15min15minAll time~

安全方面:建議監控一下URL訪問頻率,快速發現惡意行為。不要因為安全問題,導致資料庫同步失敗或者滯後。

0x03、建議

從宏觀上講:

(1)備份系統建設一般都分為兩個階段,第一階段是針對關鍵系統的備份建設,第二階段是建立集中備份管理系統,把業務系統備份做成一個通用平臺。

(2)確定需要備份的系統的RPO和RTO要求,最好有了備份才考慮容災。

(3)容災系統打算建立多大的?本地HA、active-active HA、同城容災、兩地三中心。

從微觀上講:

(1)網際網路公司內部gitlab還是要根據官方給出的備份恢復建議去做。

(2)資料庫集群同步要找個明白人運維。(postgresql,一般商業備份容災軟體都不支持)

還有本身gitlab的備份方式其實已經很完備,但是就是運維系統沒有做備份或者資料庫同步失敗的告警,並且做出正確的應急處置。

相關焦點

  • Gitlab-ci: 從零開始的前端自動化部署
    目錄一.概念介紹 1.1 gitlab-ci && 自動化部署工具的運行機制 1.2 自動化部署給我們帶來的好處二.知識預備 2.1 gitlab-ci涉及的抽象概念(Runner/PipeLine/Executor/Job ) 2.2 YML文件的基本語法規則
  • 使用GitLab CI部署Rancher集群
    當使用GitLab CI/CD時,構建文件被稱為.gitlab-ci.yaml。在本文中,你將會了解到構建文件的組合方式及其作用。GitLab CI工具如何與AWS進行通信以觸發新資源的啟動是我們部署的另一個重要部分。我們的部署還包括Terraform、RKE和Rancher2。主要目標是產生一個按需部署和銷毀基礎設施的流水線。
  • 手把手教你使用 Jenkins + Maven + Gitlab + Nexus 構建持續集成
    2、環境搭建Gitlab-ce-10.8.4(部署在其他機器)gitlab的安裝部署見前面的博文:所有軟體的安裝包在部署前均下載到了本地[root@jenkins ~]# mkdir /application[root@jenkins ~]# mkdir -p /service/tools[root@jenkins ~]# cd /service/tools
  • 淺談linux防火牆
    夢裡北極光linux防火牆主要有iptables和firewall防火牆,淺談這兩個防火牆。
  • 電子檔案異質異地備份策略
    建議國家應針對檔案的異質異地備份工作成立或指定專門機構,統一計劃和指導檔案異質異地備份建設;秘密建立若干堅固可靠的國家級、軍隊級、省市自治區級的檔案異質異地備份中心,同時採取互結對子的辦法,構建布局合理、覆蓋廣泛的檔案異質異地備份體系,避免人力資源、物力資源的無謂耗散。
  • 如何備份重要數據而不是垃圾數據
    正確的備份選擇在本質上是一種平衡,一方面要確保應該備份的所有內容都得到了真正的備份,另一方面又要儘量不備份沒有價值的數據。有很多方法可以區分哪些是需要備份的,哪些是不需要備份的,但基本的目標應該是始終備份在崩潰中生存所需的一切。一些簡單的事情,比如告訴備份產品要備份哪些文件和資料庫,可能會對你的可恢復性產生巨大的影響。
  • 備份恢復,DBA最後一道防線,你完全掌握了嗎?
    這裡提供幾個建議:為了保證有效備份,需要考慮備份的擴展性以及用於備份有效性驗證的伺服器,還需要配合多種備份機制對於恢復,沒有恢復的備份是無意義的,所以需要備份恢復工具MySQL方面各種備份手段:備份恢復實現方式包含 物理 邏輯 商業軟體 虛擬機的整體備份
  • 虛擬機備份技術原理和組網介紹
    關於虛擬機備份功能,就如同虛擬機快照一樣,在很多是虛擬化軟體中作為一個數據保護基本功能存在。但是虛擬化的備份功能在執行備份時,會對業務性能產生影響,備份策略和組網不靈活,所以,針對虛擬化備份,常見的備份方式還是採用專業的備份軟體。
  • 淺談嵌入式系統軟體開發之S32K1xx系列MCU的MPU配置與使用詳解
    S32K1xx系列MCU啟動過程及重映射代碼到RAM中運行方法詳解《汽車電子ECU BootLoader開發》系列相關文章連結與資源匯總       淺談嵌入式MCU開發中的三個常見誤區       淺談嵌入式 MCU
  • MySQL定時備份資料庫方案(全庫備份)
    6.備份單個資料庫的數據mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql7.備份多個表的數據和結構(數據,結構的單獨備份方法與上同)
  • 說說虛擬機的備份
    2.雖然可以在線對虛擬機進行備份,但備份會對業務有影響,所以應該儘量選擇業務不繁忙的時間進行備份,這個時間段也稱備份窗口3.通過什麼網絡進行備份?千兆網絡,萬兆網絡還是通過FC SAN,這需要考慮備份的數據量和備份窗口。4.合適的備份軟體,後面會展開說說該有些什麼功能。5.日常的監控和運維,保證備份成功6.定期演練。
  • 淺談中美飛行員救生裝備對比
    點擊上方藍色小字關注飛行員的那些事這裡梳理一下美國海軍航空兵的戰術飛行員救生裝備、日常訓練, 然後是完善的搜救指揮機制,頂層是不分軍種的聯合搜救指揮中心,下面是區域搜救協調官SC建立的區域救援協調中心RCC,具體搜救任務指派的搜救任務協調官SMC,搜救現場指揮官OSC,以及參與搜救的現場搜救單位SRU,完成從國家到具體搜救現場的一兵一卒的快速指揮與資源協調。2、快速響應「時間真的是繩命」,無論何種搜救行動,速度是關鍵。
  • 比鈦備份更快更好用的腳本備份,速來學習!
    2:下載並安裝 MT文件管理器2.0,授予ROOT權限https://www.coolapk.com/apk/bin.mt.plushttps://github.com/Petit-Abba/backup_script_zh-CN如圖所示,點擊此處的【Releases】,進入文件下載頁面如果網頁無法打開,你也可以在本公眾號「酷客fans
  • 【Android】系統與應用備份
    但是鈦備份目前已長期處於停更狀態,適應不了新系統;所以,給各位安排一波同樣好用的系統備份App,以彌補沒有鈦備份的日子目錄1:鈦備份2:OAndBackupX3:Buggy Backup4:超級備份5:其他鈦備份
  • MysqlDump備份數據
    備份全部資料庫的數據和結構mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.備份全部資料庫的結構(加 -d 參數)mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql3.
  • Linux系統備份與還原
    在 使用Ubuntu之前,相信很多人都有過使用Windows系統的經歷。如果你備份過Windows系統,那麼你一定記憶猶新:首先需要找到一個備份工 具(通常都是私有軟體),然後重啟電腦進入備份工具提供的軟體環境,在這裡備份或者恢復Windows系統。Norton Ghost是備份Windows系統時經常使用的備份工具。在備份Windows系統的時候你可能想過,我能不能把整個C盤都放到一個ZIP文件裡去呢。
  • 備份必看!iTools 4.0「iTunes 備份管理」功能詳解
    不僅能同步「iTunes」的備份,還可以直接在iTools 中創建以及恢復備份▍下載地址iTools 4.0官網下載:http://www.itools.cn/▍iTunes 備份管理「iTunes 備份管理」工具可以從iTools
  • 虛擬機快照的備份原理
    通過虛擬化快照接口調用的備份在上一個備份技術的基礎上,再加上與虛擬化控制臺的對接通訊,備份時調用快照接口進行快照,然後將數據傳輸過來備份。備份完成後刪除快照。基於快照級的重刪的備份一般需要安裝客戶端軟體,若不安裝,只能做後刪備份。
  • WIN7一鍵備份還原
    所以在電腦健康正常的時候做一個系統備份,這樣在系統一旦出現故障的時候能快速恢復系統,而不用再去重新裝一遍。對於電腦小白來說,一鍵備份還原的確挺有用的。那這次就來詳細介紹下如何安裝和使用一鍵GHOST。一、安裝一鍵GHOST1、從網上下載一鍵GHOST硬碟版,並解壓縮。
  • Linux 系統的備份恢復
    ,以後還原還是還原到本機)注意根目錄下要有充足的可用空間用於備份。鏡像(本機備份系統,還原到新主機上)1,檢查系統版本,在目標機上安裝一樣版本的系統(最簡安裝即可),分區格式,類型也一樣(我沒試過不一樣的情況,不知道能否成功)lsb_release -auname -adf -Thfree -h2,備份源系統# 因為目標機和源主機硬體配置不同,所以排除dev,tmp;再適當增加你要排除的文件