1. 需求
用戶端需求
1.用戶端提前準備存放的備份的目錄,目錄規則如下:/backup/nfs_172.16.1.31_2018-09-02
2.用戶端在本地打包備份(系統組態檔、應用設定等)拷貝至/backup/nfs_172.16.1.31_2018-09-02
3.用戶端最後將備份的數據進行推播至備份伺服器
4.用戶端每天凌晨1點定時執行該指令碼
5.用戶端伺服器本地保留最近7天的數據, 避免浪費磁碟空間
伺服器端需求
1.伺服器端部署rsync,用於接收用戶端推播過來的備份數據
2.伺服器端需要每天校驗用戶端推播過來的數據是否完整
3.伺服器端需要每天校驗的結果通知給管理員
4.伺服器端僅保留6個月的備份數據,其餘的全部刪除
2. 準備伺服器
主機 |
內網IP |
web01 |
172.16.1.7 |
backup |
172.16.1.41 |
3. 用戶端
1) 建立備份目錄
#備份目錄格式
/backup/nfs_172.16.1.31_2018-09-02
#取主機名
[root@web01 ~]# hostname
web01
#取ip
[root@web01 ~]# ifconfig eth1 | awk 'NR==2{print $2}'
172.16.1.7
[root@web01 ~]# hostname -I | awk '{print $2}'
172.16.1.7
#取時間
[root@web01 ~]# date +%F
2020-08-13
#建立目錄
[root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`
2) 打包
[root@web01 ~]# cd /backup/web01_172.16.1.7_2020-08-23
[root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
3) 對打包檔案生成驗證檔案
[root@web01 ~]# md5sum /backup/web01_172.16.1.7_2020-08-23/conf.tar.gz > /backup/web01_172.16.1.7_2020-08-23/auth.txt
[root@web01 ~]# cat /backup/web01_172.16.1.7_2020-08-23/auth.txt
05ee3b6231317d0f5b70c63afae6afb8 /backup/web01_172.16.1.7_2020-08-23/conf.tar.gz
4) 推播數據
[root@web01 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-23 [email protected]::backup
Password: ****
sending incremental file list
web01_172.16.1.7_2020-08-23/
web01_172.16.1.7_2020-08-23/auth.txt
sent 255 bytes received 47 bytes 67.11 bytes/sec
total size is 50,999 speedup is 168.87
5) 清理數據
#模擬生成一個月數據
[root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done
#只保留七天的檔案
[root@web01 ~]# find /backup -mtime +7 | xargs rm -rf
[root@web01 ~]# ll /backup
total 0
drwxr-xr-x 2 root root 25 Aug 23 00:00 web01_172.16.1.7_2020-08-23
drwxr-xr-x 2 root root 25 Aug 24 00:00 web01_172.16.1.7_2020-08-24
drwxr-xr-x 2 root root 25 Aug 25 00:00 web01_172.16.1.7_2020-08-25
drwxr-xr-x 2 root root 25 Aug 26 00:00 web01_172.16.1.7_2020-08-26
drwxr-xr-x 2 root root 25 Aug 27 00:00 web01_172.16.1.7_2020-08-27
drwxr-xr-x 2 root root 25 Aug 28 00:00 web01_172.16.1.7_2020-08-28
drwxr-xr-x 2 root root 25 Aug 29 00:00 web01_172.16.1.7_2020-08-29
drwxr-xr-x 2 root root 25 Aug 30 00:00 web01_172.16.1.7_2020-08-30
6) 將以上內容寫成指令碼
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#1.定義變數
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}
#2.建立目錄
mkdir -p $DIR
#3.進到目錄下並打包檔案
cd $DIR
tar czf conf.tar.gz /etc/passwd /var/log/messages &>/dev/null
#4.對打包檔案生成驗證檔案
md5sum $DIR/conf.tar.gz > $DIR/auth.txt
#5.推播
export RSYNC_PASSWORD=123456
rsync -avz $DIR [email protected]::backup
#6.清理數據
find $SRC -type d -mtime +7 | xargs rm -rf
6) 寫入定時任務
[root@web01 ~]# crontab -e
#每天凌晨1點進行備份
00 1 * * * /bin/bash /scripts/backup.sh &> /dev/null
5. 伺服器端
1) 安裝郵件系統
[root@backup ~]# yum install -y mailx
#編輯郵件系統
[root@backup ~]# vim /etc/mail.rc
set from=*******@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=*******@qq.com
set smtp-auth-password=郵箱授權碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
2) 指令碼
[root@backup ~]# vim /scripts/auth.sh
#!/bin/bash
#1.定義變數
SRC=/backup
HOST='web01'
IP='172.16.1.7'
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}
#2.驗證檔案完整性
md5sum -c $DIR/auth.txt > $SRC/result.txt
#3.把驗證結果發送到郵箱
mail -s "備份數據完整性" [email protected] < $SRC/result.txt
#4.清理數據
find $SRC -type d -mtime +180 | xargs rm -rf
~
3) 寫入定時任務
[root@backup ~]# crontab -e
#伺服器端定時發送驗證結果
30 1 * * * /bin/bash /scripts/auth.sh &> /dev/null
6.rsync結合inotifywait實現實時備份
1) inotifywait
inotifywait #用於等待檔案或檔案集上的一個待定事件,可以監控任何檔案和目錄設定,並且可以遞回地監控整個目錄樹
# 安裝命令
yum -y install inotify-tools
選項:
-m #持續監控
-r #遞回
-q #靜默,僅列印時間資訊
--timefmt #指定輸出時間格式
--format #指定事件輸出格式
%Xe #事件
%w #目錄
%f #檔案
-e #指定監控的事件
access #存取
modify #內容修改
attrib #屬性修改
close_write #修改真實檔案內容
open #開啓
create #建立
delete #刪除
umount #解除安裝
2) 實時監控指令碼
#粗糙版
[root@web01 /backup]# vim /scripts/rsync_inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . [email protected]::backup --password-file=/etc/rsyncd.password >/dev/null 2>&1
done &