標籤:服務端 用戶端 特徵碼 軟體 加密
rsync 是遠程差異同步資料的工具,把一份資料複製到另一台機器上。它的同步特性是,在整個檔案域中,根據rsync演算法計算檔案的特徵碼,只同步有改變的檔案,但在同步整個域的時候,會計算整個域中所有檔案的特徵,這樣使得在檔案資料過多情況下計算檔案特性就花費了很多時間。如果不藉助其它軟體,rsync無法做到真正的即時同步資料。rsync可以對目錄或整個檔案系統做同步,可能藉助ssh加密後安全傳輸,因為只同步差異資料,所以效率較高,還支援匿名傳輸等特性。rsync分為服務端和用戶端,做為服務端隨時等待用戶端推送或拉取資料。rsync做為服務端時依賴超級守護進程xinetd為其監聽tcp873連接埠。所以xinetd一定安裝。
如果系統沒有安裝rsync,到http://rsync.samba.org/ 下載源碼編譯,或使用 yum -y install rsync 安裝。
rsync 用戶端使用的rsync命令使用
文法格式
拉取檔案: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
推送檔案: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
常用選項
-n: 測試同步,只做測試不真正同步資料。
-v:顯示同步過程
-c:開啟校正功能
-r:遞迴複製(如果同步目錄,在目錄後面不要寫/。如果寫/表示同步目錄下的檔案)
-a:歸檔同步,資料同步後會保留檔案的原有屬性
-p:保留檔案的所有許可權
-t:保留檔案的時間戳記
-l:保留符號串連
-o:保留檔案的屬主
-g:保留檔案的屬組
-D:保留裝置檔案
-e ssh :指定使用ssh協議做承載加密傳輸
-z : 傳輸時壓縮資料轉送
--progress : 顯示傳輸進度條
--stats :顯示如何壓縮傳輸資料。
--delete : 刪除多於檔案
-q : 制止錯誤資訊
rsync 伺服器端設定檔 /etc/rsyncd.conf 。 分為兩部分,第一段定義rsync做為服務啟動並執行特性。第二部分定義rsync模組的特性,模組就是定義本地使用那個路徑做為儲存目錄,和此模組的工作特性。此檔案預設系統沒有提供,需要手動建立。
# Global Settings 全域定義段,只能有一個。
uid = nobody 進程以那個使用者身份運行
gid = nobody 進程啟動並執行使用者組
use chroot = no 運行rsync時是否支援chroot功能
max connections = 5 最多允許多少個用戶端同時請求
strict modes = yes 是否啟用strict 模式
pid file = /var/run/rsyncd.pid 進程id檔案的位置
log file = /var/log/rsyncd.log 記錄檔的位置
# Directory to be synced 用來定義同步的目錄 ,可以有多個。
[tools]
path = /data 儲存同步的資料位元置
ignore errors = yes 傳輸資料時是否忽略錯誤
read only = no 是否為唯讀
write only = no 是否為唯寫,如果唯寫別人不能看
hosts allow = 172.16.0.0/16 定義用戶端的白名單
hosts deny = * 定義預設不允許訪問原生用戶端,*表示全部。
list = false 是允許例出檔案,如果允許,值為ture
uid = root 指定此共用使用那個使用者身份運行
gid = root 指定此共用使用那個使用者組身份運行
auth users = USER1, USER2 指定可以通過rsync同步的使用者
secrets file = /etc/rsyncd.passwd 指定驗證使用者的檔案
啟動服務時需要修改設定檔,讓xinetd啟動時為其監聽服務。檔案在/etc/xinetd.d/rsync
service rsync
{
disable = no 把此項的yes改為no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
儲存退出後重啟xinetd服務,如果tcp的873連接埠處於監聽狀態,說明服務啟動正常。
650) this.width=650;" title="clipboard" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard" src="http://img1.51cto.com/attachment/201408/22/1080241_14087414106ntD.png" "954" height="291" />
用戶端做測試
==================================================================
inotify使用
inotify 是一個可以即時監視檔案系統的工具,檔案的建立,修改,刪除,查看等動作都可以監視到。此功能需要2.6.13以上核心支援,包括2.6.13版本。inotify-tools 這個軟體就是用來與核心的inotify互動的工具,藉助它可以即時的監視指定檔案一舉一動。與sh指令碼配置著使用,可以達到監控的效果。安裝方法如下。
# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar -xf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure 這裡沒有指定安裝路徑,預設安裝後可執行程式在 /usr/local/bin
# make && make install
# echo "fs.inotify.max_user_watches = 100000" >> /etc/sysctl.conf 設定最大監視的檔案數量
# sysctl -p 讓設定的核心參數生效
inotify-tools安裝後有兩個執行檔案
inotifywait,用來監視檔案的變化
inotifywatch,用來統計檔案系統訪問的次數,監視檔案的中繼資料
命令選項
-m, –monitor:接收到一個事情而不退出,無限期地執行。預設的行為是接收到一個事情後立即退出。
-r, –recursive :監視一個目錄下的所有子目錄
-q, –quiet:指定一次,不會輸出詳細資料,指定二次,除了致命錯誤,不會輸出任何資訊。 指定一次,不會輸出詳細資料,指定二次,除了致命錯誤,不會輸出任何資訊。
-e , –event :只監聽指定的事件。
事件有以下幾種
650) this.width=650;" title="clipboard[1]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[1]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741410YHoa.png" "690" height="504" />
==================================================================
配置一個rsync+inotify案例
650) this.width=650;" title="clipboard[2]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[2]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741411EjcJ.png" "619" height="459" />
1,節點1與節點2都為rsync伺服器端,
2,散發者會即時把自己變化的資料推送到節點1和節點2上。
3,節點一與節點二的環境一樣,模組名為html,共用的目錄為/data
4,傳輸過程加密
操作過程---------------------------------------------------------------------
為了同步資料時不用輸入密碼,所以選擇公開金鑰認證。在散發者上產生金鑰組兒。
# ssh-keygen -t rsa 這裡沒有設定密碼,所以一路斷行符號就可以。
# cd /root/.ssh/
# cat id_rsa.pub 查看公開金鑰檔案,並且複製
650) this.width=650;" title="clipboard[3]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[3]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741412Wk8g.png" "822" height="438" />
把紅框中的文本複製到兩台節點伺服器上的/root/.ssh/authorized_keys檔案中,如果沒有需要手動建立。複製完成後為兩台結點伺服器編輯rsync的設定檔,內容如下。如沒有rsync需要安裝。
650) this.width=650;" title="clipboard[4]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[4]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741413nEsP.png" "323" height="296" />
完成設定檔後重啟xinetd服務。
散發者配置如上面安裝完成後編輯以下指令碼,讓其自動同步資料。
# vim /bin/inotify.sh 內容如下
source /etc/rsync.inotify
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib /data | while read D E F
do
/usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host}::$Dest
/usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host1}::$Dest
done
#vim /etc/rsync.inotify 為上面的指令檔提供設定檔,內容如下:提供設定檔是為了以後能夠靈活擴充多個節點。
Source=/data
Host=172.16.2.10
Dest=html
Host1=172.16.2.15
# echo "/bin/inotify.sh &" >> /etc/rc.d/rc.local #讓指令碼開機自動啟動
# /bin/inotrfy.sh 啟動指令碼,第一次同步資料時需要輸入yes。 所以先讓它在前台運行
# cp /bin/i* /data 複製點檔案做測試,
到兩台節點上查看,會有點延時。
# ls /data
650) this.width=650;" title="clipboard[5]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[5]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741413MpPZ.png" "615" height="48" />
到此完成
rsync 加 inotify 實現無縫資料同步