美文网首页linux tools
day36-rsync全网备份项目

day36-rsync全网备份项目

作者: 别人放弃我坚持 | 来源:发表于2019-05-21 22:38 被阅读22次
    全网备份项目.png
    image.png

    企业案例

    某公司里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:

    每天晚上12点整在Web服务器A(web01 )上打包备份网站程序目录并通过rsync命令推送到服务器B(backup)上备份保留
    (备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。

    具体要求如下:

    1)Web服务器A和备份服务器B的备份目录必须都为/backup。 #扩展要求/backup/ip地址命名目录中
    2)Web服务器站点目录假定为(/var/www/html)。
    3)Web服务器本地仅保留7天内的备份。
    4)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。
    5)备份服务器上检查备份结果是否正常(备份内容变?),并将每天的备份结果发给管理员信箱。

    这些要求都是运维自己写出来的,实际工作中,老大可能就说一句,把服务器数据备份下。

    环境准备

    准备两台设备

    web01 10.0.0.7
    backup 10.0.0.41

    rsync服务端(backup)

    1、检查用户

    [root@backup ~]# id rsync
    uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
    

    2.共享目录权限

    [root@backup ~]# ll -d /backup
    drwxr-xr-x 8 rsync rsync 230 May 21 17:36 /back
    

    3.密码文件和权限

    [root@backup ~]# ll /etc/rsync.password
    -rw------- 1 root root 20 May 20 19:52 /etc/rsync.password
    

    4.配置文件添加模块

    省略若干
    [backup]
    comment = www by old0boy 14:18 2012-1-13
    path = /backup
    

    5.设置启动和开机自启

    [root@backup ~]# systemctl start rsyncd  #开启服务
    [root@backup ~]# systemctl enable  rsyncd  #设置开机自启动
    [root@backup ~]# systemctl is-active  rsyncd  #检查是否在运行
    active
    [root@backup ~]# systemctl is-enable  rsyncd  #检查是否开机自启动
    enable
    

    6。本地测试服务是否可以正常使用

    [root@backup ~]# touch /oldboy/oldboy{01..3}.txt
    [root@backup ~]# rsync -avz /oldboy 172.16.1.41:/tmp
    [root@backup ~]# tree /tmp
    /tmp
    └── oldboy
        ├── oldboy01.txt
        ├── oldboy02.txt
        ├── oldboy03.txt
        ├── oldboy04.txt
        ├── oldboy05.txt
        ├── oldboy06.txt
        ├── oldboy07.txt
        ├── oldboy08.txt
        ├── oldboy09.txt
        └── oldboy10.txt
    

    本地测试正常

    rsync客户端(web01)

    1.密码文件和权限

    [root@web01 ~]# echo 123456 >/etc/rsync.password
    [root@web01 ~]# cat /etc/rsync.password
    123456
    [root@web01 ~]# ll /etc/rsync.password
    -rw-r--r-- 1 root root 7 May 21 20:22 /etc/rsync.password
    [root@web01 ~]# chmod 600 /etc/rsync.password
    [root@web01 ~]# ll /etc/rsync.password
    -rw------- 1 root root 7 May 21 20:22 /etc/rsync.password
    

    2.测试是否可以向服务端推送数据

    客服端推送:
    [root@web01 ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    sending incremental file list
    hostname
    
    sent 101 bytes  received 43 bytes  288.00 bytes/sec
    total size is 6  speedup is 0.04
    服务端检查
    [root@backup ~]# ll /backup
    -rw-r--r-- 1 rsync rsync  6 May 20 21:42 hostname
    

    到这里如果可以传数据,就说明服务是正常的

    rsync客户端(web01)测试命令

    1.创建以IP命名的目录

    [root@web01 ~]# hostname -I|awk '{print $NF}'
    172.16.1.41
    [root@web01 ~]# IP=`hostname -I|awk '{print $NF}'`
    [root@web01 ~]# mkdir -p /backup/$IP
    [root@web01 ~]# tree /backup
    /backup
    └── 172.16.1.41
    
    1 directory, 0 files
    
    

    2.打包备份 /etc/ 和 /var/www/html 到/backup

    [root@web01 ~]# tar zcf /backup/172.16.1.7/html.`date +%F-%w`.tar.gz /etc/ /var/www/html/
    tar: Removing leading `/' from member names
    [root@web01 ~]# tree /backup
    /backup
    └── 172.16.1.7
        ├── html.2019-05-21-2.tar.gz
    
    

    3.制作md5sum指纹验证

    [root@web01 ~]# find /backup/ -type f -name '*.tar.gz'|xargs md5sum
    8388cdbf97ca4e5dedf6a0701720b93c  /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
    017f79c1bf3b1d131eb1c8991b082cfd  /backup/172.16.1.7/html.2019-05-21-2.tar.gz
    [root@web01 ~]# find /backup/ -type f -name '*.tar.gz'|xargs md5sum >/backup/172.16.1.7/web01.md5
    [root@web01 ~]# tree /backup/
    /backup/
    └── 172.16.1.7
        ├── html.2019-05-21-2.tar.gz
        └── web01.md5
    

    4.推送数据到服务端backup

    客户端发送
    [root@web01 ~]# rsync -avz /backup/  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    sending incremental file list
    ./
    172.16.1.7/
    172.16.1.7/conf-2019-05-21-2.tar.gz
    172.16.1.7/html.2019-05-21-2.tar.gz
    172.16.1.7/web01.md5
    
    sent 20,036,007 bytes  received 92 bytes  13,357,399.33 bytes/sec
    total size is 20,435,914  speedup is 1.02
    You have new mail in /var/spool/mail/root
    服务端检查
    [root@backup ~]# tree /backup
    /backup
    └── 172.16.1.7
        ├── html.2019-05-21-2.tar.gz
        └── web01.md5
    

    5.删除7 天之前的备份

    [root@backup ~]# find /backup/ -name '*.tar.gz' -mtime +7|xargs rm
    

    我先在没有7天之前的所以不会有结果

    rsync客户端(web01)书写为脚本

    [root@web01 /server/scripts]# vim bak-etc.sh
    #!/bin/bash
    
    #IP 
    IP=`hostname -I|awk '{print $NF}'`
    #hostnaem
    HOSTNAME=`hostname`
    #mkdir 
    mkdir -p /backup/$IP
    #tar
    tar zcf /backup/$IP/html.`date +%F-%w`.tar.gz /etc/ /var/www/html/
    #md5sum
    find /backup/ -type f -name '*.tar.gz'|xargs md5sum >/backup/$IP/$HOSTNAME.md5
    #rsync
    rsync -avz /backup/  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    #rm mtime +7
    #find /backup/ -name '*.tar.gz' -mtime +7|xargs rm
    

    rsync客户端(web01)进行脚本测试

    1.将客户端和服务端的/backup目录清空

    [root@web01 ~]# rm -rf /backup/*
    [root@web01 ~]# tree /backup
    /backup
    
    0 directories, 0 files
    [root@backup ~]# rm -rf /backup/*
    [root@backup ~]# tree /backup
    /backup
    
    0 directories, 0 files
    
    

    2.执行脚本进行测试

    web01进行推送
    [root@web01 /server/scripts]# sh /server/scripts/bak-etc.sh
    tar: Removing leading `/' from member names
    sending incremental file list
    172.16.1.7/
    172.16.1.7/html.2019-05-21-2.tar.gz
    172.16.1.7/web01.md5
    
    
    sent 10,018,088 bytes  received 73 bytes  20,036,322.00 bytes/sec
    total size is 10,217,957  speedup is 1.02
    backup进行检查
    [root@backup ~]# tree /backup
    /backup
    └── 172.16.1.7
        ├── html.2019-05-21-2.tar.gz
        └── web01.md5
    
    1 directory, 1 file
    [root@backup /server
    

    书写定时任务-先设置为每分钟进行测试

    [root@web01 ~]# crontab -l|tail -n2
    #back /backup/* --> backup server
    * * * * * sh /server/scripts/bak-etc.sh >/dev/null 2>&1
    backup客户端检查
    [root@backup ~]# rm -rf /backup/*
    [root@backup ~]# tree /backup
    /backup
    └── 172.16.1.7
        └── html.2019-05-21-2.tar.gz
        └── web01.md5
    
    1 directory, 1 file
    
    

    定时任务改为指定的时间

    [root@web01 ~]# crontab -l|tail -n2
    #back /backup/* --> backup server
    00 00 * * * sh /server/scripts/bak-etc.sh >/dev/null 2>&1
    

    到这里客户端的脚本就写好。如果脚本中有一些经常会被用到目录或文件。可以给他设置为变量,这样的话即使脚本给别的服务器用也基本上是通用的。

    rsync服务端(rsync)

    1.进行md5sum指纹库验证

    [root@backup ~]# md5sum -c /backup/*/*.md5
    /backup/172.16.1.7/html.2019-05-21-2.tar.gz: OK
    

    2.邮件提醒

    1.注册一个163的邮箱

    记得添加配置邮箱的授权码,不然邮箱会被屏蔽掉了

    2.保证 postfix 邮件服务运行

    [ root@backup ~]# systemctl restart postfix.service 
    [ root@backup ~]# systemctl is-active postfix.service 
    active
    [ root@backup ~]# systemctl is-enabled postfix.service 
    enabled
    

    3.配置邮件提醒

    [root@backup ~]# vim /etc/mail.rc   #邮件配置文件最后一行添加下面的
    set from=17682311347@163.com  smtp=smtp.163.com smtp-auth-user=17682311347 smtp-
    auth-password=oldboy123  smtp-auth=login
    "/etc/mail.rc" 70L, 2088C written                             
    [root@backup ~]# systemctl restart postfix.service  #重启服务
    [root@backup ~]# mail -s "test" 2468558247@qq.com </etc/hostname   #测试发送
    
    

    3.2收到邮件

    image.png
    3.3 md5sum验证结果邮件发送
    [root@backup ~]# md5sum -c  /backup/*/*.md5
    /backup/172.16.1.7/html.2019-05-21-2.tar.gz: OK
    [root@backup ~]# md5sum -c  /backup/*/*.md5 >/tmp/md5.log
    [root@backup ~]# mail -s "test" 2468558247@qq.com </tmp/md5.log
    

    删除180以前的保留周6的。

    find  /backup/ -type f  -name "*.tar.gz"  ! -name "*-6.tar.gz"  -mtime +180  |xargs rm
    

    编写脚本

    check.sh 
    #!/bin/bash
    
    #check
    md5sum -c  /backup/*/*.md5
    # find /backup/  -type  f -name "*.md5"|xargs md5sum -c
    #mail
    mail -s "holle linux word" 2468558247@qq.com </backup/md5.log
    #del 180 ago
    #find  /backup/ -type f  -name "*.tar.gz"  ! -name "*-6.tar.gz"  -mtime +180  |xargs rm
    

    写入定时任务,每分钟进行测试

    [root@backup ~]# crontab -l|tail -n2
    #rm 
    * * * * * sh /server/scripts/rm-etc.sh
    

    检查定时任务日志

    [root@backup ~]# tail -f /var/log/cron
    May 22 08:36:01 backup CROND[8180]: (root) CMD (sh /server/scripts/rm-etc.sh >/dev/null 2>&1
    )
    
    

    收到邮件

    image.png

    测试成功后修改为指定的时间

    [root@backup ~]# crontab -l|tail -n2
    #rm 
    00 00 * * * sh /server/scripts/rm-etc.sh
    

    相关文章

      网友评论

        本文标题:day36-rsync全网备份项目

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