一、作用說明
備份:假設我們當前的gitlab掛掉了,整個服務器都起不來了,但是我們有對gitlab的歸檔備份,這時候還可以恢復出數據來。
遷移:假設此時使用的gitlab服務器出現故障運行不了,但是我們對gitlab在遠端機有歸檔備份,這時候我們就可以在遠端機把數據恢復重新搭建gitlab。
注意的是:備份和遷移的恢復操作是全量的,操作前要確認是否要進行備份或者恢復操作。
二、前提條件
在新的主機安裝與之前機器相同版本的gitlab rpm包。也就是說要保證兩台或者多台機器安裝的gitlab版本要一致。可以通過以下命令查看相關git版本以及安裝目錄。
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

或者可以通過管理區域查看相關的GitLab版本信息:
三、備份恢復流程
備份機:需要gitlab備份所在的機子
遷移機:gitlab需要遷移的機子,即新服務器所在機子
備份恢復流程圖:
配置文件說明:
/etc/gitlab/gitlab.rb 配置文件須備份
/var/opt/gitlab/nginx/conf nginx配置文件
/etc/postfix/main.cfpostfix 郵件配置備份
3.1 備份機備份文件
備份時需要保持gitlab處於正常運行狀態,在備份機直接執行以下命令:
gitlab-rake gitlab:backup:create
備份機會默認在/var/opt/gitlab/backups目錄下創建一個名稱類似為1573460229_2019_11_11_9.3.0_gitlab_backup.tar的壓縮包, 這個壓縮包就是Gitlab整個的完整部分, 其中開頭的1573460229_2019_11_1是備份創建的日期。文件如圖所示:

也提供了以下幾種方式進行相關備份工作的配置:
3.1.1自動備份時間配置
在crontab文件里面,每一行代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,每個字段之間用空格分割,沒用的段用*代替,格式如下:
m h dom mon dow user command
其中:
m:表示分鍾,可以是從0到59之間的任何整數。
h:表示小時,可以是從0到23之間的任何整數。
dom:表示日期,可以是從1到31之間的任何整數。
mon:表示月份,可以是從1到12之間的任何整數。
dow:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
user : 表示執行的用戶。
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件(如shell文件)。
實現每天凌晨2點進行一次自動備份:通過crontab使用備份命令實現,需重啟cron服務
方法1:在命令行輸入: crontab -e 然后添加相應的任務,wq存盤退出。
#輸入命令crontab -e sudo crontab -e #輸入相應的任務 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
方法2:直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務
#編輯 /etc/crontab vi /etc/crontab 然后再編輯框內輸入相應的任務 # edited by ouyang 2017-8-11 添加定時任務,每天凌晨兩點,執行gitlab備份 0 2 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
方法3:通過編寫sh腳本執行
或者直接定時執行一個腳本 auto_backup.sh ,腳本內容為
/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
然后再 /etc/crontab中,添加相關任務定時執行 auto_backup.sh 腳本文件
sudo chmod +x auto_backup.sh sudo vim auto_backup.sh
/etc/crontab 中添加執行腳本的定時任務,代碼如下:
#也可以按照如下所示的方法,定時執行 auto_backup.sh腳本,腳本內容就填寫: /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
0 2 * * * root /data/gitlabData/backups/auto_backup.sh -D 1
編寫完 /etc/crontab 文件之后,需要重新啟動cron服務
#重新加載cron配置文件 sudo /usr/sbin/service cron reload #重啟cron服務 sudo /usr/sbin/service cron restart
3.1.2修改默認備份路徑
打開備份機gitlab的/etc/gitlab/目錄下的gitlab.rb文件,找到以下配置信息,即可修改文件備份路徑:
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
修改完之后,執行以下命令,重新配置下gitlab
gitlab-ctl reconfigure 或者 gitlab-ctl restart
比如:修改了備份路徑:
重新執行備份語句gitlab-rake gitlab:backup:create,生成文件如下:
可以到/var/opt/gitlab/backups找到備份包,解壓查看,會發現備份的還是比較全面的,數據庫、repositories、build、upload等分類還是比較清晰的。

3.1.3修改備份保留時間
每天執行備份,肯定有目錄被爆滿的風險,gitlab-ctl自身集成的有自動刪除配置。同樣打開/etc/gitlab/gitlab.rb配置文件,可以找到如下配置:
gitlab_rails['backup_keep_time'] = 604800
這里是設置備份保留7天(7*3600*24=604800),秒為單位,如果想增大或減小,可以直接在該處配置,並通過gitlab-ctl reconfigure 或者 gitlab-ctl restart 重啟服務生效。
3.2 發送或者拷貝備份文件至遷移機
3.2.1發送備份文件
在備份機上打開/var/opt/gitlab/backups,通過以下命令將備份文件發送到遷移機具體備份路徑或者通過ftp上傳到具體路徑:
rsync -avz 1573517815_2019_11_12_9.3.0_gitlab_backup.tar 192.111.25.32:/var/opt/gitlab/backups/

要輸入遷移機的密碼,等待執行完畢。
3.2.2本地拷貝備份文件
在遷移機上打開/var/opt/gitlab/backups,通過以下命令將備份文件拷貝到遷移機具體備份路徑上:
scp root@192.111.35.142:/var/opt/gitlab/backups/1573517815_2019_11_12_9.3.0_gitlab_backup.tar /var/opt/gitlab/backups/
要輸入備份機的密碼,等待執行完畢。
3.3 遷移機恢復備份
3.3.1將備份文件權限修改為777
第一步,將備份文件權限修改為777,不然可能恢復的時候會出現權限不夠,不能解壓的問題
chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar
3.3.2執行命令停止相關數據連接服務
執行命令停止相關數據連接服務,防止恢復備份的同時還有數據操作,導致數據不一致:
# 停止相關數據連接服務 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq
3.3.3執行命令從備份文件中恢復Gitlab
進入到遷移機/var/opt/gitlab/backups目錄執行下面的命令進行恢復:
gitlab-rake gitlab:backup:restore BACKUP=1573440757_2019_11_11_9.3.0 或者 gitlab-rake gitlab:backup:restore BACKUP=1573440757_2019_11_11_9.3.0_gitlab_backup.tar
后面再輸入兩次yes就完成恢復了。
3.3.4啟動Gitlab
第四步,啟動Gitlab
sudo gitlab-ctl start
遷移前-備份機目錄:
遷移前-遷移機目錄:
遷移后-遷移機目錄:
除了訪問地址不一樣,其他目錄結構都一樣。其他操作就和原來倉庫操作一樣。

