美文网首页
day33 Rsync服务及搭建备份服务器2

day33 Rsync服务及搭建备份服务器2

作者: 藏鋒1013 | 来源:发表于2019-04-18 15:13 被阅读0次

    实践排除复制:

    [root@nfs01~]# mkdir /data -p
    [root@nfs01~]# cd /data
    [root@nfs01/data]# touch {a..d}
    [root@nfs01/data]# ls
    a  b  c  d
    

    --exclude 排除参数
    举例:排除a b

        [root@nfs01/]# rsync -avz /data/ --exclude=a --exclude=b 
    rsync_backup@172.16.1.41::backup 
    sending incremental file list
    ./
    c
    d
    

    排除1-4:

    [root@nfs01/data]# touch {1..5}
    [root@nfs01/data]# rsync -avz /data/ --exclude={1..4} 
    rsync_backup@172.16.1.41::backup
    sending incremental file list
    ./
    5
    a
    b
    
    sent 229 bytes  received 84 bytes  29.81 bytes/sec
    total size is 0  speedup is 0.00
    

    排除1,3,a:

    [root@nfs01/data]# rsync -avz /data/ --exclude={1,3,a} 
    rsync_backup@172.16.1.41::backup
    sending incremental file list
    2
    4
    
    sent 200 bytes  received 62 bytes  47.64 bytes/sec
    total size is 0  speedup is 0.00
    

    --exclude-from 从文件排除:

    [root@nfs01/data]# rsync -avz /data/ --exclude-from=./paichu.txt 
    rsync_backup@172.16.1.41::backup
    sending incremental file list
    ./
    paichu.txt
    

    实践删除:
    rsync作为镜像,相当于raid1,让两台服务器目录保持一致。
    --delete 让两台服务器目录保持一致。
    推送:

    rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup
    本地目录有啥,远端就有啥。
    注意:远端目录是不是东西更多,多了东西会被删除。提前备份backup对应的目录。
    

    拉:

    rsync -avz --delete rsync_backup@172.16.1.41::backup:: /data/
    远端有啥,本地目录就有啥,注意本地/data目录。把/data改成根,提前备份本地/data.
    

    --partial 支持大文件断点续传
    --bwlimit=KBPS 限速。

    企业案例:

    某上市公司,白天高峰期某DBA人员从数据库服务器通过rsync将上百GB数据复制到备份服务器,导致数据库库服务器带宽占满,造成用户无法访问网站的悲剧。其实可以利用rsync限速功能,将复制速度限制在剩余带宽的1/3或者1/2,可能就不会出现故障了

    解答:

    方法一:

    其实可以利用rsync限速功能,将复制速度限制在剩余带宽的1/3或者2/3,可能就并不会出现故障了。

    rsync -avz /backup/ --bwlimit=10MB rsync backup@172.16.1.41::backup
    限速为10MB
    

    方法二:

    [root@backup/]# cat >>/etc/rsync.conf<<EOF
    > data
    > path+/bata/
    > EOF
    [root@backup/]# mkdir -p /data
    [root@backup/backup]#chown -R rsync.rsync /data
    [root@backup/backup]# ls -ld /data
    drwxr-xr-x 79 rsync rsync 8192 Apr 16 10:04 /data
    [root@backup/backup]# systemtcl restart rsync
    

    什么内容需要备份?

    1、内部人员产生的数据(定时备份足矣):

    程序人员开发代码(他电脑上)--->代码服务上(git/svn代码版本管理)--->测试环境测试--->正式环境
    原则上程序代码可以不备份
    运维人员,写个定时任务,写个备份脚本,更改或增加服务配置rsync。conf,需要备份

    2、用户产生的数据(必须实时备份)

    图片、视频等文件是放在存储服务器上的,任意时刻都可能传上来,必须实时备份。
    文本(博客文章),放在存储服务器上,任意时刻都可能发布,必须实时备份。

    项目实践:

    项目需求说明:

    某公司里有一台 web 服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求把数据做备份,这样 web 服务器数据丢失可以进行恢复。

    要求如下:

    每天晚上 00 点整在 web 服务器 A 上打包备份系统配置文件、网站程序目录及访问日志并通过 rsync 命令推送到服务器 B 上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器 B 上)
    已知 3 台服务器主机名分别为 web01、backup 、nfs01。

    备份要求

    每天晚上 00 点整在 Web 服务器上打包备份系统配置文件、网站程序目录及访问日志并通过 rsync 命令推送备份服务器 backup 上备份保留。

    备份保留

    可以是先在本地按日期打包,然后再推到备份服务器 backup 上;NFS 存储服务器同 Web 服务器实际工作中就是运维主要管理的全部服务器。

    具体备份需求

     所有服务器的备份目录必须都为/backup
     要备份的系统配置文件包括但不限于:
    a) 定时任务服务的配置文件 (/var/spool/cron/root) (适合 web 和 nfs 服
    务器)。
    b) 开机自启动的配置文件 (/etc/rc.local) (适合 web 和 nfs 服务器)。
    c) 日常脚本的目录 (/server/scripts)。
     Web 服务器站点目录假定为/var/html/www,如果没有可以先模拟创建。
     Web 服务器访问日志路径假定为/app/logs,如果没有可以先模拟创建。
     Web 服务器本地保留打包后的 7 天备份数据即可(本地留存不能多于 7 天,
    因为太多硬盘会满) 。
     备份服务器 backup 上,保留最近 7 天的备份数据,同时保留 6 个月内每周一
    的所有数据副本。
     备份服务器上,要按照备份数据服务器的内网 IP 为目录保存备份,备份的文
    件按照时间名字保存。
     需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据是否完整
    进行检查。
     每天早晨 8:00 把备份成功或失败结果信息发给系统管理员邮箱中。

    服务器备份信息汇总

    解答:

    一、搭建环境、备份

    搭建好rsync服务,三台服务器全部搭建,并测试成功。

    二、开发脚本打包备份

    /backup 备份目录
    /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs 需要备份的内容
    

    三、模拟环境

    web01:
    [root@web01 ~]# mkdir -p /server/scripts /var/html/www /app/log 
    [root@web01 ~]# mkdir -p /backup
    [root@web01 ~]# ls -ld /backup/
    drwxr-xr-x 2 root root 6 4月  16 11:36 /backup/
    
    [root@web01 /]# tar zcvhf /backup/bak_$(date +%F_%w).tar.gz 
    /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs #------>打包备份
    tar: 从成员名中删除开头的“/”
    /var/spool/cron/root
    /etc/rc.local
    /server/scripts/
    /var/html/www/
    /app/logs/
    [root@web01 /]# ls /backup/
    bak_2019-04-16_2.tar.gz
    

    四、写脚本:

    [root@web01 /]# cd /server/scripts/  #------>移动到/server/scripts
    [root@web01 /server/scripts]# cat  /server/scripts/bak.sh 
    [root@web01 /server/scripts]# cat bak.sh 
    #!/bin/sh
    export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"#------>定义环境变量
    export RSYNC_PASSWORD=oldboy#------>重新定义客户端密码认证文件
    IP=$(ifconfig eth1|awk 'NR==2{print $2}')#------>给IP地址赋值
    mkdir -p /backup/$IP#------>创建以IP为名字的目录
    #1.打包
    tar zcf /backup/$IP/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null &&\
    #2.删除
    find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\ #----->查找七天以前、以'.tag.gz'结尾的文件,找到并删除。
    #3.推送
    ysrnc -az /backup/ rsync_backup172.16.1.41::backup &>/dev/null
    
    [root@web01 /server/scripts]# /bin/sh /server/scripts/bak.sh #------>执行一下脚本
    [root@web01 /server/scripts]# ls /backup/#------>查看数否有文件
    bak_2019-04-16_2.tar.gz  #------>执行成功
    

    五、将脚本添加到定时任务中:

    [root@web01 /server/scripts]# crontab -l|tail -2
    #注释
    00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
    
    [root@web01 /server/scripts]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f#----->查找七天以前、以'.tag.gz'结尾的文件,找到并删除。
    

    六、确保备份完整(nfs服务器中)

    [root@nfs01 /]# cd /server/scripts/                <==切到脚本目录下
    [root@nfs01 /server/scripts]# vim mysql.sh            <==编辑脚本
    #!/bin/sh
    export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"   <==定义环境变量
    export RSYNC_PASSWORD=oldboy                    <==重新定时客户端密码认证文件                 
    IP=$(hostname -i)                                    <==给IP地址赋值
    mkdir -p /backup/$IP                                  <==创建以IP为名字的目录
    ##采集指纹
    find /backup/$IP -type f -name "*.tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\                            <==采集需要备份的已经打包的文件的指纹
    ##删除
    find /backup/$IP -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\   <==删除本地7天以   前的所有文件
    ##推送
    rsync -az /backup/$IP rsync_backup@172.16.1.41::backup &>/dev/null <==推送到备份服务器
    [root@nfs01 /]# /bin/sh /server/scripts/mysql.sh       <==执行脚本
    [root@backup /]# cd /backup/                     <==切换到backup服务器查看内容
    [root@backup /backup]# ll
    总用量 0
    drwxr-xr-x 2 rsync rsync 90 4月  16 14:45 172.16.1.31
    [root@nfs01 /]# crontab -e              <==编辑定时任务
    ##备份
    00 00 * * * /bin/sh /server/scripts/mysql.sh >/dev/null 2>&1
    [root@nfs01 /]# crontab -l              <==查看定时任务
    ##备份
    00 00 * * * /bin/sh /server/scripts/mysql.sh >/dev/null 2>&1
    

    七、在backup服务器中编写脚本

    [root@backup /backup]# cd /
    [root@backup /]# cd /server/scripts/
    [root@backup /server/scripts]# vim back.sh
    #!/bin/sh
    find /backup/ -type f -name "*.tar.gz" -mtime +180|xargs rm -f &&\
    find /backup/ -type f ! -name "*_1.tar.gz" -mtime +7|xargs rm -f &&\
    find /backup/ -type f ! -name "*_1.flag" -mtime +7|xargs rm -f &&\
    find /backup/ -type f -name "bak_*.flag"|xargs md5sum -c|xargs >/tmp/mail &&\
    mail -s "test" 1620228027@qq.com </tmp/mail
    [root@backup /]# /bin/sh /server/scripts/back.sh
    [root@backup /]# crontab -e
    #校验并发送报警邮件
    00 00 * * * /bin/sh /server/scripts/back.sh >/dev/null 2>&1
    [root@backup /]# crontab -l
    #校验并发送报警邮件
    00 00 * * * /bin/sh /server/scripts/back.sh >/dev/null 2>&1
    

    八、开启邮件,在/etc/mail.rc中添加配置文件

    set from=MY44556677@163.com smtp=smtp.163.com smtp-auth-user=MY44556677 smtp-auth-password=FTGVYUHBULIU3 smtp-auth=login
    #set form 是发送邮件的地址(自己注册)
    #smtp 是外部smtp服务器
    #smtp-auth-user 是外部smtp服务器认证的用户名
    #password 是smtp服务器认证的授权码
    [root@backup ~]# systemctl stop postfix.service    <==关闭服务
    [root@backup ~]# systemctl start postfix.service    <==开启服务
    [root@backup ~]# systemctl restart postfix.service   <==重新启动服务
    [root@backup ~]# systemctl enable postfix.service    <==开机自启动
    

    九、执行脚本

    [root@backup/backup]# mail -s "test" 1726587136@qq.com </server/scripts/
    ###十、收到邮件,执行成功
    

    rsync服务端常见报错整理

    服务端常见错误一:服务端无共享目录

    相关文章

      网友评论

          本文标题:day33 Rsync服务及搭建备份服务器2

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