【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 rsync_backup@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中查看邮件是否发送。