gitlab数据自动化备份到其他服务器
gitlab配置本地自动备份
1、本地部署完成的gitlab服务器上操作,手动备份
gitlab-rake gitlab:backup:create
特别说明: 如果/etc/gitlab/gitlab.rb 配置了参数“backup_path”的指定目录,则备份数据会直接到指定目录下,如果没有配置则备份数据到默认”/var/opt/gitlab/backups“下
2、自动定时备份gitlab数据,使用命令crontab -e,添加定时任务
crontab -e
根据自己部门的配置时间进行对应修改
//本部门白天都在提交数据,改成凌晨进行备份处理
0 0 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
重启crontab
systemctl restart crond
3、本地配置自动清理备份数据,通过修改gitlab自己的配置实现
vim /etc/gitlab/gitlab.rb
将配置文件中backup_keep_time的注释取消掉
//备份保留7天(7*3600*24=604800)
gitlab_rails['backup_keep_time'] = 604800
重新加载配置文件
gitlab-ctl reconfigure
本地备份完成。下一步配置远程备份
远程备份数据
1、gitlab服务器A(172.16.10.90),备份服务器B(172.16.10.100) 2、配置密钥对,取消scp传输密码限制, 在A服务器上生成rsa证书ssh-keygen -t rsa 一路回车即可。会在root下生成一个.ssh目录,里面存放id_rsa和id_rsa.pub两个证书,公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa 3、将生成的id_rsa.pub文件复制到B服务器上
mkdir -p /root/.ssh
//从A机器将公钥拷贝过去
scp /root/.ssh/id_rsa.pub root@172.16.10.100:/root/.ssh/
4、在备份服务器B上创建authorized_keys文件
touch /root/.ssh/authorized_keys
将scp过来的id_rsa.pub文件内容复制到authorized_keys中
cat id_rsa.pub >> authorized_keys
修改authorized_keys文件权限,如果给777权限,scp的时候还需要密码
chmod 400 authorized_keys
5、创建远程备份脚本 在gitlab服务器上创建脚本
vim /root/auto_backup_to_remote.sh
//文件中添加如下内容
#!/bin/bash
# gitlab 服务器备份路径
LocalBackDir=/var/opt/gitlab/backups
# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/root/gitlab_backup
# 远程备份服务器 登录账户
RemoteUser=root
# 远程备份服务器 IP地址
RemoteIP=(备份服务器B的地址,请你自行修改)
#当前系统日期
DATE=`date +"%Y-%m-%d"`
#Log存放路径
LogFile=$LocalBackDir/log/$DATE.log
# 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60 -name '*.tar*')
#新建日志文件
touch $LogFile
#追加日志到日志文件
echo "Gitlab auto backup to remote server, start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile
# 输出日志,打印出每次scp的文件名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile
#备份到远程服务器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir
#追加日志到日志文件
echo "---------------------------------------------------------------------------" >> $LogFile
修改脚本权限
chmod 777 auto_backup_to_remote.sh
创建日志存放目录
mkdir -p /var/opt/gitlab/backups/log
6、添加定时计划,使用命令crontab -e,将定时任务添加后保存
crontab -e
根据本地备份计划,推迟一个小时后上传
0 1 * * * /root/auto_backup_to_remote.sh -D 1
//重启crontab服务
systemctl restart crond
7、定时删除备份服务器上的备份文件,在备份服务器B上创建定时删除脚本。
//设置备份目录
mkdir -p /root/gitlab_backup
//创建定时删除脚本
vim /root/auto_remove_old_backup.sh
//向脚本中添加如下内容
#!/bin/bash
# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/root/gitlab_backup
# 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;
//修改脚本权限
chmod 777 auto_remove_old_backup.sh
添加定时任务,通过crontab命令
//添加任务
crontab -e
//添加内容,每天凌晨3点执行删除过期备份任务
0 3 * * * /root/auto_remove_old_backup.sh
//重启cron服务
systemctl restart crond
参考
|