rsync介紹
我們經(jīng)常需要在不同目錄或者服務(wù)器之間做文件同步和更新,LINUX提供了很多內(nèi)置命令可以使用比如SCP等等,但是今天我們介紹一個(gè)更加強(qiáng)大的工具rsync。rsync命令是一個(gè)遠(yuǎn)程同步工具,可以通過(guò)LAN\WAN快速同步多臺(tái)主機(jī)間的文件,它使用的就是rsync算法達(dá)到本地和遠(yuǎn)程兩個(gè)主機(jī)之間文件同步,該算法是增量算法,即只同步兩個(gè)文件的不同部分,而不是每次同步整個(gè)文件,所以速度是相當(dāng)快
一. 同步源
1. 基于SSH的同步源
setfacl
rsync -avz 用戶(hù)名@服務(wù)器地址:/服務(wù)器目錄/* /本地目錄/
2. 基于RSYNC的同步源
/etc/rsyncd.conf
/etc/rsyncd_users.db 權(quán)限為600
上行同步時(shí),read only = no 且 nobody需要有寫(xiě)入權(quán)限
/etc/rsyncd.conf文件:
address = 192.168.0.198
port 873
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
[share]
comment = soft
path = /server/rsync
read only = no
dont compress = *.gz *.bz *.bz2 *.zip
auth users = wang
secrets file = /etc/rsyncd_users.db
對(duì)rsyncd.conf文件選項(xiàng)個(gè)別解釋?zhuān)ㄉ厦嬗械臎](méi)有寫(xiě)):
uid 指定當(dāng)前模塊傳輸文件時(shí)的守護(hù)進(jìn)程應(yīng)該具有的用戶(hù)ID,默認(rèn)是"nobody"
gid 指定當(dāng)前模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的用戶(hù)組ID,默認(rèn)是"nobody"
max_connections 指定模塊的最大并發(fā)連接數(shù)量,以保護(hù)服務(wù)器超過(guò)限制的連接請(qǐng)求,將被暫時(shí)限制。默認(rèn)是0,也就是沒(méi)有限制。
/etc/rsyncd_users.db文件格式為: wang:123456
啟動(dòng)rsync守護(hù)進(jìn)程:/usr/bin/rsync --daemon
權(quán)限: 服務(wù)權(quán)限 --> 用戶(hù)權(quán)限,即只有服務(wù)權(quán)限還不行,必須還要有用戶(hù)權(quán)限
rsync命令的用法:
基本格式: rsync [選項(xiàng)] 原始位置 目標(biāo)位置
rsync的命令格式可以為:
1. rsync [OPTION]... SRC [SRC]... DEST
2. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
3. rsync [OPTION]... [USER@]HOST:SRC DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六種不同的工作模式:
1. 拷貝本地文件;當(dāng)SRC和DES路徑信息都不包含有單個(gè)冒號(hào)":"分隔符時(shí)就啟動(dòng)這種工作模式。
2.使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將本地機(jī)器的內(nèi)容拷貝到遠(yuǎn)程機(jī)器。當(dāng)DST路徑地址包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。
3.使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將遠(yuǎn)程機(jī)器的內(nèi)容拷貝到本地機(jī)器。當(dāng)SRC地址路徑包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。
4. 從遠(yuǎn)程rsync服務(wù)器中拷貝文件到本地機(jī)。當(dāng)SRC路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。
5. 從本地機(jī)器拷貝文件到遠(yuǎn)程rsync服務(wù)器中。當(dāng)DST路徑信息包含"::"分隔符時(shí)啟該模式。
6. 列遠(yuǎn)程機(jī)的文件列表。這類(lèi)似于rsync傳輸,不過(guò)只要在命令中省略掉本地機(jī)信種工作模式。
常用選項(xiàng):
-a :歸檔模式,遞歸并保留對(duì)象屬性,等同于 -rlptgoD
-v : 顯示同步過(guò)程的詳細(xì)(verbose)信息
-z : 在傳輸文件時(shí)進(jìn)行壓縮(compress)
-H : 保留硬連接文件
-A : 保留ACL屬性信息
--delete : 刪除目標(biāo)位置有而原始位置沒(méi)有的文件
--timeout : 指定超時(shí)時(shí)間
--progress : 顯示備份過(guò)程
--port :指定rsync服務(wù)端口
--password-file :指定客戶(hù)端的密碼文件
-a ::
-r : 遞歸模式,包含文件目錄及子目錄中所有文件
-l : 對(duì)于符號(hào)鏈接文件仍然復(fù)制為符號(hào)鏈接文件
-p : 保留文件的權(quán)限標(biāo)記
-t : 保留文件的時(shí)間標(biāo)記
-g : 保留文件的屬組標(biāo)記(僅超級(jí)用戶(hù)使用)
-o : 保留文件的屬主標(biāo)記(僅超級(jí)用戶(hù)使用)
-D : 保留設(shè)備文件及其他特殊文件
二. 實(shí)時(shí)同步
免密碼驗(yàn)證
1. 基于SSH的同步源
通過(guò)秘鑰對(duì)實(shí)現(xiàn)
2. 基于RSYNC同步源
通過(guò)系統(tǒng)變量實(shí)現(xiàn),export RSYNC_PASSWORD=123456
實(shí)時(shí)同步 inotify+rsync
1. 安裝inotify-tools輔助工具
inotifywait :用于持續(xù)監(jiān)控,實(shí)時(shí)輸出結(jié)果
inotifywatch :用于短期監(jiān)控,任務(wù)完成后再出結(jié)果
inotifywait -mrq -e create,delete /server/rsync
m:持續(xù)監(jiān)控 r:遞歸監(jiān)控 即:監(jiān)控目錄及其子目錄的內(nèi)容
q:簡(jiǎn)化輸出
2.首先實(shí)現(xiàn)免密碼驗(yàn)證,在執(zhí)行下面的腳本文件
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create,delete /tmp/test1"
b="/usr/bin/rsync -avz /tmp/test1/* user1@192.168.0.162:/tmp/test2/"
$a | while read directory event file
do
$b
done