rsync+crond企業實戰案例
rsync scp ftp 限速功能。主要提一下rsync –bwlimit(限速)】
下面進入正題:
企業案例rsync+crond定時備份
某公司裏有一臺web服務器,裏面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性的定時備份。要求如下:
每天晚上00點整在web服務器A上打包備份網站程序目錄並通過rsync命令推送到服務器B上備份保留(備份思路可以是先在本地按日期打包,然後再利用rsync推到備份服務器上)
具體要求如下
1) web服務器A和備份服務器B的備份目錄必須都為/backup
2) web服務器站點目錄假定為(/var/www/html)
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
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]中查看郵件是否發送。
rsync+crond企業實戰案例