rsync(remote synchronize)是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機之間的文
件。也可以使用 rsync 同步本硬盤中的不同目錄。
rsync 是用於替代 rcp 的一個工具,rsync 使用所謂的 rsync算法 進行數據同步,這種算法只傳送兩個文件
的不同部分,而不是每次都整份傳送,因此速度相當快。您可以參考 How Rsync Works A Practical Overview 進一步瞭解 rsync 的運作機制。
rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,目前由 [url]http://rsync.samba.org[/url] 維護。rsync 支持大多數的類 Unix 系統,無論是 Linux、Solaris 還是 BSD上 都經過了良好的測試。 CentOS系統默認就安裝了 rsync 軟件包。 此外,在 windows 平臺下也有相應的版本,如 cwrsync 和DeltaCopy 等。
2. 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等
5. 可以使用 rsh、ssh 方式來傳輸文件,當然也可以通過直接的 socket 連接
在使用 rsync 進行遠程同步時,可以使用兩種方式:遠程 Shell 方式(建議使用 ssh,用戶驗證由 ssh 負
責)和 C/S 方式(即客戶連接遠程 rsync 服務器,用戶驗證由 rsync 服務器負責)。
Rsync的參數詳細解釋
-v, --verbose 詳細模式輸出
-q, --quiet 精簡輸出模式
-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑信息
-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名爲~filename。可以使用--suffix選項來指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結
-L, --copy-links 想對待常規文件一樣處理軟鏈結
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結
--safe-links 忽略指向SRC路徑目錄樹以外的鏈結
-H, --hard-links 保留硬鏈結
-p, --perms 保持文件權限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設備文件信息
-t, --times 保持文件時間信息
-S, --sparse 對稀疏文件進行特殊處理以節省DST的空間
-n, --dry-run 現實哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進行增量檢測
-x, --one-file-system 不要跨越文件系統邊界
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
--delete 刪除那些DST中SRC沒有的文件
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
--delete-after 傳輸結束以後再刪除
--ignore-errors 及時出現IO錯誤也進行刪除
--max-delete=NUM 最多刪除NUM個文件
--partial 保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸
--force 強制刪除目錄,即使不爲空
--numeric-ids 不將數字的用戶和組ID匹配爲用戶名和組名
--timeout=TIME IP 超時時間,單位爲秒
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件
--size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認爲0
-T --temp-dir=DIR 在DIR中創建臨時文件
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
-P 等同於 --partial
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸的文件模式
--include=PATTERN 指定不排除而需要傳輸的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 綁定到特定的地址
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
--port=PORT 指定其他的rsync服務端口
--blocking-io 對遠程shell使用阻塞IO
-stats 給出某些文件的傳輸狀態
--progress 在傳輸時現實傳輸過程
--log-format=formAT 指定日誌文件格式
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, --help 顯示幫助信息
一、首先做ssh的認證讓文件同步的時候
1、ssh 信任的建立
//用於雙機直接相互傳輸問題免密碼
1)更改兩個節點上hosts文件#vi /etc/hosts
///////////////////////////////////
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 node1 node1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.1.31 node1
192.168.1.32 node2
///////////////////////////////////
:wq
2 //生成ssh本機的密鑰
//三次回車後完成
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
3)
進入到用戶的主目錄下,默認爲root用戶的主目錄
#cd /root
其他用戶爲,如soft
使用ls -al 察看是否是否存在.ssh這個文件夾
可以看到兩個文件
[root@web1 /]# cd /root/.ssh
其中id_rsa爲私鑰,id_rsa.pub爲公鑰。
4)
//登陸到在node2上
//重複上面1,2,3步,在node2上建立相應的密鑰。
5)
//重新登陸到node1上
//將公鑰改名,並添加到另一臺電腦的公鑰內。
#cd /root/.ssh
# mv id_rsa.pub ha1
//修改公鑰的姓名
//把公鑰傳輸到另一臺電腦上
6)
//登陸到node2上
//將web1的密鑰添加到node2的公鑰中去
#mv id_rsa.pub authorized_keys
// AuthorizedKeysFile 指令指定了用於公鑰認證的公鑰文件(默認 ~/.ssh/authorized_keys)位置,每行一個公鑰。此文件中空行和以'#'開頭的行將被當作註釋忽略
//修改文件名陳爲ssh可以識別的key文件authorized_keys
7)
//將密鑰傳回到node1上,
//信任建立。
//然後檢測
#ssh node2
即可登陸到另外的機器上。
二、在node1上安裝rxync
1、安裝rsync程序
tar -zxvf rsync-3.0.4.tar #解開壓縮包
./configure --prefix=/usr/local/rsync
編譯與安裝
2、在/etc下創建rsync.conf文件
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
secrets file = /etc/rsyncd.secrets
3、在/etc下創建/etc/rsyncd.secrets 文件
此文件格式爲 用戶名:密碼
4、在/etc/service 添加一行
5、添加環境變量,在/etc/profile添加一行
#echo “export PATH=$PATH:/usr/local/rsync/bin” >> /etc/profile
#source /etc/profile
5、啓動rsync服務
6、讓服務器開機的時候自啓動
echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.local
創建一個腳本,
vi /usr/local/rsync/replcation
# This . does personal backups to a rsync backup server. You will end up
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the name of the primary
SERVER=node1
##############################################
OPTS="-a -p -t -g -o --delete --partial"
# now the actual transfer
rsync $OPTS root@$SERVER:$DIR $DIR
vi /usr/local/rsync/replcation1
# This . does personal backups to a rsync backup server. You will end up
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the name of the primary
SERVER=node1
##############################################
OPTS="-a -p -t -g -o --delete --partial"
# now the actual transfer
rsync $OPTS $DIR root@$SERVER:$DIR
//通過這個腳本把當前的數據同步到node1
chmod 770 /usr/local/rsync/replcation
chmod 770 /usr/local/rsync/replcation1
添加到定時任務裏
node1
[root@web2 ~]# crontab -e
0 */3 * * * /usr/local/rsync/replcation
0 */4 * * * /usr/local/rsync/replcation1
//保存就行了