Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。
Rsync本來是用於替代rcp的一個工具,目前由rsync.samba.org維護,所以rsync.conf文件的格式類似於samba的主配置文件。Rsync可以通過rsh或ssh使用,也能以daemon模式去運行,在以daemon方式運行時Rsync server會打開一個873端口,等待客戶端去連接。連接時,Rsync server會檢查口令是否相符,若通過口令查核,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,以後則就只需進行增量備份。
Rsync支持大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在windows平台下
也有相應的版本,如cwRsync和Sync2NAS等工具。
安裝rsync3.0.9版本
http://rsync.samba.org/ftp/rsync/下載地址
1、 下載二進制源碼rsync-3.0.9.tar.gz和補丁程序服務器和客戶端都用這個程序。
2、 解壓解包 # tar zxvf rsync-3.0.9.tar.gz 和補丁
3、 配置 # cd rsync-3.0.9
4 配置./configure --prefix=/usr/local/rsync
5、 編譯安裝 # make&&make install
6、 把上述步驟在客戶端和服務器端各執行一遍。
7. 配置文件rsyncd.conf
vi /etc/rsyncd.conf
#全局參數設置:這部分設置的參數影響整個程序的運行
uid = root #rsync運行時的用戶ID (關於用戶ID和用戶組ID的設置只要保證具有讀取要同步文件和文
件夾的權限即可)
gid = root #rsync運行時的用戶組ID
max connections = 0 #同時最大的連接數,0為不限制
pid file = /var/log/rsync/rsyncd.pid #記錄rsync運行時的進程ID
lock file = /var/log/rsync/rsync.lock #以文件的方式鎖的方式,保證rsync的一次運行
log file = /var/log/rsync/rsyncd.log #rsync日志信息包括啟動信息同步信息等
port = 873 #可以指定rsync運行時使用的端口,默認使用873(不指定則使用
默認)
use chroot = no #不使用chroot
#同步模塊配置
[data] #要同步的文件夾的別名,此處直接寫的accounts,只是一個名稱方便記憶即可,客戶
端同時要用到
path = /data #指定要同步的具體文件夾,此處為實際同步的文件夾
comment = backup data #備注信息,主要是一些說明信息,用來幫助記憶等
ignore errors #忽略一些無關的錯誤信息
read only = false #是否設置以只讀的方式運行,本工具支持對外同步和回傳喲
list = false #是否允許客戶端查看文件列表
hosts allow = 192.168.40.42 #允許同步的客戶機IP,多個用","隔開
auth users = test #同步認證時使用的用戶名,可以任意指定,但必需存在於下一項的密碼文件中
secrets file = /root/rsync.passwd #密碼認證文件,此文件中包含客戶端認證時的用戶名和密碼的對應關系 ,配置文件名可以任意
centos6的配置文件如下:
服務端配置文件:
[root@localhost rsync]# cat /etc/rsyncd.conf
uid = root
gid = root
max connections = 200
timeout = 600
use chroot = no
read only = no
port = 873
log file=/var/log/rsyncd.log//記錄日志
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[data]//第一行是模塊的名字,必須有這行
path=/data//指定要同步的具體文件夾,此處為實際同步的文件夾
comment=backup data//備注信息,主要是一些說明信息,用來幫助記憶等
ignore errors//忽略一些無關的錯誤信息防止因為資源不足或其他的通信出錯導致嚴重問題
hosts allow=192.168.40.42//允許同步的客戶機IP,多個用","隔開
auth user=test//驗證用戶,沒有這行表示匿名,安全起見請加上這行
secrets file=/root/rsync.passwd//密碼認證文件,此文件中包含客戶端認證時的用戶名和密碼的對應關系 ,配置
文件名可以任意secrets file分兩部分,服務器端跟備份服務器端
服務器端 格式為登錄用戶名:登錄用戶密碼
備份服務器端 格式為登錄用戶密碼(不需要寫入登錄用戶名)
按上要求設置服務器端的密碼文件
客戶端配置文件
[root@localhost rsync]# cat /etc/rsyncd.conf
uid = root
gid = root
max connections = 200
timeout = 600
use chroot = no
read only = no
port = 873
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[data]
path=/data
comment=backup data
ignore errors
hosts allow=192.168.40.40
auth users=test
secrets file=/root/rsync.passwd
服務端:
[root@localhost ~]# cat rsync.passwd //這個文件一定要設置為chmod 600不然無法完成RSYNC設置
test:123456
客戶端:
[root@localhost ~]# cat rsync.passwd //這個文件一定要設置為chmod 600不然無法完成RSYNC設置
123456
服務端:
echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf&">>/etc/rc.local//讓系統開機運行
客戶端:
echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf&">>/etc/rc.local//讓系統開機運行
reboot重啟啟動後
netstat -an |grep 873 查看服務是否開啟並監聽端口如有監聽服務正常
[root@localhost ~]# netstat -an|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 :::873 :::* LISTEN
unix 3 [ ] STREAM CONNECTED 8873
如果開啟的iptables就要
iptables -I INPUT -p tcp --dport 873 -j ACCEPT 命令開啟防火牆的873端口
服務端腳本
#!/bin/sh
/usr/local/rsync/bin/rsync -vzrtopg --progress [email protected]:/data /data --delete
客戶端腳本
#!/bin/sh
/usr/local/rsync/bin/rsync -vzrtopg --progress --password-file=/root/rsync.passwd /data
[email protected]::data --delete
解釋 --progress 顯示傳輸過程
--delete 通信兩端被同步的一段如果之前備份的文件有刪除的話備份的那端也刪除同樣文件
--password-file是備份機器的密碼文件的路徑方便crontab調用
[email protected]::data /data是用test帳號登錄遠程服務器192.168.40.40調用test模塊備份到本地/data
文件夾下如果命令是/data [email protected]::data的話正好相反是講本地/data的文件同步到遠程機器
192.168.40.40的data模塊定義的路徑地方!!!!!(警告!!!這點一定要搞懂,因為備份使用--delete 刪除
已經刪除的文件一定要確定備份方向)
crontab 設置定時任務同步備份實現自動備份
同步參數
常用參數-avz ,--progress,--delete
-v, --verbose 詳細模式輸出
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用--suffix選項來指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結
-L, --copy-links 想對待常規文件一樣處理軟鏈結
-H, --hard-links 保留硬鏈結
-p, --perms 保持文件權限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設備文件信息
-t, --times 保持文件時間信息
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
--delete 刪除那些DST中SRC沒有的文件
--force 強制刪除目錄,即使不為空
-timeout=TIME IP超時時間,單位為秒
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸的文件模式
--include=PATTERN 指定不排除而需要傳輸的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
--port=PORT 指定其他的rsync服務端口
測試:在42客戶端機器上創建一個test目錄
[root@localhost data]# mkdir test
[root@localhost data]# ls
1 2 3 333 4 5 6 ggg kkk test
40服務上沒有test這個目錄
[root@localhost data]# ls
1 2 3 333 4 5 6 ggg kkk
[root@localhost ~]# sh test.sh
[email protected]'s password:
receiving incremental file list
data/
data/test/
sent 28 bytes received 200 bytes 8.29 bytes/sec
total size is 0 speedup is 0.00
[root@localhost data]# ls
1 2 3 333 4 5 6 ggg kkk test
遇到的問題
1.剛開始/data目錄的權限問題所以被拒絕了。
2.還有剛開始用/usr/local/rsync/bin/rsync --daemon 啟動發現沒有配置文件,所以制定配置文件。
本文出自 “有志者事竟成!” 博客,請務必保留此出處http://zh888.blog.51cto.com/1684752/780657