rsync備份案例

2020-08-14 11:06:36

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  &