1. 程式人生 > >linux rsync實時同步

linux rsync實時同步

資源 目標 har 本地 rsync實時同步 符號 ecif cmd bash

rsync同步

同步與復制的差異:
復制:完全拷貝源到目標
同步:增量拷貝,只傳輸變化過的數據

同步操作:
remote sync 遠程同步
支持本地復制,或與其他ssh,rsync主機同步。
官方網站:http://rsync.samba.org/

命令用法
rsync [選項] 源目錄 目標目錄
常用選項:
-a:歸檔模式,相當於-rlptgiD
-v:顯示同步過程詳細信息
-z:傳輸過程中啟用壓縮
-r:遞歸,包括目錄/子目錄及所有文件
-l:保留符號鏈接文件
-p,-t:保留文件的權限,時間標記
-o,-g:保留文件的屬主/屬組標記
-D:保留設備文件及其他特殊文件
-H:保留硬鏈接文件
-A:保留文件的ACL屬性信息
-n:測試同步過程,不做實際修改
--delete:刪除目標文件夾內多余的文檔(確保源和目標完全一致)

本地同步
rsync [選項] 本地目錄1 本地目錄2
rsync [選項] 本地目錄1/ 本地目錄2

[[email protected] ~]# rsunc -a /boot /xxx(同步整個文件夾)
[[email protected] ~]# rsunc -a /boot/ /xxx/(只同步目錄下數據)


服務端要求:服務端應開啟sshd服務,並提供授權的用戶,密碼,此目錄對遠程目錄必須有相應的權限
rsync+ssh遠程同步
下行同步:rsync [選項] [email protected]/ 本地目錄
上行同步:rsync [選項] 本地目錄/ [email protected]

/* */

下行同步實例:
[[email protected] ~]# rsync [email protected]:/boot/(瀏覽遠程目錄)
[[email protected] ~]# rsync -av [email protected]:/boot/ /xxx/(將遠程主機/boot/目錄備份到本地)
[[email protected] ~]# ls /xxx/(查看結果)
上行同步實例:
[[email protected] etc]# rsync -av /etc [email protected]

*/:/opt/(將本地的/etc/目錄備份到遠程主機)
[[email protected] opt]# ls(遠程機查看結果)
rh

————————————————————————————————————————————
rsync+rsync遠程同步

同步資源配置文件/etc/rsyncd.conf
[[email protected] ~]# chkconfig rsync on(開啟)
[[email protected] ~]# service xinetd restart(重啟服務)

創建rsyncd.conf共享配置(若是匿名共享。可去掉auth users設置)
[[email protected] ~]# vim /etc/rsyncd.conf
[hydra] (共享文件名)
path = /usr/src(共享文件目錄)
comment = Rsunc Share Test
read only = yes
dont compress = *.gz *.bz2 *.tgz *.zip
auth users = ruser (許可的用戶)
secrets file = /etc/rsyncd_users.db(用戶賬戶密碼的存放路徑)
[[email protected] ~]# vim /etc/rsyncd_users.db(創建用戶,密碼存放文件)
ruser:123456(用戶:密碼)
root:Taren1
hydra:Anonymous
[[email protected] ~]# chmod 600 /etc/rsyncd_users.db(更改存放用戶,密碼文件權限)

查看共享資源:rsync [email protected]::

下行同步:rsync [選項] [email protected]/ 本地目錄
上行同步:rsync [選項] 本地目錄/ [email protected]

下行同步實例:
[[email protected] ~]# rsync -av [email protected]::hydra/ /myhydra
[[email protected] ~]# ls /myhydra/(查看文件)
debug kernels
上行同步實例:
[[email protected] ~]# rsync -av /opt [email protected]::hydra
[[email protected] ~]# ls /usr/src/(查看文件)
debug kernels

——————————————————————————————————————————

關於同步的實時性
依賴於兩個組件:
監控源文檔的變化(inotify)
調用同步操作的命令行(rsync)語句
關於inotify機制:
linux內核2.6.13以上版本默認支持
需要額外安裝控制工具,比如inotify-tools

inotify實時同步(inotifywait監控目錄程序)
inotify-tools-3.13.tar.gz
源碼包編譯安裝:
解包:[[email protected] ~]# tar xf /root/inotify-tools-3.13.tar.gz -C /usr/src/
配置:[[email protected] ~]# cd /usr/src/
[[email protected] inotify-tools-3.13]# ./configure
編譯:[[email protected] inotify-tools-3.13]# make
安裝:[[email protected] inotify-tools-3.13]# make install
[[email protected] ~]# inotifywait
No files specified to watch!

inotifywait監控
基本用法
inotifywait [選項] 目標文件夾
常用命令選項
-m,--monitor:啟用監控
-r,--recursive:遞歸,涵蓋所有子目錄
-q,--quiet:減少輸出信息
-e,--event:限定要監控的事件類型

實例:
監控/opt文件夾
事件類型:modify,move,create,delete,attrib
[[email protected] ~]# inotifywait -mrq -e modify,move,create,delete,attrib /opt
[[email protected] ~]# [[email protected] ~]# vim /root/irsync.sh(寫個腳本,放後臺執行)
#!/bin/bash
DIR1="/opt"(DIR1是個變量,後期好更改)
RCMD="rsync -az --delete $DIR1 /opt2/"(RCMD變量)
inotifywait -mrq -e create,delete,move,attrib,modify $DIR1 | while read x y z
do
$RCMD(這個變量相當於執行rsync -az --delete /opt /opt2/)
done &

實例:
網站實時鏡像
實現主機svr —》主機pc的網站實時鏡像
雙方的目錄均為/var/www/html/
以svr為同步發起方,配置inotfy+rsync同步
以pc為同步目標,基於ssh驗證(如果不想輸密碼,可以給對方公鑰)
rsync -az --delete /var/www/html/ [email protected]:/var/www/html/
[[email protected] ~]# vim /root/irsync.sh (要實時同步就修改腳本文件)
#!/bin/bash
DIR1="/var/www/html/"
RCMD="rsync -az --delete $DIR1 [email protected]:$DIR1
"
inotifywait -mrq -e create,delete,move,attrib,modify $DIR1 | while read x y z
do
$RCMD
done &

————————————————————————————————————————————

linux rsync實時同步