Rsync文件同步 html
一、一款增量備份工具,remote sync,遠程同步,支持本地複製或者與其餘SSH、rsync主機同步,官方網站:http://rsync.samba.org/。 linux
Rsync(remote synchronize)是一個遠程數據同步工具,可經過LAN/WAN快速同步多臺主機間的文件,也可使用rsync同步本地硬盤中的不一樣目錄。 nginx
Rsync是用戶取代rcp的一個工具,Rsync使用所謂的"Rsync算法"來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不一樣部分,而不是每次都整份傳送,所以速度至關快,能夠參考How Rsync A Practical Overview進一步瞭解Rsync的運做機制。 算法
Rsync支持大多數的類Unix系統,不管是linux、solaris仍是BSD上都通過了良好的測試,此外,它在windows平臺下也有相應的版本,比較知名的有cwRsync和Sync2NAS。 shell
二、特色 vim
能更新整個目錄樹和文件系統 windows
有選擇性的保持符號連接、硬連接、文件屬於、權限、設備以及時間等 bash
對於安裝來講,無任何特殊權限要求 服務器
對於多個文件來講,內部流水線減小文件等待的延時 ssh
能用rsh、ssh或直接端口做爲傳輸入端口
支持匿名rsync同步文件,是理想的鏡像工具
三、同步源和發起源
Rsync同步源:指備份操做的遠程服務器,也稱爲備份源,主要包括兩種:rsync源、ssh源
四、文件格式
備份操做類型:
本地同步:rsync … 本地目錄1 本地目錄2
rsync+ssh同步:
rsync … ssh源 本地目錄 (下行同步即下載)
rsync … 本地目錄 ssh源 (上行同步即上傳)
rsync+rsync同步:
rsync … rsync源 本地目錄 (下行同步即下載)
rsync … 本地目錄 rsync源 (上行同步即上傳)
五、rsync命令的用法:
基本格式:rsync [選項] 原始位置 目錄位置
經常使用選項:
-a:歸檔模式,遞歸併保留對象屬性,等同於-rlptgoD
-v:顯示同步過程的詳細(verbose)信息
-z:在傳輸文件時進行壓縮(compress)
-H:保留硬連接文件
-A:保留ACL屬性信息
--delete:刪除目標位置有而原始位置沒有的文件
-r:遞歸模式,包含目錄及子目錄中全部文件
-l:對於符號連接文件仍然複製爲符號連接文件
-p:保留文件的權限標記
-t:保留文件的時間標記
-g:保留文件的屬組標記(僅超級用戶使用)
-o:保留文件的屬主標記(僅超級用戶使用)
-D:保留設備文件及其餘特殊文件
六、同步的優缺點
①按期同步的不足
執行備份的時間固定
當同步源長期不變化時,密集的按期任務是沒必要要的
②實時同步的優勢
一旦出現源出現變化,當即啓動備份
只要同步源無變化,則不執行備份
七、linux內核的inotify機制從版本2.6.13開始提供,能夠監控文件系統的變更狀況,並做出通知響應,輔助軟件:inotify-tools
八、調整內核的參數
max_queue_events:監控隊列大小
max_user_instances:最多監控實例數
max_user_watches:每一個實例最多監控文件數
九、安裝inotify-tools輔助工具
inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短時間監控,任務完成後再出結果
#inotifywait –mrq -e modify,create,move,delete /var/www/html
選項:-m (monitoring) 實時監控
-r (recursive) 遞歸
-q (quiet) 安靜模式
3、案例1:rsync+ssh同步
試驗準備:兩臺主機,A主機和B主機IP地址分別爲192.168.131.130、192.168.131.136,共享目錄/usr/local/nginx/html
A主機操做:
# useradd wdd
# passwd wdd
# setfacl -m u:wdd:rwx /usr/local/nginx/html/ #設置ACL權限
# setfacl -m d:wdd:rwx /usr/local/nginx/html/
主機B操做:
# mkdir /client
# rsync -avz wdd@192.168.131.130:/usr/local/nginx/html/* /client
上面操做只同步/usr/local/nginx/html/下的文件,若是寫成/usr/local/nginx/html,則同步整個目錄
試驗準備:A主機IP地址爲192.168.131.130,B主機IP地址爲192.168.131.136
A主機做爲同步源:
# mkdir /server
# cd /server/
# chmod 777 /server/ #注意兩邊都要有相應的權限
# touch server.txt
# vim /etc/rsyncd.conf
use chroot = yes
address = 192.168.131.130
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[share]
comment = rsync server
path = /server
read only = no
dont compress = *.gz #對後面格式不進行壓縮
auth users = wdd
secrets file = /etc/rsyncd_users.db
# vim /etc/rsyncd_users.db
wdd:123456 #用戶名和密碼
# chmod 600 /etc/rsyncd_users.db
#注意必定要改這個權限,不然認證不經過
# killall -9 rsync
# rsync –daemon #只能這樣啓動rsync
主機B客戶端:
進行下載操做
# rsync -avz wdd@192.168.131.130::share /client
也能夠寫成下面這樣:
# rsync -avz rsync://wdd@192.168.131.130/share/* /client/ /
兩種格式:
rsync -avz xxx@服務器地址::共享名 本地目錄
rsync -avz rsync://xxx@服務器地址/共享名 本地目錄
進行上傳操做:
# cd /client/
# touch client.txt
# rsync -avz /client/client.txt rsync://wdd@192.168.131.130/share/
試驗準備:主機A的IP地址爲192.168.131.130,主機B的IP地址爲192.168.131.136,主機A做爲同步源
一、主機A操做:
同案例2操做
二、主機B操做:
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make
# make install
安裝工具後需更改內核參數:vi /etc/sysctl.conf
fs.inotify.max_queue_events=16384 監控隊列大小fs.inotify.max_user_instances=1024 最多監控實例數fs.inotify.max_user_watches=1048576 每一個實例最多監控文件數
# /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/ #對/client目錄進行實時監控
能夠將上面的命令寫成一個shell腳本,只要/client文件夾下面的文件發生修改,當即用rsync同步文件,腳本以下所示:
# vim inotify_check.sh
#!/bin/bash
SRCCMD=" /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/"
DESTCMD="rsync -avz /client/* rsync://wdd@192.168.131.130/share/"
${SRCCMD}|while read DIRECTORY EVENTS FILE
do
${DESTCMD}
Done
# chmod +x inotify_check.sh
# export RSYNC_PASSWORD=123456
#將上面變量RSYNC_PASSWORD聲明爲全局變量,這樣就不用每次運行上面腳本輸入密碼了
# ./inotify_check.sh #運行腳本
打開另一個窗口,做以下操做:
# cd /client/
# touch 1.txt
只要主機B下的/client文件夾下面的文件發生修改、建立、刪除、移動都會被檢測到,並·被同步到主機A下的/server下
實驗準備:兩臺主機,A主機地址爲192.168.131.130,主機B的IP地址爲192.168.131.136
# ssh-keygen -t rsa
# ssh-copy-id 192.168.131.136
# ssh root@192.168.131.136#測試是否登陸主機B不須要輸入密碼
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
# tar xf ocaml-3.10.1.tar.gz #先安裝unison的底層依賴包
# cd ocaml-3.10.1
# ./configure
# make world opt
# make install
# tar xf unison-2.13.16.tar.gz
# cd unison-2.13.16
# make UISTYLE=text STATIC=true THREADS=true
# make install
# cp unison /usr/local/bin/
# mkdir /backup1
#!/bin/bash
IP="192.168.131.136"
SRC="/backup1"
DEST="/backup2"
/usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \
read DIRECTORY EVENTS FILE
do
/usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}
done
# chmod +x intify_unison.sh
# ssh-keygen -t rsa
# ssh-copy-id 192.168.131.130
# ssh 192.168.131.130 #測試登陸主機A是否須要登陸密碼
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
# tar xf ocaml-3.10.1.tar.gz #安裝unision須要的底層依賴包
# cd ocaml-3.10.1
# ./configure
# make world opt
# make install
# make UISTYLE=text THREADS=true STATIC=true
# make install
# cp unison /usr/local/bin/
# mkdir /backup2
#!/bin/bash
IP="192.168.131.130"
SRC="/backup2"
DEST="/backup1"
/usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \
read DIRECTORY EVENTS FILE
do
/usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}
done
# chmod +x intify_unison.sh
# ./intify_unison.sh
打開另外一個對話窗口,做以下操做:
# cd /backup1/
# touch 1.txt
打開主機B發現了1.txt
# ./intify_unison.sh
打開另外一個對話窗口,做以下操做:
# cd /backup2/
# touch 2.txt
打開主機A發現了2.txt