zoukankan      html  css  js  c++  java
  • 【集群实战】Rsync试题-异机数据备份解决方案

    企业案例:Rsync上机实战考试题:

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

    要求如下:

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

    具体要求如下:

    1. Web服务器A和备份服务器B的备份必须都为/backup
    2. 系统配置文件包括但不限于:
      1. 定时开机服务的配置文件/var/spool/cron/root
      2. 开机自启动的配置文件/etc/rc.local
      3. 日常脚本的目录/server/scripts
      4. 防火墙iptables的配置文件/etc/sysconfig/iptables
      5. 更多的配置文件...
    3. Web服务器站点目录假定为/var/www/html
    4. Web服务器A的日志路径为/app/logs
    5. Web服务器本地仅保留7天内的备份。
    6. 备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。
    7. 备份服务器上每周六的数据都保留,其它备份仅保留180天备份。

    解答:

    思路,重点主要分三大部分:

    • 一部分是备份服务器的搭建;
    • Web服务器的本地打包脚本实现
    • 配置定时任务

    【备份服务器搭建】

    环境准备:

    备份服务器:192.168.0.41 backup

    web服务器:192.168.0.31 web01

    环境模拟:

    1. 【web服务器】假定web服务器的站点目录是/var/www/html,创建站点目录

    mkdir /var/www/html -p

    2. 【备份服务器】web服务器A和备份服务器B的备份都必须为/backup,部署rsync备份配置
    备份服务器B:

    rpm -qa rsync # 确认是否安装了rsync服务
    
    lsof -i :873 # 查看rsync服务是否运行
    
    rsync --daemon # 如过不运行,则运行rsync服务;若服务在运行中,则忽略

    3. 【备份服务器】vi /etc/rsyncd.conf # 对备份服务器端的rsync服务进行配置

    [root@backup-41 /]# cat /etc/rsyncd.conf
    # rsync_config____start
    # created by zoe 
    ## rsyncd.conf start ##
    
    uid = rsync
    gid = rsync
    
    use chroot = no
    
    max connections = 200
    
    timeout = 300
    
    pid file = /var/run/rsyncd.pid
    
    lock file = /var/run/rsync.lock
    
    log file = /var/log/rsyncd.log
    
    ######
    [backup]
    path = /backup/
    ignore errors
    read only = false
    list = false 
    hosts allow = 192.168.0.31/24
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.password## rsync_config____end ##

    4. 【备份服务器】根据配置内容:创建相应的目录和文件。
    4.1 创建rsync用户和用户组

    useradd -M -s /sbin/nologin rsync
    id rsync

    4.2 创建备份目录

    mkdir /backup -p

    4.3 更改备份目录的属主和属组

    chown -R rsync.rsync /backup

    4.4 创建/etc/rsync.password文件,创建虚拟用户rsync_backup的用户名和密码,用于服务器之间的socket通信连接;注意更改明文密码的文件权限

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

    【服务器Web端】

    1. 确认rsync服务存在,且在运行

    rpm -qa rsync
    
    lsof -i :873

    2. 创建备份目录

    mkdir /backup -p

    3. 创建/etc/rsync.password密码文件

    echo 123456> /etc/rsync.password
    
    chmod 600 /etc/rsync.password

    ======= 备份服务器和web服务器之间的备份配置完成 ======

    【测试:部署是否成功】

    在web服务器上执行:

     rsync -avz /var/www/html rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password  

    成功,发现部署完成。


    【web服务器本地打包脚本】

    配置文件,web程序,日志分开打包。以便于后期的管理和恢复。

    环境模拟:web程序目录和日志目录创建

    mkdir /var/www/html -p
    
    mkdir /app/logs -p

    脚本在命令行测试:

     cd / && tar zcvf www_$(date +%F).tar.gz var/www/html/
    
     cd / && tar zcvf config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts
    
     cd / && tar zcvf logs_$(date +%F).tar.gz app/logs/  

    复制命令行测试完成的命令到脚本,并添加rsync备份命令和删除7天以前的备份文件命令:

    [root@nfs-31 scripts]# cat backup.sh 
    #!/bin/bash
    ip=$(ifconfig eth1|awk -F '[: ]+' 'NR==2 {print $4}')
    Path="/backup/$ip"
    [ ! -d $Path ] && mkdir $Path -p
    
    
    # backup
    cd / &&
    tar zcf $Path/www_$(date +%F).tar.gz var/www/html/
    tar zcf $Path/config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts
    tar zcf $Path/logs_$(date +%F).tar.gz app/logs/
    
    # to backup server
    rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password
    
    # del
    find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f

     


    【定时任务】

    【web服务器】

    crontab -e

    00 00 * * * /bin/bash /scripts/backup.sh >/dev/null 2>&1

    [root@nfs-31 scripts]# crontab -l
    # time sync
    */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
    
    # backup
    00 00 * * * /bin/bash /server/scripts/backup.sh >/dev/null 2>&1 

    【其它】

    【备份服务器】

    1. 备份服务器上每周六的数据都保留,其它备份仅保留180天备份。
    [root@backup-41 scripts]# cat backup_del.sh 
    #!/bin/bash
    
    /bin/find /backup -type f -name "*.tar.gz" -mtime +180|xargs rm -f
    # 每周六这种的文件格式应该为*$(date +%F-%w),上面就不更改了,细节,仅做说明
    /bin/find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz" -mtime +180 |xargs rm -f
    [root@backup-41 scripts]# crontab -l
    # time sync 
    */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
    
    # del 180days ago backup file
    00 00 * * * /bin/bash /server/scripts/backup_del.sh >/dev/null 2>&1

    【邮件通知】

    备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。

    • 思路:服务器端检查结果
      • du -sh /backup/* >/tmp/bak.log
      • 或者对比大小,对比修改时间给出成功失败的结果。
    • 打包,推送,在推送一个flag(ip+时间的文件名),本地清理7天以前的。
    • 手工或定时的解包,模拟数据恢复来确认数据备份的完整性。
    • flag+数据包md5sum指纹

    下面主要是flag+数据包md5sum的验证:

    验证本地打包是否正常:

    [root@nfs-31 scripts]# cat backup.sh 
    #!/bin/bash
    ip=$(ifconfig eth1|awk -F '[: ]+' 'NR==2 {print $4}')
    Path="/backup/$ip"
    [ ! -d $Path ] && mkdir $Path -p
    
    
    # backup
    cd / &&
    tar zcf $Path/www_$(date +%F).tar.gz var/www/html/ &&
    tar zcf $Path/config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts &&
    tar zcf $Path/logs_$(date +%F).tar.gz app/logs/ &&
    touch $Path/flag_$(date +%F)
    # 通过和&&命令,在所有tar命令执行成功之后,创建对应日期的flag文件。有这个文件说明打包成功。
    
    # to backup server
    rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password
    
    # del
    find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f

    为每个文件生成md5sum指纹:

    [root@nfs-31 /]# find /backup/ -type f -name "*$(date +%F).tar.gz"|xargs md5sum
    1bd841a50d87963ff60187dee4abf267  /backup/192.168.0.31/www_2019-12-02.tar.gz
    bfff332b4bfc8040094c4cc6996c8c66  /backup/192.168.0.31/logs_2019-12-02.tar.gz
    f625eb1346b473060bb146bafdaa937b  /backup/192.168.0.31/config_2019-12-02.tar.gz
    # 在backup.sh脚本中这样写
    touch $Path/flag_$(date +%F) find $Path -type f -name "*$(date +%F).tar.gz"|xargs md5sum >$Path/flag_$(date +%F)

    在备份服务器端进行计较:md5sum -c flag_2019_12_02

    [root@backup-41 192.168.0.31]# md5sum -c flag_2019-12-02      
    /backup/192.168.0.31/www_2019-12-02.tar.gz: OK
    /backup/192.168.0.31/logs_2019-12-02.tar.gz: OK
    /backup/192.168.0.31/config_2019-12-02.tar.gz: OK

    md5sum -c会把md5sum对应的文件重新加密,再和文件内的md5值进行比较。

    【邮件发送】

    #!/bin/bash
    ip = 192.168.0.31 find /backup/$(ip)/ -type f -name "flag_$(date +%F)" |xargs md5sum -c|grep FAILED >/opt/mail_body_$(date +%F).txt
    mail
    -s "$(date +%U%F) back" 123456789@qq.com </opt/mail_body_$(date +%F).txt

    其它参考博客:https://www.jianshu.com/p/4e90b286a9c7

  • 相关阅读:
    java的学习笔记
    tomcat配置方法
    《编写高质量代码》学习笔记
    Servlet的学习笔记
    Http协议的学习笔记
    树莓派开箱使用分享以及一些心得
    树莓派的骚操作
    Linux的学习笔记
    msyql高级的学习笔记
    项目业务记录
  • 原文地址:https://www.cnblogs.com/zoe233/p/11972721.html
Copyright © 2011-2022 走看看