zoukankan      html  css  js  c++  java
  • 第三章 Rsync备份案例

    一、rsync备份模式

    1.本地方式
    2.远程方式
    3.守护进程模式
    

    1.守护进程模式

    1)安装rsync

    yum install -y rsync
    

    2)配置rsync

    [root@backup /backup]# vim /etc/rsyncd.conf
    uid = rsync
    gid = rsync
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = welcome to oldboyedu backup!
    path = /backup
    

    3)创建用户

    useradd rsync -s /sbin/nologin -M
    

    4)创建虚拟用户的密码文件

    echo "rsync_backup:123456" > /etc/rsync.passwd
    
    chmod 600 /etc/rsync.passwd
    

    5)创建文件目录

    mkdir /backup
    
    chown -R rsync.rsync /backup
    

    6)启动服务

    [root@backup ~]# systemctl start rsyncd
    

    7)验证

    [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
    [root@web01 ~]# rsync -avz file1 rsync_backup@172.16.1.41::backup
    

    2.守护进程模式语法

    1)pull拉取数据命令

    #语法
    rsync [OPTION...] [USER@]HOST::SRC... [DEST]
    
    #示例:
    1.拉取rsync备份服务的"backup模块"数据至本地/mnt目录
    [root@nfs01 ~]# rsync -avz rsync_backup@192.172.16.1.41::backup /mnt/
    rsync             #命令
    -avz		     #选项
    rsync_backup      #远程主机用户(虚拟用户)
    192.172.16.1.41   #远程主机地址  
    ::backup          #远程主机模块(不是目录)
    /mnt/	          #将远程主机数据备份至本地什么位置     
    
    #注意:
    如果是拉取数据,远端服务器源数据目录权限可以为任意权限
    

    2)push推送数据命令

    #语法
    rsync [OPTION...] SRC... [USER@]HOST::DEST
    
    #示例
    1.将本地/mnt目录推送至rsync备份服务器的backup模块
    [root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup
    rsync             #命令
    -avz		     #选项
    /mnt/			 #本地文件
    rsync_backup      #远程主机用户(虚拟用户)
    192.172.16.1.41   #远程主机地址  
    ::backup          #远程主机模块(不是目录)
    
    #注意:
    如果是推送数据,远端接收文件的目录权限必须是rsync权限
    

    3.rsync命令选项

    1)常用选项

    -a           #归档模式传输, 等于-tropgDl    -t -r -o -p -g -D -l
    -v           #详细模式输出, 打印速率, 文件数量等
    -z           #传输时进行压缩以提高效率
    -r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
    -t           #保持文件时间信息
    -o           #保持文件属主信息
    -p           #保持文件权限
    -g           #保持文件属组信息
    -l           #保留软连接
    -P           #显示同步的过程及传输时的进度等信息
    
    -D           #保持设备文件信息
    -L           #保留软连接指向的目标文件
    -e           #使用的信道协议,指定替代rsh的shell程序
    
    --exclude=PATTERN   #指定排除不需要传输的文件模式
    --exclude-from=file #文件名所在的目录文件
    --partial           #断点续传
    --password-file=xxx #使用密码文件
    

    2)限速演示

    --bwlimit=100kb       #限速传输单位默认是kb (不用z选项)
    
    [root@web01 /tmp]# rsync -avP --bwlimit 100 /tmp/ rsync_backup@172.16.1.41::backup
    sending incremental file list
    ./
    data.txt
          5,537,792   1%  100.04kB/s
    

    3)数据一致

    --delete            #让目标目录和源目录数据保持一致(不用*)放前后皆可
    
    #推:数据与推送数据的源数据一致
    [root@web01 /tmp]# rsync -avP --delete /tmp/ rsync_backup@172.16.1.41::backup
    sending incremental file list
    deleting file2
    deleting file1
    
    sent 223 bytes  received 43 bytes  532.00 bytes/sec
    total size is 0  speedup is 0.00
    
    #推:数据与拉取数据的源数据一致
    [root@web01 /tmp]# rsync -a -v -P rsync_backup@172.16.1.41::backup /tmp --delete
    receiving incremental file list
    deleting file4
    deleting file3
    ./
    sent 32 bytes  received 203 bytes  470.00 bytes/sec
    

    二、Rsync备份案例

    1.需求

    #客户端需求
    1.客户端提前准备存放的备份的目录,目录规则如下:/backup/主机_IP_时间
    2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/主机_IP_时间
    3.客户端最后将备份的数据进行推送至备份服务器
    4.客户端每天凌晨1点定时执行该脚本
    5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
    
    #服务端需求
    1.服务端部署rsync,用于接收客户端推送过来的备份数据
    2.服务端需要每天校验客户端推送过来的数据是否完整
    3.服务端需要每天校验的结果通知给管理员
    4.服务端仅保留6个月的备份数据,其余的全部删除
    

    2.准备服务器

    主机 内网IP
    web01 172.16.1.7
    backup 172.16.1.41

    3.客户端

    1)创建备份目录

    #备份目录格式
    /backup/web01_172.16.1.31_2018-09-02
    
    #取主机名
    [root@web01 ~]# hostname
    web01
    
    #取IP
    [root@web01 ~]# ifconfig eth1 | awk 'NR==2 {print $2}'
    172.16.1.7
    [root@web01 ~]# hostname -I | awk '{print $2}'
    172.16.1.7
    
    #取时间
    [root@web01 ~]# date +%F
    2020-08-12
    
    #创建目录
    [root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`
    

    2)打包

    [root@web01 ~]# cd /backup/web01_172.16.1.7_2020-08-12/
    
    [root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
    

    3)推送数据

    [root@web01 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-12 rsync_backup@172.16.1.41::backup
    sending incremental file list
    web01_172.16.1.7_2020-08-12/
    web01_172.16.1.7_2020-08-12/conf.tar.gz
    
    sent 62,567 bytes  received 47 bytes  125,228.00 bytes/sec
    total size is 68,669  speedup is 1.10
    

    4)将以上内容写成脚本

    [root@web01 ~]# mkdir /scripts
    [root@web01 ~]# vim /scripts/backup.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}
    
    #1.创建目录
    mkdir -p $DIR
    
    #2.进到目录下并打包文件
    cd $DIR
    tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
    
    #3.推送
    export RSYNC_PASSWORD=123456
    rsync -avz $DIR rsync_backup@172.16.1.41::backup
    

    5)写入定时任务

    [root@web01 ~]# crontab -e
    #每天凌晨1点进行文件备份
    00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null
    

    6)清理数据

    #模拟生成一个月数据
    [root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done
    
    #只保留七天的文件
    [root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf
    [root@web01 ~]# ll /backup/
    total 0
    drwxr-xr-x 2 root root 25 Aug 23 00:00 web01_172.16.1.7_2020-08-23
    drwxr-xr-x 2 root root 25 Aug 24 00:00 web01_172.16.1.7_2020-08-24
    drwxr-xr-x 2 root root 25 Aug 25 00:00 web01_172.16.1.7_2020-08-25
    drwxr-xr-x 2 root root 25 Aug 26 00:00 web01_172.16.1.7_2020-08-26
    drwxr-xr-x 2 root root 25 Aug 27 00:00 web01_172.16.1.7_2020-08-27
    drwxr-xr-x 2 root root 25 Aug 28 00:00 web01_172.16.1.7_2020-08-28
    drwxr-xr-x 2 root root 25 Aug 29 00:00 web01_172.16.1.7_2020-08-29
    drwxr-xr-x 2 root root 25 Aug 30 00:00 web01_172.16.1.7_2020-08-30
    

    7)完善脚本

    [root@web01 ~]# vim /scripts/backup.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}
    
    #1.创建目录
    mkdir -p $DIR
    
    #2.进到目录下并打包文件
    cd $DIR
    tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
    
    #3.对文件生成验证文件
    md5sum $DIR/conf.tar.gz > $DIR/check.md5
    
    #4.推送
    export RSYNC_PASSWORD=123456
    rsync -avz $DIR rsync_backup@172.16.1.41::backup
    
    #5.清理数据
    find $SRC -type d -mtime +7 | xargs rm -rf
    

    4.服务端

    1)安装邮件系统

    [root@backup ~]# yum install -y mailx
    
    #编辑邮件系统
    [root@backup ~]# vim /etc/mail.rc 
    set from=xxx@qq.com
    set smtp=smtps://smtp.qq.com:465
    set smtp-auth-user=xxx@qq.com
    set smtp-auth-password=授权码
    set smtp-auth=login
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb/
    

    2)脚本

    [root@web01 ~]# vim /scripts/auth.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}
    
    #1.验证文件的完整性sha1sum(1)
    md5sum -c $DIR/check.md5 > $SRC/result.txt
    md5sum -c /backup/*_`date +%F`/check.md5 >> /backup/result.txt
    
    #2.把验证结果发送到QQ
    mail -s "备份数据完整性" 1240206455@qq.com < $SRC/result.txt
    
    #3.清理数据
    find $SRC -type d -mtime +180 | xargs rm -rf
    

    三、Rsync结合inotify实现实时备份

    1.安装

    [root@web01 ~]# yum -y install inotify-tools
    

    2.命令测试

    [root@web01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write  /backup
    

    3.参数详解

    -m 持续监控
    -r 递归
    -q 静默,仅打印时间信息
    --timefmt 指定输出时间格式
    --format 指定事件输出格式
        %Xe 事件
        %w 目录
        %f 文件
    -e 指定监控的事件
        access 访问
        modify 内容修改
        attrib 属性修改
        close_write 修改真实文件内容
        open 打开
        create 创建
        delete 删除
        umount 卸载
    

    4.实时监控脚本

    1)粗糙版

    [root@web01 /backup]# vim /scripts/rsync_inotify.sh 
    #!/bin/bash
    dir=/backup
    /usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
        cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.41::backup --password-file=/etc/rsyncd.password >/dev/null 2>&1
    done  &
    
  • 相关阅读:
    ContextLoaderListener作用详解
    Spring启动流程
    解决filter拦截request中body内容后,字符流关闭,无法传到controller的问题
    Spring拦截器从Request中获取Json格式的数据
    Filter和Interceptor的终归作用还是从入口修改或验证请求进来的数据
    HttpServletRequest常用获取URL的方法
    Spark1.0.0 监测方法
    nginx代理人server结合tomcat采用
    Guangsoushensou 2
    admob广告开始个人资料网址
  • 原文地址:https://www.cnblogs.com/xuexiaosong/p/13516883.html
Copyright © 2011-2022 走看看