【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天备份。
- 需要备份的文件或目录有(原则上,只要是运维人员写入或更改的数据,都需要备份):
/var/spool/cron/root 、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs - 为了规范化,每台服务器进行本地备份时都备份到/backup目录下。
- 每台web服务器进行本地备份时,都备份到/backup下以本机IP地址命名的目录中。
- 打的tarball文件名中需要包含执行当天的日期
- 统一存储备份数据的服务器通过rsync daemon方式提过存储备份数据的目录/backup
- 由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除
- 为了方便的知道每次备份是否成功,我们需要如下操作:
在每台web服务器上检查备份是否成功
在存储备份数据的服务器上检查备份数据是否推送成功,并发送邮件至管理员邮箱 - 由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留。
具体实施:
- 在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 - 在客户端nfs服务器上,实现打包、推送、删除,定时推送。
a. 安装rsync服务 yum -y install rsync
b. 创建密码文件 echo “123456” >/etc/rsync.passwd
授予相应权限 chmod 600 /etc/rsync.passwd
c. 推送 (测试)
rsync -avz /tmp [email protected]::backup –password-file=/etc/rsync.passwd
d. 拉取 (测试)
rsync -avz rsync[email protected]::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/ [email protected]::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 【查看】 - 在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” [email protected]<$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 [email protected] 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 查看邮件队列 最后在配置的邮箱[email protected]中查看邮件是否发送。
原文地址:http://blog.51cto.com/13588698/2152862