Rsync的文件同步實現 一、rsync 簡介 Rsync(remote synchronize)是一個遠程數據同步工具,簡要的概括就是主機於主機之間的文件目錄數據的一個同步。 它的特性如下: 可以鏡像保存整個目錄樹和文件系統。 可以很容易做到保持原來文件的許可權、時間、軟硬鏈接等等。 無須特殊許可權即 ...
Rsync的文件同步實現
一、rsync 簡介
Rsync(remote synchronize)是一個遠程數據同步工具,簡要的概括就是主機於主機之間的文件目錄數據的一個同步。
它的特性如下: 可以鏡像保存整個目錄樹和文件系統。 可以很容易做到保持原來文件的許可權、時間、軟硬鏈接等等。 無須特殊許可權即可安裝。 快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。 安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。 支持匿名傳輸,以方便進行網站鏡象 度娘上面的解析。(我懶得看,可謂見其文,不如悟其理。看著我操作一遍立刻明白!)總的來說是一個容錯、可靠、高效的文件同步工具 。
二、環境需求(虛擬機上面搭建的環境)
系統:ceotos 6.5 內核:2.6.32-431.el6.x86_64
主機A:192.168.0.244/24
主機B:192.168.0.144/24
rsync-3.1.2.tar.gz
三、搭建rsync
rsync在主機A上面配置:
註意:rsync最重要的2個文件 1、rsyncd.conf 配置文件
2、rsyncd.password 用戶密碼文件
其他的rsyncd.motd 這些是次要的,這隻是一個顯示頁面信息,類似於訪問一個伺服器的時候提示的一些廣告似的信息。
本次操作中我在主機A的etc目錄下麵直接創建了上面三個文件。
-rw-r--r-- 1 root root 443 Aug 16 10:49 /etc/rsyncd.conf -rw-r--r-- 1 root root 252 Aug 16 10:44 /etc/rsyncd.motd -rw-r--r-- 1 root root 18 Aug 16 10:44 /etc/rsyncd.password
rsync.passwd:
nowview:nowcaster
rsync.motd:(打廣告了)
***************************************** * * * Rsync * * * * * *****************************************
rsyncd.conf:這裡我只是主要測試這個文件同步的功能,你們需要其他更多的功能的話,可以自行添加相關參數模塊即可,可以參考:
http://www.cnblogs.com/mchina/p/2829944.html
#This is rsync conf###### uid = nowview #需要添加的,以及下麵的模塊裡面的目錄backup的屬性需要改為nowview用戶的 gid = nowview #關於這個uid跟gid沒有處理好,後面在同步備份文件的時候後報錯,文件許可權不夠。用root最保守,不過安全性。。這個需要自己認真調配置參數 max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log #可以設置顯示格式log format = %t %a %m %f %b motd file = /etc/rsyncd.motd #第一個打廣告信息 - - [backup] #同步的模塊的名稱 path = /home/backup #模塊下麵的同步具體路徑 ignore errors read only = false list = false hosts allow = * hosts deny = 0.0.0.0/32 auth users = nowview #用戶名 secrets file = /etc/rsyncd.password exclude = www/ GR068/ #這是除了home目錄的下www 跟GR068目錄 comment = loading..... #第二個打廣告信息,下麵測試的時候可以看到 - -
找一下rsync的主程式,一般安裝在了 /usr/local/bin/rsync
cp -a /usr/local/bin/rsync /usr/bin/rsync 放到bin下麵
下麵使用daemon啟動rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
ps看一下進程,rsync的預設埠是873
[root@主機A-144 home]# ps -ef |grep rsync root 5835 1 0 10:51 ? 00:00:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf root 5864 1323 0 11:08 pts/1 00:00:00 grep --color rsync
[root@主機A-144 home]# netstat -lantup |grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5835/rsync tcp 0 0 :::873 :::* LISTEN 5835/rsync
繼續。。。
想開機啟動的話,把
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf 添加到/etc/rc.d/rc.local 下麵即可
註意:1、這個rsyncd.passwd 文件 的所屬組是root 如果你的當前用戶比如是rsync那就是改成rsync即可
chown rsync.rsync /etc/rsyncd.password
2、rsyncd.passwd 的許可權改為600 否則密碼無法訪問
[root@主機A-144 ~]# chmod 600 /etc/rsyncd.password [root@主機A-144 ~]# ll -d /etc/rsyncd.password -rw------- 1 root root 18 Aug 16 10:44 /etc/rsyncd.password [root@主機A-144 ~]#
在主機A添加nowview用戶
useradd nowview
以上在主機A配置全部完畢!
四、測試
下麵在主機B上面進行測試。
曾經在測試的時候出現過形形色色的問題(粗心--),我把這些問題歸納在一起。
註意:1、為了方便測試,我就把主機A和主機B的防火牆直接關閉掉,如果你對這方面有要求的話,就直接把873這個埠從兩邊打通即可。
2、主機B不用再做任何的配置和操作,只要保持連通性即可。除非你想免去密碼訪問,每次都輸入密碼使你心煩,那就在etc下麵跟主機A一樣創建一個密碼文檔,註意了。這個密碼文檔只需要填寫密碼即可。這個密碼文檔一樣是600許可權!
下麵做簡單的訪問
[root@主機B-244 ~]# rsync -avzp [email protected]:: ***************************************** * * * Rsync * * * * * *****************************************
下麵測試,免除密碼訪問
rsync -avzp --delete [email protected]::backup /backup244/ --password-file=/etc/rsyncd.password
在主機B的根目錄下麵已經創建了backup244的備份目錄了,現在把主機共用A模塊(即/home/backup目錄下的文檔,全部備份過來backup244目錄,免除密碼訪問,以及有刪改的對應主機A的刪改)
效果如下
主機A上面的20個文件
[root@主機A-144 backup]# pwd /home/backup [root@主機A-144 backup]# for a in `seq 20`;do touch $a.txt;done #創建20個文件 [root@主機A-144 backup]# ll total 0 -rw-r--r-- 1 root root 0 Aug 16 14:33 10.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 11.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 12.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 13.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 14.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 15.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 16.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 17.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 18.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 19.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 1.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 20.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 2.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 3.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 4.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 5.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 6.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 7.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 8.txt -rw-r--r-- 1 root root 0 Aug 16 14:33 9.txt
主機B的效果如下
[root@主機B-244 /]# rsync -avzp --delete [email protected]::backup /backup244/ --password-file=/etc/rsyncd.password ***************************************** * * * Rsync * * * * * ***************************************** receiving incremental file list deleting 7897798798798789797/ deleting GGGGGGGGG deleting 4564656566 ./ 1.txt 10.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt 2.txt 20.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt sent 410 bytes received 988 bytes 2796.00 bytes/sec total size is 0 speedup is 0.00 [root@主機B-244 /]# ls /backup244/ 10.txt 12.txt 14.txt 16.txt 18.txt 1.txt 2.txt 4.txt 6.txt 8.txt 11.txt 13.txt 15.txt 17.txt 19.txt 20.txt 3.txt 5.txt 7.txt 9.txt
可以看到,全部文件備份過來了。
(-azvp參數是什麼意思,參考上面的文檔,有詳細解析)
下麵從主機B推數據推到伺服器上面去(上面的是從主機A拉數據過來主機B)
主機A的/home/backup 目錄為空目錄
[root@主機A-144 backup]# ll total 0 [root@主機A-144 backup]# pwd /home/backup
主機B下麵有一個文件和一個目錄
[root@主機B-244 backYYY]# ll 總用量 8 -rw-r--r--. 1 root root 1857 7月 21 13:55 OO.txx drwxr-xr-x 2 root root 4096 7月 21 14:04 Work [root@主機B-244 backYYY]# du -sh Work/ 116K Work/ [root@主機B-244 backYYY]# pwd /home/backYYY
下麵開始推:
[root@主機B-244 backYYY]# rsync -avzq /home/backYYY/ [email protected]::backup --password-file=/etc/rsyncd.password [root@主機B-244 backYYY]#
可以看到主機A上面的/home/backup目錄下的情況變化
[root@主機A-144 backup]# pwd /home/backup [root@主機A-144 backup]# ll total 8 -rw-r--r-- 1 root root 1857 Jul 21 13:55 OO.txx drwxr-xr-x 2 root root 4096 Jul 21 14:04 Work [root@主機A-144 backup]# du -sh Work/ 116K Work/ [root@主機A-144 backup]#
基本上rsync的推拉數據同步測試完畢。
#################################################################
五、總結
報錯主要常見種類與解決:
1、rsync: chgrp "/Work/.yum.conf.VOzf5y" (in backup) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
這是在客戶端(主機B)備份的時候會出現,文件許可權的問題。
解決:把uid 跟gid的改成root 這是最快解決的途徑,要不就是調一下配置文件參數,讀寫那裡。
2、@ERROR: auth failed on module rsync
rsync error: error starting client-server protocol
這種情況其實不僅僅是密碼錯誤會報錯,好多情況下它都會報。
解決:檢查下麵幾點:(1)檢查配置文件的參數secrets file 名稱有沒有打錯,密碼文件路徑有沒有錯,密碼格式主配置的是:用戶名:密碼 的格式,客戶端的只有一個密碼沒有用戶名。
(2)檢查伺服器有沒有配置auth users = 用戶 ,沒配置用戶的配置上,共用模塊backup的路徑目錄/home/backup 這個backup的許可權屬性是不是對應auth users的用戶的。
(3)、認真全面檢查一遍配置文件,看到報錯client-server protocol 這個的,一般牽涉的很多問題都有可能
3、password file must not be other-accessible
continuing without password file
解決:密碼文檔的許可權改為600 有許可權屬性的最好改為改用戶 auth users = 用戶
4、No route to host
主機間埠不通啊
解決:要不把iptables關閉,要不兩邊打通873埠
5、@ERROR: invalid gid nobody
rsync error: error starting client-server protocol
配置文件報錯gid nobody
解決:這個gid nobody在配置文件裡面不能這麼寫,改成所屬用戶或者直接改root吧
總結:一般搞清楚配置文件裡面部署的許可權,所屬組的許可權問題。基本上好少報錯了,基本上都是許可權在報錯。其他報錯就是粗心大意導致的了。
【上述有錯誤的地方,希望各位給予指出,感謝】
後續。。。
隨著勞動力的快速發展,每次的手工同步真的挺麻煩,如果主機間能夠自動的實時的同步那該多高效!
下麵的這的歀配搭正好完美解決上面所說的問題,歡迎繼續關註本博客,下期博文為你呈現rsync+inotify的實時同步的實現。
(首次發表博文,還望各位大能不吝賜教,萬分感謝)