码迷,mamicode.com
首页 > 其他好文 > 详细

rsync+crond企业实战案例

时间:2018-08-01 00:21:38      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:队列   密码文件   pid   chmod   back   配置   ifconf   vim   find   

【DB 数据同步,带宽占满,导致用户无法上网
rsync scp ftp 限速功能。主要提一下rsync –bwlimit(限速)】
下面进入正题:

企业案例rsync+crond定时备份
某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性的定时备份。要求如下:
每天晚上00点整在web服务器A上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)

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

  1. 需要备份的文件或目录有(原则上,只要是运维人员写入或更改的数据,都需要备份):
    /var/spool/cron/root 、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs
  2. 为了规范化,每台服务器进行本地备份时都备份到/backup目录下。
  3. 每台web服务器进行本地备份时,都备份到/backup下以本机IP地址命名的目录中。
  4. 打的tarball文件名中需要包含执行当天的日期
  5. 统一存储备份数据的服务器通过rsync daemon方式提过存储备份数据的目录/backup
  6. 由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除
  7. 为了方便的知道每次备份是否成功,我们需要如下操作:
    在每台web服务器上检查备份是否成功
    在存储备份数据的服务器上检查备份数据是否推送成功,并发送邮件至管理员邮箱
  8. 由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留。

具体实施:

  1. 在rsync服务器上,配置rsync服务,实现推送。
    a. 安装rsync服务,yum -y install rsync
    b. 添加rsync服务的用户,管理本地目录 useradd -s /sbin/nologin -M rsync id rsync
    c. 生成rsyncd.conf配置文件。具体配置项
    uid = rsync
    gid = rsync
    use chroot =no
    max connections=200
    timeout = 300
    pid file = /var/run/rsync.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore error
    read only = false
    list = false
    hosts allow =192.168.1.0/24
    hosts deny = 0.0.0.0/32
    auth users =rsync_backup
    secerts file =/etc/rsync.passwd
    [backup]
    comment =
    path = /backup
    d. 创建备份目录,mkdir /backup ,并设置目录属主属组 chown -R rsync:rsync /backup
    e. 创建虚拟用户密码文件 echo “rsync_backup:123456” >/etc/rsync.passwd
    设置文件权限 chmod 600 /etc/rsync.passwd
    f. 启动rsync服务并检查 rsync --daemon
    ps -elf | grep rsync | grep -v grep
    netstat -lnpt | grep rsync
  2. 在客户端nfs服务器上,实现打包、推送、删除,定时推送。
    a. 安装rsync服务 yum -y install rsync
    b. 创建密码文件 echo “123456” >/etc/rsync.passwd
    授予相应权限 chmod 600 /etc/rsync.passwd
    c. 推送 (测试)
    rsync -avz /tmp rsync_backup@192.168.1.2::backup –password-file=/etc/rsync.passwd
    d. 拉取 (测试)
    rsync -avz rsyncbackup@192.168.1.2::backup /tmp --password-file=/etc/rsync.passwd
    e. 创建shell脚本实现打包,推送,删除
    vim /server/scripts/bak.sh
    #!/bin/bash
    IP=$(ifconfig eth1 | awk -F “[ :]+” ‘NR==2 {print $4}’ 【过滤web服务器ip地址】
    Path=/backup
    if [ $(date +%w) -eq 0 ]
    then
    Time=”week
    $(date +%F%w -d “-1day”)”
    else
    Time=$(date +%F -d “-1day”)
    fi
    mkdir -Path/$IP/ -p
    cd / &&\
    tar zcfh $Path/$IP/backup
    $Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
    md5sum $Path/$IP/backup$Time.tat.gz >$Path/$IP/flag$Time.log &&\
    rsync -az $Path/ rsync_backup@192.168..1.2::backup --password-file=/etc/rsync.passwd &&\
    find /backup/ -type f -mtime +7 ! -name “week_6” |xargs rm -f 【查找/backup目录下七天前的不包含周六的文件并删除】
    f. 将上述脚本放入crond中每天24点执行
    echo “00 00
    /bin/sh /server/scripts/bak.sh >/dev/null 2>&1” >/var/spool/crond/root
    crontab -l 【查看】
  3. 在rsync备份服务器上做检查,发邮件给管理员。
    配置脚本 vim /server/scripts/bak.sh
    #!/bin/bash
    Path=/backup
    if [ $(date +%w) -eq 0 ]
    then
    Time=”week$(date +%F%w -d “-1day”)”
    else
    Time=$(date +%F -d “-1day”)
    fi
    LANG=en
    find $Path -type f -name ”${Time}.log|xargs md5sum -c >> $Path/${Time}_result.log 2>&1
    【找出当天推送的文件并校验它的md5值,判断文件是否有问题】
    mail -s “$Time bak result” zhangsan@163.com<$Path/${Time}_result.log
    find $Path -type f -mtime +180 ! -name “week_6*” |xargs rm -f
    【找出备份目录下180天前,不包含周六的文件并删除】

将脚本放入crontab中定时执行
echo “00 05 */bin/sh /server/scripts/bak.sh >/dev/null 2>&1” >>/var/spool/crond/root
crond -l 【查看】

发送邮件补充:发送 smtp 25
接受 pop3 110

配置mail使用外部SMTP发邮件

a. 通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail/posfix等内部邮件服务而用外部的smtp服务器发送邮件。
修改/etc/mail.rc最后一行加入
set from=zhangsan@163.com smtp=smtp.163.com smtp-auth-user=zhangsan
smtp-auth-password=123456 smtp-auth=login
【from是发送的邮件地址
smtp 是发生的外部smtp服务器的地址
smtp-auth-user是外部smtp服务器认证的用户名
smtp-auth-password是外部smtp服务器认证的密码
b. 模拟检查备份文件 执行备份服务器的脚本,查看邮件能否发送。
先在客户端模拟推送从4月25到30号的数据到备份服务器
seq 25 30|awk ‘{print “date -s 201804”$0“&&/bin/sh /server/scripts/bak.sh”}‘|bash
再在备份服务器执行脚本 sh /server/scritps/check_and_del.sh
mailq 查看邮件队列 最后在配置的邮箱zhangsan@163.com中查看邮件是否发送。

rsync+crond企业实战案例

标签:队列   密码文件   pid   chmod   back   配置   ifconf   vim   find   

原文地址:http://blog.51cto.com/13588698/2152862

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!