zoukankan      html  css  js  c++  java
  • 2-Rsync备份-全网备份

    客户端需求
      1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
      2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
      3.客户端最后将备份的数据进行推送至备份服务器
      4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
      5.客户端每天凌晨1点定时执行该脚本

    服务端需求
      1.服务端部署rsync,用于接收客户端推送过来的备份数据
      2.服务端需要每天校验客户端推送过来的数据是否完整
      3.服务端需要每天校验的结果通知给管理员
      4.服务端仅保留6个月的备份数据,其余的全部删除

      注意:所有服务器的备份目录必须都为/backup
       建议备份的数据内容如下
       /etc/rc.local /etc/fstab /etc/hosts
       /var/spool/cron/ /etc/firewalld /server/scripts

    准备3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

    一,客户端需求

    1. 客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

    2. 客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

    3. 客户端最后将备份的数据进行推送至备份服务器

    4. 客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

    5. 客户端每天凌晨1点定时执行该脚本
        1.我要备份什么?
      /etc/rc.local /etc/fstab /etc/hosts /var/spool/cron/ /etc/firewalld /server/scripts
        2.我要备份到哪里?
      /backup目录
      该主机的主机名称_该主机的IP地址_今天的日期
        3.我要推送到哪儿?
      备份服务器 172.16.1.41 backup模块

    写命令-->执行成功在粘贴进脚本

    1. 我们要准备一个目录
    [root@nfs ~]# mkdir -p "/backup/((hostname)_)(ifconfig eth1 | awk '/inet / {print (2}')_)(date +%F)"
    2. 将文件备份到该目录中
    [root@nfs ~]# cp -r /etc/rc.local /etc/fstab /etc/hosts /backup/nfs_172.16.1.31_2020-04-15/
    3. 使用rsync命令进行运输
    [root@nfs ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup
    4. 保留最近7天
    [root@nfs ~]# for i in {1..30};do date -s 2020/04/$i && sh /scripts/clinet_push_data.sh ;done #测试拿来用就OK
    [root@nfs ~]# find /backup -type d -mtime +7 | xargs rm -rf
    5. 编写定时任务
    [root@nfs backup]# crontab -l
     00 01 * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null

    脚本编写:

    (将手动执行成功的1 2 3 4 5 写成一个脚本)

     [root@nfs ]# vim /scripts/clinet_push_data.sh  
     #!/usr/bin/bash
     # 客户端推送备份的数据至备份服务器   by oldxu
     #0.将目录需要用的主机名,IP,时间,定义为变量
      export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin  ( echo $PATH 粘贴-》申明命令执行的路径)
      Host=$(hostname)
      Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
     Time=$(date +%F)
      Path=/backup
      DirName="${Host}_${Addr}_${Time}"
     固定的字符=不确定的值 ---------->>> 变量的使用让所有的调用可以变得灵活------->>>可以其他的机器也能运行达到同样的效果
          
     #1.我们要准备一个目录
      mkdir -p  "$Path/$DirName"
    
     #2.将文件备份到该目录中
    cp -r /etc/rc.local /etc/fstab  /etc/hosts    $Path/$DirName
    
     #3.使用rsync命令进行运输(脚本中免密操作)
    export RSYNC_PASSWORD=123456
     rsync -avz $Path/ rsync_backup@172.16.1.41::backup
    
     #4.保留本地7天的数据
     find $Path  -type d -mtime +7  | xargs rm -rf
    
    ==注意给权限:chmod +x   /scripts/clinet_push_data.sh== 
    
     5.配置定时任务,定时执脚本
     测试------》sh     /scripts/clinet_push_data.sh 
    

    二,服务端需求

    (别忘了ntpdate time.windows.com #同步服务器时间)
      1. 服务端部署rsync,用于接收客户端推送过来的备份数据(细节见上一节内容)
      2. 服务端需要每天校验客户端推送过来的数据是否完整—————>>>查看封条有没有破损
       客户端脚本修改————>>>(将散货 --> 打包 --> 贴上封条 --> 推送给服务端)
        md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。
       md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。
       在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

      4. 服务端仅保留6个月的备份数据,其余的全部删除
        流程图
    将散货 --> 打包 --> 贴上封条 --> 推送给服务端

    (0.修改客户端推送数据脚本)

    [root@nfs ~]# vim /scripts/clinet_push_data.sh

    #!/usr/bin/bash
    # 客户端推送备份的数据至备份服务器   by oldxu
    #0.将目录需要用的主机名,IP,时间,定义为变量
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    Host=$(hostname)
    Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
    Time=$(date +%F)
    Path=/backup
    DirName="${Host}_${Addr}_${Time}"
    
    1.我们要准备一个目录
    mkdir -p  "$Path/$DirName"
    2.将文件备份到该目录中
    cd / && 
    tar czf $Path/$DirName/sys.tar.gz etc/rc.local etc/fstab && 
    tar czf $Path/$DirName/other.tar.gz etc/hosts && 
    md5sum  $Path/$DirName/*.tar.gz > $Path/$DirName/check_flag_$Time
    
    #3.使用rsync命令进行运输
    export RSYNC_PASSWORD=123456
    rsync -avz $Path/ rsync_backup@172.16.1.41::backup
    
    #4.保留本地7天的数据
    find $Path  -type d -mtime +7  | xargs rm -rf
    

    反斜杠一般用作转义字符,或称逃脱字符,Linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
    echo -e " "
    反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,Shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。

    1.服务端校验脚本:

    根据客户端推送的封条 --> 校验数据是否一致,最后通知管理员。
    [root@backup ~]# cat /scripts/check_clinet_data.sh

    #!/usr/bin/bash
    # 检查客户端推送的数据   by oldxu
    #0.将目录需要用的主机名,IP,时间,定义为变量
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    Time=$(date +%F)
    Path=/backup
    
    #1.找到当天的check_flag文件,校验数据是否是完整的,并且将校验结果存储至某个文件中
    find $Path/ -type f -name "check_flag_$Time" | xargs md5sum -c > $Path/result_$Time
    
    #3.将校验的结果通知给管理人员
    mail -s "Rsync Backup $Time" #收件人邮箱 <$Path/result_$Time
    
    #4.服务端仅保留6个月的备份数据,其余的全部删除
    find $Path  -type d -mtime +180  | xargs rm -rf
    

    2.配置发件人邮箱账号密码:

    [root@backup ~]# vim /etc/mail.rc
    set from=simba777qq.com
    set smtp=smtps://smtp.qq.com:465
    set smtp-auth-user=simba777@qq.com
    set smtp-auth-password=#复制客户端授权码
    set smtp-auth=login
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb/

    3.配置定时任务

    [root@nfs backup]# crontab -l

    backup

    00 01 * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null

    ps:客户端# 第2步,打包后贴封条脚本如何写

     贴上封条--》》》check_flag (校验文件)
    

    查看一下

    服务端# 根据check_flag校验文件是否完整-《------写到脚本中去

    如何快速备份一台新的机器?
      [root@web01 ~]# rsync -avz 172.16.1.31:/scripts /
    接下来完整的测试一把,测试完成后,需要将时间修改为对应的真实时间。
    nfs、web:

    [root@nfs ~]# crontab -l
    * * * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null
    backup:
    [root@backup ~]# crontab -l
    */2 * * * * /usr/bin/sh /scripts/check_clinet_data.sh &>/dev/null
    

    疑难杂症:

    1.vim 是可以直接可以新建一个脚本文件的 但是如果你连你写的路径都没有的话 可能会报错不能保存

    2.备份时显示权限不足----->>>查看服务端权限 ,属组属组,rysnc是否启动。

    mkdir /backup
    chmod 600 /etc/rsync.passwd
    systemctl start rsyncd
    

    3.收不到邮件怎么办?
       1看看配置文件的邮箱地址
       2有没有安装mailx
    4.校验失败
     1校验脚本写错了
     2查看时间是是否相符合
    nfs:
      ntpdate time.windows.com 同步时间
      date -s 2020-xx-xx 修改时间

  • 相关阅读:
    int 和 Integer 有什么区别?
    内部类可以引用它的外部类的成员吗?有没有什么限制?
    为什么Java不支持运算符重载?
    生命周期内create和mounted的区别?
    JSP有哪些动作?分别是什么?
    vue解除双向绑定?
    实现一个函数功能:sum(1,2,3,4..n)转化为 sum(1)(2)(3)(4)…(n)?
    新旧生命周期?
    vue异步组件?
    XML文档约束有哪几种?有什么区别?
  • 原文地址:https://www.cnblogs.com/hypj/p/13170072.html
Copyright © 2011-2022 走看看