美文网首页
GitLab 远程 定时备份

GitLab 远程 定时备份

作者: 觉释 | 来源:发表于2021-05-25 14:21 被阅读0次

    一、环境准备

    1.gitlab所在的服务器A(centos7,192.168.1.1)
    2.备份服务器B(centos7,192.168.1.2)
    3.gitlab本地备份目录设置为/var/opt/gitlab/backups/log,本篇也是以此展开
    gitlab已经配置了本地备份。如果没有配置,可以参考http://www.cnblogs.com/straycats/p/7671204.html


    二、通过密钥配对取消scp传输密码的限制
    手动备份数据费时费力。最好的方法就是通过脚本实现远程自动备份。但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码。

    为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用 rsync,scp,rexec等命令来做的远程备份了。

    2.1 生成密钥对

    假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码。那我们可按照下面的步骤来做:

    ** 1)在gitlab服务器A上生成rsa证书 **

    ssh-keygen -t rsa
    

    1、生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。
    2、因为之前已经有/root/.ssh/id_rsa 文件存在,因此提示你是否覆盖,输入y表示覆盖
    3、接着会提示输入一个密码,直接回车,让它空着。当然,也可以输入一个密码。
    4、接着输入确认密码,输入完之后,回车密钥对就生成完了。

    这样,在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。

    ** 2)在gitlab服务器A上cp生成rsa公钥证书 **

    在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到远程服务器B。

    cd /root/.ssh
    cp id_rsa.pub id_rsa.pub.A
    

    2.2 生成rsa公钥证书上传到备份服务器B

    先在服务器B上创建目录/root/.ssh。

    mkdir -p /root/.ssh
    

    使用scp命令进行远程复制,将服务器A生成的id_rsa.pub.A拷贝到服务器B的/root/.ssh目录下。

    scp /root/.ssh/id_rsa.pub.A root@192.168.1.2:/root/.ssh/
    

    此时使用scp命令需要输入密码,当把下面的“2.3 密钥配对”执行后,以后gitlab服务器A使用scp命令复制文件到备份服务器B的话,就不需要输入密码了。

    2.3 密钥配对

    1)创建authorized_keys文件

    在备份服务器B的/root/.ssh下创建authorized_keys文件。

    touch /root/.ssh/authorized keys
    

    2)将id_rsa.pub.A文件内容追加到authorized_keys 文件中

    通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中。

    cd /root/.ssh/
    cat id_rsa.pub.A >> authorized_keys
    

    3)修改authorized_keys文件的权限

    authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。

    chmod 400 authorized_keys
    

    4)测试上传文件是否还要输入密码

    不放心的话,立刻测试下gitlab服务器A使用scp命令复制文件到备份服务器B是否还要输入密码。

    scp /root/.ssh/id_rsa.pub.A root@192.168.1.2:/root/.ssh/
    

    发现在2.3之前,由于没有设置ssh证书授权认证时,上传需要输入密码;2.3操作完后,由于授权认证,已经不需要输入密码了。


    三、定时将备份文件传到备份服务器

    3.1 创建远程备份脚本

    在gitlab服务器A上,在/root目录下创建定期备份脚本auto_backup_to_remote.sh。

    vim /root/auto_backup_to_remote.sh
    

    添加下面的内容,并wq保存。

    #!/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
    

    3.2 修改远程备份脚本auto_backup_to_remote.sh的权限

    要能让系统执行auto_backup_to_remote.sh,必须修改该脚本的权限。

    chmod 777 auto_backup_to_remote.sh
    

    3.3 创建日志存放目录

    mkdir -p /var/opt/gitlab/backups/log
    

    3.4 测试远程备份脚本的功能是否可用

    现在为了验证脚本是否可以正常运行,我们需要手动执行脚本。

    在gitlab服务器A上执行find命令,看是否能够正常查找出我们要scp到远程服务器的Gitlab备份文件。

    find /var/opt/gitlab/backups/log -type f -mmin -60  -name '*.tar*'
    

    手动执行脚本auto_backup_to_remote.sh,看是否能够正常上传

    cd
    
    ./auto_backup_to_remote.sh
    

    等待1-2分钟左右,查看备份服务器B的目录/root/gitlab_backup下是否有服务器A传过来的备份文件。

    在备份服务器B上能找到服务器A传过来的备份文件,说明远程备份脚本的功能OK。

    如果每次上传都通过人工运行脚本的方式,人工的消耗太大,接着配置定时执行该脚本。

    3.5 添加定时计划

    定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。

    一般添加定时计划可以有2种方式:

    1.使用命令crontab -e,将定时任务添加后保存。

    2.将定时任务添加到/etc/crontab文件中。

    我这里采取第一种,使用crontab -e。

    crontab -e
    

    结合我之前对公司gitlab本地备份的设计,故设计在备份完10分钟后上传,故分别在每天12:10、19:10进行备份,故添加下面的内容,wq保存。

    10 12 * * * /root/auto_backup_to_remote.sh -D 1
    10 19 * * * /root/auto_backup_to_remote.sh -D 1
    

    重启crontab

    systemctl restart crond
    

    四、定时删除备份服务器上的备份文件

    每个Gitlab备份文件都很大。因此每天备份两次,过不了多久的话,备份服务器B上的磁盘空间可能就会被Gitlab备份文件占用完。

    故需要定期清理备份文件,参考备份服务器的空间,暂定保留14天的备份文件。

    4.1 创建删除过期备份文件的脚本

    设计备份服务器B的/root/gitlab_backup作为接收远程上传备份文件的目录,故在备份服务器B上,先创建该目录。

    mkdir -p /root/gitlab_backup
    

    创建删除过期备份文件的脚本auto_remove_old_backup.sh。

    vim /root/auto_remove_old_backup.sh
    

    添加下面的内容,并wq保存。

    #!/bin/bash
    
    # 远程备份服务器 gitlab备份文件存放路径
    GitlabBackDir=/root/gitlab_backup
    
    # 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
    find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;
    

    4.2 修改auto_remove_old_backup.sh脚本的权限

    chmod 777 auto_remove_old_backup.sh
    

    4.3 添加定时计划

    定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。

    一般添加定时计划可以有2种方式:

    1.使用命令crontab -e,将定时任务添加后保存。

    2.将定时任务添加到/etc/crontab文件中。

    我这里采取第一种,使用crontab -e。

    crontab -e
    

    设计凌晨0点执行删除过期备份文件的脚本,故添加下面的内容,wq保存。

    0 0 * * *  /root/auto_remove_old_backup.sh
    

    重启crontab

    systemctl restart crond
    

    原文地址:http://www.cnblogs.com/straycats/p/7672692.html#

    相关文章

      网友评论

          本文标题:GitLab 远程 定时备份

          本文链接:https://www.haomeiwen.com/subject/teaqsltx.html