1. 程式人生 > 其它 >Linux 架構篇 知識心得04 rsync備份例項

Linux 架構篇 知識心得04 rsync備份例項

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