gitlab自帶的備份功能作不到實時備份,爲了儘量減小意外狀況致使的丟失數據,本身搞了一個實時備份的功能。git
備份的大頭主要是兩部分,數據庫和代碼庫。數據庫由DBA配置主備。數據庫
倉庫通過測試,經過lsyncd同步repo倉庫是可行的。lsyncd封裝了inotify & rsync,會比使用inotify好用許多。segmentfault
lsyncd的使用:ssh
安裝 yum install -y lsyncdgitlab
使用 lsyncd -log Execxxx.conf測試
xxx.conf 配置文件:code
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的監控數量上限dns
/etc/sysct.conf: fs.inotify.max_user_watches=xxxxx
打通源機器到備份機器的ssh端口,而後啓動lsyncd進程
數據庫備庫設置爲只讀,這樣備機其實能夠一直開着,在主機發生問題時,經過dns/lvs直接切換。事件
lsyncd配置部分參考文章:https://segmentfault.com/a/1190000002737213