天天看點

Centos下配置rsync伺服器和實時同步

1、安裝

yum -y install rsync

2、設定xinetd

vi /etc/xinetd.d/rsync,内容如下:

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

# allows crc checksumming etc.

service rsync

{

disable = no

socket_type = stream

wait = no

user = root

server = /usr/bin/rsync

server_args = --daemon

log_on_failure += USERID

}

3、設定rsync.conf内容

# Global Settings

uid = root #運作rsync使用者群組

gid = root

use chroot= no

max connections = 80 #最大連接配接數

secrets file = /etc/rsyncd.pwd #全局子產品的使用者名和密碼,格式:test:password,權限必須是600

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

############################################

[test]

path = /var/www/test/

auth users = 123

read only = no #目錄是否隻讀

ignore errors

list = no

#exclude = cache/111/ cache/222/ #忽略的目錄

4、用戶端運作指令如下:

用戶端的密碼檔案rsyncd_test.scrt,隻是密碼,權限必須是600

/usr/bin/rsync -avrop --delete [email protected]::test /root/test --password-file=/etc/rsyncd_test.scrt

5、實時同步

Inotify 是檔案系統事件監控機制,計劃包含在即将釋出的 Linux 核心中作為 dnotify 的有效替代。dnotify 是較早核心支援的檔案監控機制。Inotify一種強大的、細粒度的、異步的機制,它滿足各種各樣的檔案監控需要,不僅限于安全和性能。

首先确認你的核心支援inotify,如果不支援對核心打更新檔,一般情況核心在 2.6.3以上的都支援的。你可以确認下運作:

[[email protected] test]# ls -l /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 Dec 5 17:02 max_queued_events

-rw-r--r-- 1 root root 0 Dec 5 17:02 max_user_instances

-rw-r--r-- 1 root root 0 Dec 5 17:02 max_user_watches

如果出現以上資訊,就說明核心支援inotify

為能在shell下使用inotify特性,需要安裝inotify-tools

下載下傳安裝如下:

wget http://internap.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz

tar zxvf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13

./configure

make

make install

這就ok了,,同步腳本如下:

#!/bin/bash

#---------------------------------------------------------------

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

auth_user=test

remote_ip=10.10.10.10

remote_module=test

local_dir=/root/test

auth_file=/etc/rsyncd_test.scrt/

rsync_path=/usr/bin/rsync

inotify=/usr/local/bin/inotifywait

$inotify -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,move,delete,create,attrib $local_dir | while read file

do

$rsync_path -avrop --delete $local_dir $auth_user@$remote_ip::$remote_module --password-file=$auth_file

done

腳本放入背景運作如下:

/root/in_rsyncd.sh &

inotify 可以監視的檔案系統事件包括:

IN_ACCESS,即檔案被通路

IN_MODIFY,檔案被 write

IN_ATTRIB,檔案屬性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可寫檔案被 close

IN_CLOSE_NOWRITE,不可寫檔案被 close

IN_OPEN,檔案被 open

IN_MOVED_FROM,檔案被移走,如 mv

IN_MOVED_TO,檔案被移來,如 mv、cp

IN_CREATE,建立新檔案

IN_DELETE,檔案被删除,如 rm

IN_DELETE_SELF,自删除,即一個可執行檔案在執行時删除自己

IN_MOVE_SELF,自移動,即一個可執行檔案在執行時移動自己

IN_UNMOUNT,宿主檔案系統被 umount

IN_CLOSE,檔案被關閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,檔案被移動,等同于(IN_MOVED_FROM | IN_MOVED_TO)

rsync 運作參數解釋:

-u ,更新資料

-h , --help 顯示rsync求助資訊

--version 顯示rsync版本

-v , --verbose 複雜的輸出資訊

-q , --quiet 安靜模式,幾乎沒有訊息産生, 常用在以cron執行rsync

-I, --ignore-times 通常rsync為了加快速度會忽略同樣檔案大小且同樣,同樣存取時間點的檔案可以通過此參數開關此快速檢查.

--size-only rsync 隻檢查檔案大小是否改變,不管時間存取點是否改變通常用在mirror, 且對方時間不太正确時

-c, --checksum 在傳送之前透過128bit的md4檢查碼來檢查所有要傳送的檔案(會托滿速度);

-a, --archive archive mode 權限儲存模式,相當于 -rlptgoD 參數.很快速的儲存幾乎所有的權限設定,除了硬式連接配接(透過-H設定).

-r, --recursive 複制所有下面的資料(透過)

-R, --relative 使用相對路徑

如: rsync foo/bar/foo.c remote:/tmp/ 在遠端産生/tmp/foo.c檔案

rsync -R foo/bar/foo.c remote:/tmp/ 在遠端産生/tmp/foo/bar/foo.c 檔案

-R, --relative 不使用相對路徑

-b, --backup 目的地端先前已經存在的檔案在傳輸或删除前會被備份

--backup-dir=DIR 設定備份的資料夾

--suffix=SUFFIX 指定備份的檔案名稱字尾形式(預設為~)

-K, --keep-dirlinks 接收方将連接配接到資料夾的檔案視為資料夾處理

-l, --links 複制所有的連接配接

-H, --hard-links 保留硬式連結

-p, --perms 保留檔案權限

-o, --owner 保留檔案所有者(root .ly)

-g, --group 保留檔案群組

-D, --devices 保留device資訊(root .ly)

-t, --times 保留時間點

-n, --dry-run 不實際執行傳送, 隻顯示将會有的傳輸動作

-S, --sparse 嘗試去處理稀疏的檔案, 讓這些檔案在目的端占去較少的磁碟空間

-W, --whole-file 複制所有的檔案, 不額外作檢查

--no-whole-file 關閉 --whole-file 參數

-x, --one-file-system 不要跨越檔案系統分界(隻在一個檔案系統處理)

-B, --block-size=SIZE 強制透過rsync程式去比對修複block-sizeforce

-e --rsh=COMMAND 定義所試用的remote shell

--rsync-path=PATH 定義rsync在遠端機器存放資料的路徑

--existing 隻對比更新目的端已經存在的檔案

--ignore-existing 忽略目的斷已經存在的檔案(也就是不更新)

--delete 删除傳送斷已經不存在,而目的端存在的檔案

--delete-excluded 除了把傳送端已經不存在, 而目的端存在的檔案删除之外, 也删除 --exclude 參數所包含的檔案

--delete-after rsync預設會在檔案傳送前進行相關删除動作確定接收端有足夠的檔案空間,

單可以透過 --delete-after 讓删除動作在檔案傳送後在進行删除

--ignore-errors 忽略任何錯誤即使是I/O error 也進行 --delete 删除動作

--max-delete=NUM 定義rsync不要删除超過NUM個檔案

--partial rsync若遇到傳輸過程中斷時, 會把那些已經傳輸的檔案删除.

在某種狀況下保留那些部分傳送的檔案是令人高興的;

你可以透過 --partial 參數達到這個目的.

--partial-dir=DIR 在 --partial 參數啟動時, 你還是可以定義rsync把那些部分傳送的檔案

寫入定義的資料夾, 而非直接寫入目的端,需要注意的是,

此資料夾不應該被其他試用者可以寫入.(如:/tmp)

--force 當目的端資料夾被傳送端非資料夾名稱覆寫時, 強制rsync删除資料夾, 即使該資料夾不是空的.

--numeric-ids 不将傳送端檔案的uid及gid值, 與目的端的使用者/群組進行配對,

若傳送端并沒有uid及gid的對應名稱(如:原帳号群組被删除的遺留檔案),

或目的端沒有相對應的帳号/群組, 保留數字型式的uid/gid

--timeout=TIMEOUT 設定I/O 逾時的時間(秒). 超過這個秒數而沒有資料傳送, rsync将會結束. 預設為0,也就是沒有定義逾時時間

-T, --temp-dir=DIR 定義rsync在接收端産生暫時性的複制檔案時使用資料夾暫存, 預設時直接在接收端資料夾直接産生暫存檔案

--compare-dest=DIR 定義rsync在目的端建立資料夾來比對傳送過來的檔案.

--link-dest=DIR 與 --compare-dest 相同,但同時會針對無法改變的檔案建立硬式連結.

-z, --compress 壓縮模式, 當資料在傳送到目的端進行檔案壓縮.

-P -P參數和 --partial --progress 相同.隻是為了把參數簡單化.

-C, --cvs-exclude 排除那些通常不希望傳送的檔案, 定義的方式與CVS傳送相同:

RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state

.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej

.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/

符合以上條件的都會被忽略不傳送.

--exclude=PATTER 符合PATTERN(規則表示式)樣式的檔案不僅行傳送

--exclude-from=FILE 和 --exclude 參數相同, 不過是把不進行傳送的檔案事先寫入某一檔案.

執行時, 透過此參數讓rsync讀取.

(; #開頭的行列或者空白會被rsync忽略)

--include=PATTERN 定義rsync不要排除符合pattern樣式的檔案

--include-from=FILE 和--include參數相同,隻不過把要包含的檔案寫到某一檔案.

--files-from=FILE 把要傳送的檔案名稱都精确的寫入某一檔案, 讓rsync讀取.

如: rsync -a --files-from=/tmp/foo /usr remote:/backup

-0 --from0 定義檔案所要讀取的檔案時null字元結尾.

--version 現四版本資訊.

--daemon 定義rsync以daemon型态執行

--no-detach 當以daemon形态執行時,不要進行分裂且變成背景程式.

--address=ADDRESS 定義所要連接配接(bind)的ip位置或者是host名稱(daemon限定)

--config=FILE 定義所要讀取的設定檔rsyncd.conf位置(daemon限定)

預設值為 /usr/local/etc/rsyncd.conf

--port=PORT 定義rsyncd(daemon)要旨行的port(預設為tcp 873)

--blocking-io 使用blocking I/O連結遠端的shell, 如rsh, remsh

--no-blocking-io 使用non-blocking連結遠端的shell, 如ssh(預設值)

--stats 顯示檔案傳送時的資訊狀态

--progress 顯示傳送的進度.(給檔案傳送時,怕無聊的人用的..)

--log-format=FORMAT 定義log的格式(在rsyncd.conf設定)

--password-file=FILE 從檔案讀取與遠端rsync伺服務連結的密碼

--bwlimit=KBPS 定義傳輸頻寬的大小(KBytes/秒)

--write-batch=FILE 把記錄資料寫入一個檔案(給其他相同環境且相同需求的機器試用)

--read-batch=FILE 透過讀取記錄檔案來進行傳輸.(檔案由 --write-batch 參數産生)

--checksum-seed=NUM 定義檔案 checksum-seed 的大小(byte)

-4 --ipv4 使用IPv4協定

-6 --ipv6 使用IPv6協定