gitlab實時備份方案(非官方命令)


gitlab自帶的備份功能做不到實時備份,為了盡可能減少意外情況導致的丟失數據,自己搞了一個實時備份的功能。

備份的大頭主要是兩部分,數據庫和代碼庫。數據庫由DBA配置主備。

倉庫經過測試,通過lsyncd同步repo倉庫是可行的。lsyncd封裝了inotify & rsync,會比使用inotify好用許多。

 

lsyncd的使用:

安裝 yum install -y lsyncd

使用 lsyncd -log Execxxx.conf

xxx.conf 配置文件:

settings {
    logfile      ="/var/log/lsyncd/lsyncd.log",
    statusFile   ="/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",  #inotify監控的時間
    maxProcesses = 10,  #同時最大起的rsync進程數,一個rsync同步一個文件
    }
 
sync {
    default.rsync,
    source    = "$GITLAB_REPO_PATH", #源目錄,路徑使用絕對路徑
    target    = "$USER@$BACKUP_IP_ADDRESS:$GITLAB_REPO_PATH", #目標目錄
    maxDelays = 50,  #統計到多少次監控事件即開始一次同步
    delay = 60,           #若60s內未出發50次監控事件,則每60s同步一次
   delete = true,  #rsync 是否啟用--delete
    rsync     = {
        binary ="/usr/bin/rsync",  #rsync可執行文件
        archive = true,  #保持文件所有屬性
        compress = true,  #壓縮傳輸,是否開啟取決於帶寬及cpu
        bwlimit   =5000  #限速 kb/s
        -- rsh ="/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" #可指定端口
        }
    }



由於倉庫文件數量通常較多,往往需要修改inotify的監控數量上限

/etc/sysct.conf: fs.inotify.max_user_watches=xxxxx


打通源機器到備份機器的ssh端口,然后啟動lsyncd

 

數據庫備庫設置為只讀,這樣備機其實可以一直開着,在主機發生問題時,通過dns/lvs直接切換。


lsyncd配置部分參考文章:https://segmentfault.com/a/1190000002737213

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM