第三章 Rsync備份案例
阿新 • • 發佈:2020-08-17
一、rsync備份模式
1.本地方式
2.遠端方式
3.守護程序模式
1.守護程序模式
1)安裝rsync
yum install -y rsync
2)配置rsync
[root@backup /backup]# vim /etc/rsyncd.conf uid = rsync gid = rsync port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log ##################################### [backup] comment = welcome to oldboyedu backup! path = /backup
3)建立使用者
useradd rsync -s /sbin/nologin -M
4)建立虛擬使用者的密碼檔案
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
5)建立檔案目錄
mkdir /backup
chown -R rsync.rsync /backup
6)啟動服務
[root@backup ~]# systemctl start rsyncd
7)驗證
[root@web01 ~]# rsync -avz [email protected]::backup ./ [root@web01 ~]# rsync -avz file1 [email protected]::backup
2.守護程序模式語法
1)pull拉取資料命令
#語法 rsync [OPTION...] [USER@]HOST::SRC... [DEST] #示例: 1.拉取rsync備份服務的"backup模組"資料至本地/mnt目錄 [root@nfs01 ~]# rsync -avz [email protected]::backup /mnt/ rsync #命令 -avz #選項 rsync_backup #遠端主機使用者(虛擬使用者) 192.172.16.1.41 #遠端主機地址 ::backup #遠端主機模組(不是目錄) /mnt/ #將遠端主機資料備份至本地什麼位置 #注意: 如果是拉取資料,遠端伺服器源資料目錄許可權可以為任意許可權
2)push推送資料命令
#語法
rsync [OPTION...] SRC... [USER@]HOST::DEST
#示例
1.將本地/mnt目錄推送至rsync備份伺服器的backup模組
[root@nfs01 ~]# rsync -avz /mnt/ [email protected]::backup
rsync #命令
-avz #選項
/mnt/ #本地檔案
rsync_backup #遠端主機使用者(虛擬使用者)
192.172.16.1.41 #遠端主機地址
::backup #遠端主機模組(不是目錄)
#注意:
如果是推送資料,遠端接收檔案的目錄許可權必須是rsync許可權
3.rsync命令選項
1)常用選項
-a #歸檔模式傳輸, 等於-tropgDl -t -r -o -p -g -D -l
-v #詳細模式輸出, 列印速率, 檔案數量等
-z #傳輸時進行壓縮以提高效率
-r #遞迴傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳輸。
-t #保持檔案時間資訊
-o #保持檔案屬主資訊
-p #保持檔案許可權
-g #保持檔案屬組資訊
-l #保留軟連線
-P #顯示同步的過程及傳輸時的進度等資訊
-D #保持裝置檔案資訊
-L #保留軟連線指向的目標檔案
-e #使用的通道協議,指定替代rsh的shell程式
--exclude=PATTERN #指定排除不需要傳輸的檔案模式
--exclude-from=file #檔名所在的目錄檔案
--partial #斷點續傳
--password-file=xxx #使用密碼檔案
2)限速演示
--bwlimit=100kb #限速傳輸單位預設是kb (不用z選項)
[root@web01 /tmp]# rsync -avP --bwlimit 100 /tmp/ [email protected]::backup
sending incremental file list
./
data.txt
5,537,792 1% 100.04kB/s
3)資料一致
--delete #讓目標目錄和源目錄資料保持一致(不用*)放前後皆可
#推:資料與推送資料的源資料一致
[root@web01 /tmp]# rsync -avP --delete /tmp/ [email protected]::backup
sending incremental file list
deleting file2
deleting file1
sent 223 bytes received 43 bytes 532.00 bytes/sec
total size is 0 speedup is 0.00
#推:資料與拉取資料的源資料一致
[root@web01 /tmp]# rsync -a -v -P [email protected]::backup /tmp --delete
receiving incremental file list
deleting file4
deleting file3
./
sent 32 bytes received 203 bytes 470.00 bytes/sec
二、Rsync備份案例
1.需求
#客戶端需求
1.客戶端提前準備存放的備份的目錄,目錄規則如下:/backup/主機_IP_時間
2.客戶端在本地打包備份(系統配置檔案、應用配置等)拷貝至/backup/主機_IP_時間
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/web01_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-12
#建立目錄
[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-12/
[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 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-12 [email protected]::backup
sending incremental file list
web01_172.16.1.7_2020-08-12/
web01_172.16.1.7_2020-08-12/conf.tar.gz
sent 62,567 bytes received 47 bytes 125,228.00 bytes/sec
total size is 68,669 speedup is 1.10
4)將以上內容寫成指令碼
[root@web01 ~]# mkdir /scripts
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#0.定義變數
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}
#1.建立目錄
mkdir -p $DIR
#2.進到目錄下並打包檔案
cd $DIR
tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
#3.推送
export RSYNC_PASSWORD=123456
rsync -avz $DIR [email protected]::backup
5)寫入定時任務
[root@web01 ~]# crontab -e
#每天凌晨1點進行檔案備份
00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null
6)清理資料
#模擬生成一個月資料
[root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done
#只保留七天的檔案
[root@web01 ~]# find /backup/ -type d -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
7)完善指令碼
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#0.定義變數
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}
#1.建立目錄
mkdir -p $DIR
#2.進到目錄下並打包檔案
cd $DIR
tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
#3.對檔案生成驗證檔案
md5sum $DIR/conf.tar.gz > $DIR/check.md5
#4.推送
export RSYNC_PASSWORD=123456
rsync -avz $DIR [email protected]::backup
#5.清理資料
find $SRC -type d -mtime +7 | xargs rm -rf
4.服務端
1)安裝郵件系統
[root@backup ~]# yum install -y mailx
#編輯郵件系統
[root@backup ~]# vim /etc/mail.rc
set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=授權碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
2)指令碼
[root@web01 ~]# vim /scripts/auth.sh
#!/bin/bash
#0.定義變數
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}
#1.驗證檔案的完整性sha1sum(1)
md5sum -c $DIR/check.md5 > $SRC/result.txt
md5sum -c /backup/*_`date +%F`/check.md5 >> /backup/result.txt
#2.把驗證結果傳送到QQ
mail -s "備份資料完整性" [email protected] < $SRC/result.txt
#3.清理資料
find $SRC -type d -mtime +180 | xargs rm -rf
三、Rsync結合inotify實現實時備份
1.安裝
[root@web01 ~]# yum -y install inotify-tools
2.命令測試
[root@web01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
3.引數詳解
-m 持續監控
-r 遞迴
-q 靜默,僅列印時間資訊
--timefmt 指定輸出時間格式
--format 指定事件輸出格式
%Xe 事件
%w 目錄
%f 檔案
-e 指定監控的事件
access 訪問
modify 內容修改
attrib 屬性修改
close_write 修改真實檔案內容
open 開啟
create 建立
delete 刪除
umount 解除安裝
4.實時監控指令碼
1)粗糙版
[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 &