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以上的都支持的。你可以確認下運行:

[root@test 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協定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章