zoukankan      html  css  js  c++  java
  • 综合架构1

    Rsync全网备份项目 

    https://edu.51cto.com/course/3497.html

    目标

    • 把每台服务器的重要数据、配置及脚本备份到本地以及备份服务器。
    • 本地数据保留7天备份数据
    • 本地备份文件推送到备份服务器上
    • 备份服务器保留最近180天备份,并且保留所有周一的备份数据
    • 将推送到备份服务器的数据进行验证,并将验证结果通过邮箱发送到运维人员邮箱

    企业案例

    某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份,要求如下:
    每天晚上00点整将所有服务器上系统配置文件、网站程序目录及访问日志打包备份,并通过rsync命令推送到备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推送到备份服务器backup上)

    全网备份基本要求

    3台服务器主机名分别为web01、nfs01、backup主机信息如下表

    服务器说明

    内网IP(NAT)

    主机名称

    web服务器

    172.16.1.7/24

    web01

    NFS存储服务器

    172.16.1.31/24

    nfs01

    rsync备份服务器

    172.16.1.41/24

    backup

    具体要求如下:

    1)所有服务器的备份目录必须都为backup

    2)要备份的系统配置文件包括但不限于:

          a. 定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)

           b. 开机自启的配置文件(/etc/rc.local)(适合web和nfs服务器)

           c. 日常脚本的目录(/server/scripts)

           d. 防火墙iptables的配置文件(/etc/sysconfig/iptables)

           e. 自己思考下还有什么需要备份呢?

    3)web服务器站点目录假定为(/var/html/www)

    4)wev服务器A访问日志路径假定为(/app/logs)

    5)web服务器保留打包后7天的备份数据(本地不能多于7天)

    6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本

    7)备份服务器上要按备份数据服务器内网IP为目录保存备份,备份的文件按照时间名称保存

    8)需要确保备份信息的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中

    项目的整个备份逻辑结构如下

    第一步:环境准备

    rsync服务端环境准备:

    1)下载安装rsync

    [root@backup ~]# yum -y install rsync

    2)编写配置文件/etc/rsyncd.conf

    [root@backup ~]# vi /etc/rsyncd.conf

    ##create by HQ at 2020
    ###rsyncd.conf start###
    
    uid = rsync
    gid = rsync
    port = 873
    fake super = yes
    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
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    
    [backup]
    comment = "backup dir by oldboy"
    path = /backup/
    read_only = false
    
    [dev]
    comment = "dev dir by oldboy"
    path = /backup/dev
    

    3)创建虚拟用户rsync

    [root@backup ~]# useradd rsync -M -s /sbin/nologin

    4)创建服务密码认证文件,并赋予600权限

    [root@backup ~]# echo "rsync_backup:oldboy123" >/etc/rsync.password

    [root@backup ~]# chmod 600 /etc/rsync.password

    5)创建备份目录backup,并修改属主、属组信息为rsync

    [root@backup ~]# mkdir /backup

    [root@backup ~]# chown rsync.rsync /backup/

    6)启动rsyncd服务

    [root@backup ~]# systemctl start rsyncd

    Rsync客户端环境准备

    web01:

    [root@web01 ~]# echo "oldboy123" >/etc/rsync.password

    [root@web01 ~]# chmod 600 /etc/rsync.password

    nfs01:

    [root@nfs01 ~]# echo "oldboy123" >/etc/rsync.password

    [root@nfs01 ~]# chmod 600 /etc/rsync.password

    测试rsync备份

    rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/$(hostname -i)/ --password-file=/etc/rsync.password

    Rsync全网备份

    1)所有服务器的备份目录必须都为backup

    [root@backup ~]# mkdir /backup/

    2)要备份的系统配置文件包括但不限于:

          a. 定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)

           b. 开机自启的配置文件(/etc/rc.local)(适合web和nfs服务器)

           c. 日常脚本的目录(/server/scripts)

           d. 防火墙iptables的配置文件(/etc/sysconfig/iptables)

           e. 自己思考下还有什么需要备份呢?

    [root@web01 /]#cd /

    [root@web01 /]#mkdir -p /backup/$(hostname -i)

    [root@web01 /]#tar -zchf /backup/$(hostname -i)/data_server-$(date +%F_week%w -d -"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables

    3)web服务器站点目录假定为(/var/html/www)

    [root@web01 /]# tar -zchf /backup/$(hostname -i)/data_log-$(date +%F_week%w -d -"1day").tar.gz ./app/logs

    4)wev服务器A访问日志路径假定为(/app/logs)

    [root@web01 /]#tar -zchf /backup/$(hostname -i)/data_log-$(date +%F_week%w -d -"1day").tar.gz ./app/logs

    5)web服务器保留打包后7天的备份数据(本地不能多于7天)

    [root@web01 /]# find /backup/ -type f -mtime +7 | xargs rm

    [root@web01 /]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

    6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本

    find /backup/ -type f -mtime +180 ! -name "*week1*" | xargs rm

    7)备份服务器上要按备份数据服务器内网IP为目录保存备份,备份的文件按照时间名称保存

    8)需要确保备份信息的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中

    第一步:生成指纹认证文件

    [root@web01 /]# find /backup/ -type f -mtime -1 ! -name "finger.txt" | xargs md5sum >/backup/$(hostname -i)/finger.txt

    第二步:验证数据完整性

    [root@backup ~]# find /backup/ -type f -name "finger.txt" | xargs md5sum -c

     OK表示数据完整   failed表示不完整

    第三步:将验证结果发送到邮箱

    1)配置/etc/mail.rc文件

    [root@backup ~]# vim /etc/mail.rc

    #告警邮件发送配置

    set from=915979992@qq.com smtp=smtp.qq.com

    set smtp-auth-user=915979992@qq.com smtp-auth-password=eevftpwzyzaibbea smtp-auth=login

    2)测试邮件能否正常发送

    [root@backup ~]# mail -s "test mail" 276715936@qq.com </etc/hosts

    3)将验证结果写入/tmp/check.txt文件

    [root@backup ~]# find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt

    4)将验证结果发送到运维邮箱

    [root@backup ~]# mail -s "check data info for $(date +%F -d -"1day")" 276715936@qq.com </tmp/check.txt

    编写脚本,实现自动备份(定时任务)

    客户端脚本:

    [root@web01 ~]# vim /server/scripts/backup.sh

    #!/bin/bash
    ########################################
    #           rsync全网备份客户端脚本             #
    ########################################
    
    Backup_dir="/backup"
    IP_info=$(hostname -i)
    
    #create backup dir
    mkdir -p $Backup_dir/$IP_info
    
    #tar data dir
    cd /
    tar -zchf $Backup_dir/$IP_info/server-data-$(date +%F_week%w -d -"1day").tar.gz  ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
    tar -zchf $Backup_dir/$IP_info/server-log-$(date +%F_week%w -d -"1day").tar.gz  ./app/logs
    tar -zchf $Backup_dir/$IP_info/server-www-$(date +%F_week%w -d -"1day").tar.gz  ./var/html/www
    
    #del 7 day ago data
    find $Backup_dir/ -type f -mtime +7 | xargs rm &>/dev/null
    
    #create finger file
    find $Backup_dir/ -type f -mtime -1 ! -name "finger.txt" | xargs md5sum >$Backup_dir/$IP_info/finger.txt
    
    #backup push data info
    rsync -avz $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    

      

    设置定时任务:

    [root@web01 ~]# crontab -e

    #rsync backup

    0 0 * * * /bin/bash /server/scripts/backup.sh &>/dev/null

    服务端脚本:

    [root@backup ~]# vim /server/scripts/backup_server.sh

    #!/bin/bash
    #########################################
    #           rsync全网备份服务端脚本                #
    #########################################
    
    #del 180 day data,backup every week1
    find /backup/ -type f -mtime +180 ! -name "*week1*" | xargs rm &>/dev/null
    
    #check backup data and touch check file
    find /backup/ -type f -mtime -1 -name "finger.txt" | xargs md5sum -c >/tmp/check.txt
    
    #send check mail
    mail -s "check backup data-$(date +%F_week%w -d -"1day")" 276715936@qq.com </tmp/check.txt
    

      

    设置定时任务:

    [root@backup ~]#  crontab -e

    #rsync backup

    1 0 * * * /bin/bash /server/scripts/backup_server.sh &>/dev/null

    环境测试

    定时任务开始前备份数据

    [root@backup /]# date -s 20210202

    切换时间,定时任务执行后数据

    备份数据验证结果发送邮箱

    rsync服务异常问题汇总    

    1. rsync服务端开启的iptables防火墙

    【客户端错误】

    ERROR: NO route to host

    【异常解决】

    关闭防火墙

    service iptables stop

    systemctl stop firewalld

          

    2. rsync客户端执行rsync命令错误

    【客户端错误】

    ERROR: The remote path must start with a module name not a /

    这个是rsync模块语法书写错误

    【异常解决】

    注意正确书写模块信息,不能书写成路径信息

    rsync命令语法错误,::/backup是错误的,应该是::backup

          

    3. rsync服务认证错误

    【客户端错误】

    @ERROR: auth failed on module backup

    【异常解决】

    1. 密码真的输入错误,用户名真的错误

    2. secrets file = /etc/rsync.password指定密码文件和实际密码文件名称不一致

    3. /etc/rsync.password文件的权限不是600

    4. rsync_backup:123456 密码配置文件后面注意不要有空格

    5.rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称

          

    4. rsync服务位置模块错误

    【客户端错误】

     [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::bckup

    @ERROR: Unknown module 'bckup'

    这个主要是模块信息书写错误

    【异常解决】

    检查配置文件/etc/rsyncd.conf配置文件模块名称书写或rsync语法书写时错误

          

    5. rsync服务权限阻止错误

    【客户端错误】

    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

    rsync: chgrp ".hosts.FFRXhm" (in backup) failed: Operation not permitted (1)

    【异常解决】

    1. 将备份目录的属主、属组修改为rsync

    2. 将备份目录的权限修改为755

    3. 在/etc/rsyncd.conf文件中添加fake super = yes

          

    6. rsync服务备份目录异常

    【客户端错误】

    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

    @ERROR: chdir failed

    rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

    【异常解决】

    1. 备份目录没有建立,建立备份目录

    2. 建立的备份存储目录和配置文件/etc/rsyncd.conf里定义的不一致

          

    7. rsync服务无效用户信息

    【客户端错误】

    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

    @ERROR: invalid uid rsync

    【异常解决】

    rsync虚拟用户没有创建或者被删除

          

    8. 客户端已经配置了密码文件,但免密登录方式依旧需要输入密码

    【客户端错误】

    password file must not be other-accessible

    【异常解决】

    rsync客户端的密钥文件/etc/rsync.password权限不是600

          

    9. rsync客户端连接慢问题

    【异常解决】

    查看日志进行分析,编写rsync服务端hosts解析文件

          

    10. --password-file书写错误

    【客户端错误】

    rsync: could not open password file /etc/password: No such file or directory (2)

    【异常解决】

    正确书写方式:--password-file=/etc/rsync.password,要与服务端配置文件里的书写一致

  • 相关阅读:
    详解jQuery的$符号和init函数
    myeclipse 快捷键,从步骤开始的大括号定位到匹配方法结束的大括号
    为Jquery类和Jquery对象扩展方法
    JQuery 对象和事件
    jquery,禁止冒泡和默认行为
    什么是项目发布
    IP转换成域名
    nslookup域名查询命令查询ip
    Java中的逆变与协变
    iOS 图片背景模糊效果
  • 原文地址:https://www.cnblogs.com/chenyun1/p/12562330.html
Copyright © 2011-2022 走看看