Gitlab備份以及恢復


1.遷移准備工作和思路

從a服務器遷移到b服務器,由於Gitlab自身的兼容性問題,高版本的Gitlab無法恢復低版本備份的數據,需要注意在b服務器部署和a服務器一樣版本的gitlab,部署好環境后開始備份和數據遷移.

查看gitlab版本的命令:

 gitlab-rake gitlab:env:info

2. 備份原a服務器上的的數據

gitlab-rake gitlab:backup:create RAILS_ENV=production

PS: 備份后的文件一般是位於/var/opt/gitlab/backups下, 自動生成文件名文件名如1592188481_2020_06_15_13.0.3_gitlab_backup.tar

這里要特別說明,如果在/etc/gitlab/gitlab.rb 文件配置了參數“backup_path”(例如gitlab_rails['backup_path'] = '/backup'),則備份的目錄就是該目錄下(/backup/),如果沒有配置參數“backup_path”,則gitlab把備份文件生成到默認目錄
/var/opt/gitlab/backups。


大意就是在gitlab.rb和gitlab-secrets.json文件中包含敏感數據,在備份中並沒有包含這兩個文件,需要手動保存一下,在恢復備份的時候會需要這兩個文件(如果是在本機更新,則不備份這兩個文件也沒關系,如果是備份了在另一台機器安裝gitlab並恢復數據,則需要在另一台機器覆蓋這兩個文件)。這兩個文件放在/etc/gitlab目錄下。

3. 將步驟2生成的tar文件拷貝到b服務器上相應的backups目錄下

可以利用scp進行直接拷貝.

scp /var/opt/gitlab/backups/1592188481_2020_06_15_13.0.3_gitlab_backup.tar  username@desc_ip:/var/opt/gitlab/backups

PS: username為目的服務器的用戶名,desc_ip目的服務器IP地址

4. 在b服務器恢復數據

gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=/var/opt/gitlab/backups/1592188481_2020_06_15_13.0.3

PS:注意恢復備份使用的文件名稱,使用的是文件名中git前邊的數據

1592188481_2020_06_15_13.0.3_gitlab_backup.tar ==> 1592188481_2020_06_15_13.0.3

開始恢復的時候會有個警告提示,手動輸入'yes'繼續操作就行
然后在遇到authorized_keys時,也手動輸入'yes'繼續操作就行

恢復后的界面

5. 通過腳本定時備份

寫一個簡單的腳本,加入到定時任務,以保證每天備份一次代碼到異地。

寫腳本之前,先創建一下對應的工作目錄:

mkdir /backup
touch /backup/logfile.txt

腳本內容如下:

#!/bin/bash
Bakupdir=/var/opt/gitlab/backups/
Logfile=/backup/logfile.txt
Date=`date +%Y-%m-%d`
gitlab-rake gitlab:backup:create RAILS_ENV=production
if [ $? -eq 0 ];then
    echo "$Date Backup Successful" >> $Logfile
else
    echo "$Date Backup Failed" >> $Logfile
fi
cd $Bakupdir
scp *.tar backup@192.168.106.222:/home/backup/gitbak # 提前創建好目錄,ssh免密登陸等
rm -rf *

然后將腳本加入定時任務,根據需求,定期執行即可!

6.出錯解決

數據遷移到后檢查登錄gialab有時候會跳出500報錯(Something went wrong on our end.)以及無法正常新建用戶
查看日志:tail -f /var/log/gitlab/redis/current
Can’t save in background: fork: Cannot allocate memory

解決方案

修改/etc/sysctl.conf

加上vm.overcommit_memory = 1, Linux內核會根據參數vm.overcommit_memory參數的設置決定是否放行。

修改完執行sysctl -p

vm.overcommit_memory = 1,直接放行
vm.overcommit_memory = 0:則比較 此次請求分配的虛擬內存大小和系統當前空閑的物理內存加上swap,決定是否放行。
vm.overcommit_memory = 2:則會比較進程所有已分配的虛擬內存加上此次請求分配的虛擬內


免責聲明!

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



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