Linux 架構篇 知識心得04 rsync備份例項
阿新 • • 發佈:2021-10-24
RSYNC實用案例
客戶端需求: 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個月的備份資料,其餘的全部刪除
1.客戶端執行指令碼
#!/bin/bash DIR=/backup IP=$(hostname -i) TIME=$(date +%F) SRC=$DIR/nfs_${IP}_${TIME} #客戶端需求: #1.客戶端提前準備存放的備份的目錄,目錄規則如下:/backup/nfs_172.16.1.31_2018-09-02 [ -d $SRC ] || mkdir $SRC #2.客戶端在本地打包備份(系統配置檔案、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02 tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null #建立檔案校驗檔案 md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum #3.客戶端最後將備份的資料進行推送至備份伺服器 rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd #4.客戶端每天凌晨1點定時執行該指令碼 # 通過 crontab -e 設定定時任務: 0 1 * * * /bin/bash /root/kehuduan.sh #5.客戶端伺服器本地保留最近7天的資料, 避免浪費磁碟空間 find $DIR/ -mtime +7 |xargs rm -rf
2.服務端執行指令碼
#!/bin/bash DIR=/backup IP="172.16.1.31" TIME=$(date +%F) SRC=$DIR/nfs_${IP}_${TIME} #服務端需求: #1.服務端部署rsync,用於接收客戶端推送過來的備份資料 rpm -q rsync &>/dev/null [ $? -ne 0 ]|| yum install rsync -y &>/dev/null #2.服務端需要每天校驗客戶端推送過來的資料是否完整 md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt #3.服務端需要每天校驗的結果通知給管理員 mail -s "${TIME}備份檔案 校驗結果" [email protected] <$SRC/result.txt &>/dev/null #4.服務端僅保留6個月的備份資料,其餘的全部刪除 find $DIR/ -mtime +180 |xargs rm -rf
3.rsync結合inotify案例(客戶端)
3.1 安裝inotify
[root@web01 ~]# yum -y install inotify-tools
3.2 inotify的引數
-m 持續監控
-r 遞迴
-q 靜默,僅列印時間資訊
--timefmt 指定輸出時間格式
--format 指定事件輸出格式
%Xe 事件
%w 目錄
%f 檔案
-e 指定監控的事件
access 訪問
modify 內容修改
attrib 屬性修改
close_write 修改真實檔案內容
open 開啟
create 建立
delete 刪除
umount 解除安裝
3.3 測試命令
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
# inotify 自動監測指令碼,實現監控/backup目錄以及無差異同步(重要)
[root@backup ~]# vim rsyn-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/rsync.passwd >/dev/null 2>&1
done &
3.4 客戶端實現
#!/bin/bash
DIR=/backup
IP=$(hostname -i)
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
# 自動監測命令,檢查目標目錄是否有更新
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} |while read line
do
#已知確認的是每日產生一個打包壓縮檔案,若已產生檔案,就不需要迴圈監測(只監測一次)
if [ -f $SRC/${TIME}.backup.tar.gz ];then
continue
fi
#客戶端需求:
#1.客戶端提前準備存放的備份的目錄,目錄規則如下:/backup/nfs_172.16.1.31_2021-08-03
[ -d $SRC ] || mkdir $SRC
#2.客戶端在本地打包備份(系統配置檔案、應用配置等)拷貝至/backup/nfs_172.16.1.31_2021-08-03
tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null
#建立檔案校驗檔案
md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum
#3.客戶端最後將備份的資料進行推送至備份伺服器
rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
#4.客戶端每天凌晨1點定時執行該指令碼
# 通過 crontab -e 設定定時任務: 0 1 * * * /bin/bash /root/kehuduan.sh
#5.客戶端伺服器本地保留最近7天的資料, 避免浪費磁碟空間
find $DIR/ -mtime +7 |xargs rm -rf
done &
3.5 服務端實現??
#!/bin/bash
DIR=/backup
IP="172.16.1.31"
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
#服務端需求:
#1.服務端部署rsync,用於接收客戶端推送過來的備份資料
rpm -q rsync &>/dev/null
[ $? -ne 0 ]|| yum install rsync -y &>/dev/null
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} | while read line
do
echo $line
if [ -f $SRC/result.txt ];then
continue
fi
if [ -d $SRC ];then
if [ ! -f $SRC/${TIME}.md5sum ];then
continue
fi
fi
#2.服務端需要每天校驗客戶端推送過來的資料是否完整
#3.服務端需要每天校驗的結果通知給管理員
md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt
if [ $? -ne 0 ];then
echo "$SRC 檔案校驗失敗" >>$SRC/result.txt
else
mail -s "${TIME}備份檔案 校驗結果" [email protected] <$SRC/result.txt &>/dev/null
fi
#4.服務端僅保留6個月的備份資料,其餘的全部刪除
find $DIR/ -mtime +180 |xargs rm -rf
done