GitLab多機備份與恢復操作


一、作用說明

備份:假設我們當前的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

遷移前-備份機目錄:

  

遷移前-遷移機目錄:

 

遷移后-遷移機目錄: 

除了訪問地址不一樣,其他目錄結構都一樣。其他操作就和原來倉庫操作一樣。


免責聲明!

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



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