|
|
測試環境介紹
Server :192.168.1.147
Client :192.168.1.190
服務器和客戶端的對應的同步目錄都是 /data/test/
目標:在客戶端上指定目錄下操作,數據會及時同步到服務器上對應模塊的指定目錄下
版本1.0:單純使用rsync實現主機間的數據同步
一:Rsync簡介
rsync,remote synchronize顧名思意就知道它是一款實現遠程同步功能的軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息。rsync是用 “rsync 算法”提供了一個客戶機和遠程文件服務器的文件同步的快速方法,而且可以通過ssh方式來傳輸文件,這樣其保密性也非常好,另外它還是免費的軟件。
二:服務器端和客戶端都需要安裝rsync
1:系統包安裝(系統默認已經安裝,推薦這種方式,本例采用系統包)
yum install rsync
2:源碼安裝
http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
tar zxvf rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure --prefix=/usr/local/rsync
&make &&make install
三:服務器端配置(客戶端無需配置文件)
1:編寫配置文件。/etc下沒有rsyncd.conf這個文件,不過我們可以新建
Vim /etc/rsyncd.conf
[global] #全局配置
uid = nobody
gid = nobody
use chroot = no
timeout = 300
port = 873 #默認就是873端口,可不寫
max connections = 30 #最大連接數
pid file = /var/log/rsyncd.pid #運行進程的ID寫在那里,可不要
lock file = /var/run/rsyncd.lock #這個可以不要
log file = /var/log/rsyncd.log #日志文件寫在那里,這個得要
log format = %t %a %m %f %b #日志的格式 %t 當前時間 %a 遠程IP地址 %m 模塊名 %f 文件名 %b 實際傳輸的字節數 %u用戶名
[backup] # 要同步的模塊名
path = /data/test #要同步的目錄
comment =test #這個名名稱無所謂
read only = no # no客戶端可上傳文件,yes只讀
write only = no # no客戶端可下載文件,yes不能下載
list = no #是否提供資源列表
ignore errors #忽略一些無關的IO錯誤
hosts allow = 192.168.1.0/24 #本模塊允許通過的IP地址
hosts deny = * #禁止主機IP
auth users = www #登陸系統使用的用戶名,沒有默認為匿名。
secrets file=/etc//rsyncd.secret #密碼文件存放的位置
2、設置rsync服務器端同步密鑰和同步目錄權限;
vi /etc//rsyncd.secret
www:123456 #用戶名www:密碼123456)
chmod 600 /etc/rsyncd.secret #更改權限,否則報錯
chmod 777 /data/test -R #修改同步目錄權限,否則報錯
3:啟動與關閉
A:daemon方式啟動
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
關閉: kill pid 或者 pkill rsync
![]()
B:利用xinetd控制rsync啟動
vim /etc/xinetd.d/rsync (將yes改為no)
![]()
/etc/init.d/xinetd start
四:linux客戶端配置和測試
1:客戶端環境配置
A:客戶端只需要安裝并啟動rsync,無需配置文件
/usr/bin/rsync --daemon 或者 /etc/init.d/xinetd start
B:建一個密碼文件,只需要些和服務器一樣的密碼
echo 123456 > /etc/rsyncd.secret
chmod 600 /etc/rsyncd.secret
2:客戶端同步命令
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
需要解釋的參數:
-vzrtopg -v 詳細模式輸出 -z對文件在傳輸中壓縮 -r 對子目錄遞歸模式處理 -t保持文件時間 -p保留權限 -o保留屬主 -g保留屬組
--delete 刪除服務器上以前存在客戶端沒有的數據
--exclude-from=文件名 排除文件中指定模式的文件,不傳送
/data/test/ 客戶端上需要同步的目錄
www 服務器上backup模塊定義的用戶名
backup 指定服務器上要接受同步的模塊名稱
3:最后不妨編寫個腳本,在后臺執行
cat /root/rsync.sh
nohup sh /root/rsync.sh &
五:總結
1:遇到的問題
在配置rsync時,對客戶端和服務器端的角色定位不清晰。到底是客戶端把數據同步到服務器端,還是把服務器端的數據同步到客戶端。按照我的理解是把客戶端提交的內容同步到服務器上,但是我在客戶端執行同步命令時卻發現把服務器端的數據同步到了客戶端。我執行的命令如下
rsync -vzrtopg --delete www@192.168.1.147::backup /data/test/ --password-file=/etc/rsyncd.secret
而我理想中的方式應該是:
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
顯而易見。rsync與scp的上傳下載方式類似,無所謂客戶端,服務器端,一臺機器可以把本機數據同步到另一臺,也可以把另一臺指定目錄下的數據同步到本地。為了方便就把配置復雜一點(需要編寫配置文件)的哪臺機器當做服務器端
2:思考
上面的兩種方式,個人認為在不同的場景有不同的應用
A:服務器端作為備份使用
當服務器端做備份時,需要將多個客戶端的數據同步到服務器的對應目錄中,這時為了減少工作量,把備份服務器作為服務器端,客戶端只需要在本地安裝rsync,建立密碼文件,寫個同步腳本
把客戶端的/data/test/ 同步到服務器端的backup模塊下對應的目錄
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
B:服務器端做分發時使用
當有一臺服務器(svn服務器)需要把數據分發到不同項目對應的服務器上。此時可以吧svn服務器作為服務器端??蛻舳藦姆掌鞫送綄臄祿?。
rsync -vzrtopg --delete www@192.168.1.147::backup /data/test/ --password- file=/etc/rsyncd.secret
把服務器端backup模塊定義的目錄內容同步到客戶端的 /data/test/目錄下
3:rsync的優缺點(摘自撫琴煮酒《構建高可用linux服務器》)
rsync在Linux/Unix下是一個比較重要和實用的服務.rsync具有安全性高,備份迅速,支持增量備份等優點,通過rsync可以解決對實時性不高的數據備份需求。但是隨著應用系統規模的不斷擴大,對數據的安全性和可靠性提出了更好的要求。rsync在高端業務系統中逐漸暴露出很多不足。首先rsync同步數據時需要掃描所有文件后進行對比,然后差量傳輸,大于大數據這是非常低效的。其次,rsync不能時時的去檢測,同步數據?;谝陨显颉;谝陨显蚩紤]采用rsync+inotify解決這些問題
|
|