什麼是Rsync?
rsync可以實作增量備份,配合inotify可以實作時事的資料備份
Rsync的三種工作模式
1)本地備份,相當于 cp 指令
将 /etc/hosts 檔案拷貝到 /tmp/ 目錄下
rsync -avz /etc/hosts /tmp/
删除一個目錄
先建立一個空目錄,然後使用 rsync 指令同步
mkdir /zhao
添加 --delete參數,目錄 zhao 為空
rsync --delete /zhao/ /tmp/
指令解釋:以前面的目錄為準,前面目錄有啥後面目錄有啥,前面目錄沒有的,後面目錄也不能有
2)通過網絡遠端 shell
push(推)
将本地的 /tmp/ 目錄中的内容推到 192.168.133.130 的 /opt/ 目錄下
rsync -avzP -e 'ssh -p 22' /tmp/ [email protected]:/opt/
pull(拉)
将 192.168.133.130 的 /tmp/ 目錄下的檔案拉到本地的 /opt/ 目錄下
如果下面的指令 /tmp/ 寫為 /tmp 則拉去的是 tmp 的整個目錄
rsync -avzP -e 'ssh -p 22' [email protected]:/tmp/ /opt/
3)daemon模式
daemon是我們平時工作中最長用的一種模式,本篇文章也主要是介紹的daemon模式
rsync 用戶端的常用參數
-a 歸檔模式,表示以遞歸方式傳輸檔案,并保持所有檔案屬性
-v 詳細模式輸出,傳輸時的進度等資訊
-z 傳輸時進行壓縮以提高傳輸效率
-r 對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸,注意是小寫r
-t 保持檔案時間資訊
-o 保持檔案屬主資訊
-p 保持檔案權限
-g 保持檔案屬組資訊
-P 顯示同步的過程及傳輸時的進度等資訊
-D 保持裝置檔案資訊
-l 保留軟連接配接
配置 daemon 模式
在配置 daemon 模式前需要準備兩台虛拟機,我的虛拟機是CentOS6.7 64位
兩台的系統都一樣,詳細截圖如下
uname -r
cat /etc/redhat-release
<a href="http://s3.51cto.com/wyfs02/M01/8D/A6/wKiom1ikjL_yLwkhAAAQB9YE8V4165.png" target="_blank"></a>
正常情況下系統預設就已經安裝 rsync,是以我們需要先檢查一下兩台機器是否已經安裝
這裡我隻截圖了一張,但是兩台必須都有 rsync 哈
rpm -qa | grep rsync
<a href="http://s3.51cto.com/wyfs02/M01/8D/A3/wKioL1ikjMCwB638AAAIe9u3q5I896.png" target="_blank"></a>
rsync daemon 端操作如下
rsync 預設沒有配置檔案,那麼我們就手動在 daemon 端建立配置檔案
touch /etc/rsyncd.conf
編輯 rsyncd.conf 檔案
vim /etc/rsyncd.conf
檔案内容如下
#Rsync server
#yuci
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
###################################
[backup]
comment = www by yuci
path = /backup
添加 rsync 使用者
useradd -s /sbin/nologin -M rsync
啟動 rsync
rsync --daemon
檢查 873 端口是否開啟
netstat -tlunp | grep 873
<a href="http://s3.51cto.com/wyfs02/M02/8D/A6/wKiom1ikjMCi1qjhAAASJFBkbRk120.png" target="_blank"></a>
建立共享目錄
mkdir /backup
并将 /backup 目錄的屬主改為 rsync 使用者
chown -R rsync /backup/
<a href="http://s3.51cto.com/wyfs02/M02/8D/A3/wKioL1ikjMHS-f5jAAAMIHYPtgs459.png" target="_blank"></a>
因為後面還需要用到 inotify 配合腳本做實時同步,是以需要建立一個密碼檔案
使用者就是之前 rsyncd.conf 檔案中的 auth rsync 使用者
echo "rsync_backup::123456" > /etc/rsync.password
<a href="http://s3.51cto.com/wyfs02/M02/8D/A6/wKiom1ikjMHh7a02AAAI8Gz6nW8738.png" target="_blank"></a>
安全考慮還需要更改該檔案的權限
chmod 600 /etc/rsync.password
<a href="http://s3.51cto.com/wyfs02/M00/8D/A6/wKiom1ikjMKiNv2BAAALWxEr9jI234.png" target="_blank"></a>
将該服務加到開機自動中
echo "rsync --daemon" >> /etc/rc.local
tail -1 /etc/rc.local
<a href="http://s3.51cto.com/wyfs02/M00/8D/A3/wKioL1ikjMLwq0uvAAAM2hxQtPE448.png" target="_blank"></a>
到此為止,rsync 的 daemon 端操作完成
rsync 用戶端的操作
還是在 client 端檢視系統中安裝了 rsync 軟體
rpm -qa | grep rsync
<a href="http://s3.51cto.com/wyfs02/M01/8D/A6/wKiom1ikjMOzi7P8AAAIgrF0d8Q402.png" target="_blank"></a>
建立一個密碼檔案,内容隻需要有密碼即可
因為我們下面連接配接時,必須要指定連接配接的使用者,并修改這個檔案的權限
echo "123456" > /etc/rsync.password
現在開始測試服務是否搭建成功,在測試前介紹一下環境
服務端:daemon 位址 192.168.133.131
用戶端:client 位址 192.168.133.130
現在我在 client 端測試推送功能,在 133.130 機器的 /tmp/ 目錄裡我建立了從1到5的5個目錄,嘗試推送到 133.131 的 /backup 目錄中
rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password
<a href="http://s3.51cto.com/wyfs02/M02/8D/A6/wKiom1ikjMTi6zpWAAAruZocJkE801.png" target="_blank"></a>
在 133.131 上檢視 /backup 目錄
<a href="http://s3.51cto.com/wyfs02/M02/8D/A6/wKiom1ikjMSyZdEoAAAGUCj3hmA711.png" target="_blank"></a>
推送成功。
繼續傳回到 133.130 上測試拉取服務
我将 133.130 的 /tmp 目錄清空,嘗試拉取 133.131 上的 /backup 目錄中的檔案
rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password
<a href="http://s3.51cto.com/wyfs02/M02/8D/A3/wKioL1ikjMfz9GyWAAA4aHEqKqQ003.png" target="_blank"></a>
拉取成功。
可以通過以下腳本配合定時任務完成簡單的資料備份
腳本内容如下
#!/bin/bash
path=/backup
dir="`ifconfig eth0 | awk -F '[ :]+' 'NR==2 {print $4}'`_$(date +%F)"
mkdir $path/$dir -p && \
/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) && \
/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) && \
rsync -az $path/ [email protected]::backup/ --password-file=/etc/rsync.password
定時任務,每一小時同步一次增量備份(定時任務做好寫絕對路徑)
00 01 * * * /bin/sh /root/bak.sh > /dev/null 2>&1
每一小時同步一次,在某些情況下似乎達不到預期的标準,那麼就需要配合 inotify 進行實時同步了
安裝 inotify 軟體
安裝 inotify 軟體的前提 rsync 服務安裝成功,可以在用戶端推送拉取資料
另外:inotify 是在用戶端配置安裝的軟體,别裝錯了
檢查系統的核心版本,必須要在 2.6.16 以上才可以
<a href="http://s3.51cto.com/wyfs02/M00/8D/A3/wKioL1ikjMeSA2rWAAAG8B80p2I633.png" target="_blank"></a>
檢視是否有以下三個檔案,有這三個檔案才表示系統支援 inotify 服務
ls -l /proc/sys/fs/inotify/
<a href="http://s3.51cto.com/wyfs02/M00/8D/A3/wKioL1ikjMjgivRPAAAVHa38X8Y405.png" target="_blank"></a>
編譯安裝 inotify
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools-3.14
make && make install
做一個軟連接配接,取出版本号
ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify
inotify 安裝目錄下的各目錄介紹
bin #inotify執行指令(二進制)
include #inotify程式所需用的頭檔案
lib #動态連結的庫檔案
share #幫助文檔
手動測試監控,下面的實驗是在本機上操作
因為測試監控的是 133.130 上的 /backup 目錄,是以需要建立一個 backup 目錄,監控 create 指令
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup
(-m 持續監聽狀态)
在新開一個視窗,在 /backup 目錄下建立檔案和目錄,在之前的視窗檢視有無反應
在新視窗下操作
touch test.txt
mkdir zhao
<a href="http://s3.51cto.com/wyfs02/M01/8D/A6/wKiom1ikjMjjt-O_AAAQjLjl_pM194.png" target="_blank"></a>
在之前的視窗中檢視
<a href="http://s3.51cto.com/wyfs02/M02/8D/A6/wKiom1ikjMmjRzaOAAAt1EsOK88130.png" target="_blank"></a>
檢測成功。那麼我們隻需要結合 rsync 的通過推送指令,就可以實作實時同步了。
最終的實時同步腳本指令
host01=192.168.133.131
src=/backup
dst=backup/
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify/
#panduan
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete,attrib $src | \
while read line
do
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} > /dev/null 2>&1
done
exit 0
本文轉自 mlwzby 51CTO部落格,原文連結:http://blog.51cto.com/aby028/1898276