从零开始的Devops-定时备份

Posted franzlistan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的Devops-定时备份相关的知识,希望对你有一定的参考价值。

如何完成定时备份

想考虑清楚思路
一在备份机器上添加用户
useradd -m backupjumpserver
passwd backupjumpserver
useradd -m backupwiki
passwd backupjumpserver
useradd -m backupgit
passwd backupgit
useradd -m backupjenkins
passwd backupjenkins
以wiki为例子
远程登陆到jumpserver机器上
获取jumpserver启动账户的的/home/user/.ssh/下面的 idrsa.pub
粘贴到备份机器的新建的backupjumpserver账户下面的autorized_keys上面
在jumpserver机器上检测免密登陆ssh backupjumpserver@ip
成功后就可以免密登陆了
在备份机器上赋予需要备份的例如jira和wiki的文件夹的新建的备份目录以权限
在备份机器上 chown -R backupwiki /data/backupwiki
在备份机器上 chown -R backupjira /data/backupjira
在备份机器上 chown -R backupftp /data/backupftp

在jumpserver上写脚本
在jumpserver的/etc/cron.d目录下面新建backupxxx.sh
用cron执行定时任务
切换到su backupwiki

backupxxx.sh的思路
由应用触发备份
由命令触发
或由docker exec
或docker cp
产生备份

在jumpserver或wiki或jira或什么机器上写自动执行脚本

本地备份产物文件夹
本地备份日志
远程地址
远程路径
写日志开始备份
执行备份
找到过去24小时或者某个备份时间端的文件
找到文件find $LocalBackDir -type f  -mmin -10 -name '*.tar' | tail -1
执行scp
清理旧的备份
写日志结束备份


https://blog.winsky.wang/Git/gitlab/Gitlab%E6%97%A5%E5%B8%B8%E5%A4%87%E4%BB%BD%E5%8F%8A%E8%BF%81%E7%A7%BB/

#!/bin/bash

# Gitlab自动备份脚本


#Gitlab 备份地址
LocalBackDir=/var/opt/gitlab/backups

#备份日志文件
LogFile=$LocalBackDir/remote_backup.log

#新建备份日志文件
touch $LogFile

echo "-------------------------------------------------------------------------" >> $LogFile

#记录本地生成gitlab备份日志
echo "Gitlab auto backup at local server, start at $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

#执行gitlab本地备份
gitlab-rake gitlab:backup:create >> $LogFile 2>&1

# $?符号显示上一条命令的返回值,如果为0则代表执行成功,其他表示失败
if [ $? -eq 0 ];then
   #追加日志到日志文件
   echo "Gitlab auto backup at local server successed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
else
   #追加日志到日志文件
   echo "Gitlab auto backup at local server failed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
fi

#查找本地备份目录修改时间为10分钟以内且后缀为.tar的Gitlab备份文件
Backfile_Send_To_Remote=`find $LocalBackDir -type f  -mmin -10 -name '*.tar' | tail -1` >> $LogFile 2>&1

echo $Backfile_Send_To_Remote
#!/bin/bash

# 远程登录gitlab服务器,执行自动备份脚本,然后传输至本地

#Gitlab服务器
RemoteServer=git.ufeng.top
RemoteServerUser=root

#Gitlab服务器备份地址
RemoteBackDir=/var/opt/gitlab/backups

#NAS本地备份地址
LocalBackDir=/volume1/homes/gitlab_back

#备份日志文件
LogFile=$LocalBackDir/remote_backup.log

#新建备份日志文件
touch $LogFile

echo "-------------------------------------------------------------------------" >> $LogFile
#记录NAS下载gitlab备份日志
echo "Gitlab backup auto download at NAS, start at $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

#远程登录gitlab服务器并执行备份脚本,获取备份文件的名字
result=`ssh $RemoteServerUser@$RemoteServer "sh /home/scripts/gitlab_backup.sh"`

#远程下载备份文件到本地
scp $RemoteServerUser@$RemoteServer:$result $LocalBackDir

echo "Gitlab remote backup file is ${result}" >> $LogFile

# 备份结果追加到备份日志
if [ $? -eq 0 ];then
    echo ""
    echo "$(date +"%Y-%m-%d %H:%M:%S") Gitlab Remote download Succeed!" >> $LogFile
else
    echo "$(date +"%Y-%m-%d %H:%M:%S") Gitlab Remote download Failed!" >> $LogFile
fi
[root@gitlab ~]# vim auto_backup_to_remote.sh 
LocalBackDir=/var/opt/gitlab/backups  # gitlab备份文件目录
RemoteBackDir=/root/gitlab_backup     #  远程的备份目录
RemoteUser=root                       #  远程服务器用户
RemotePort=22                         #  远程服务器端口
RemoteIP=192.168.3.3                # 远程备份的服务器IP
DATE=`date +"%Y-%m-%d"`               # 输出当日时间
LogFile=$LocalBackDir/log/$DATE.log   # 日志文件
BACKUPFILE_SEND_TO_REMOTE=$(find /var/opt/gitlab/backups/ -type f -mmin -60  -name '*.tar*') # 找到gitlab 60分钟内备份生成的文件
touch $LogFile
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile
scp -P $RemotePort $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir
echo "---------------------------------------------------------------------------" >> $LogFile

以上是关于从零开始的Devops-定时备份的主要内容,如果未能解决你的问题,请参考以下文章

从零开始devops-分支合并流程对比

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始的Devops-通用服务平台解决方案思考

DEVOPS架构师 -- 05从零开始构建基于Kubernetes的DevOps平台