一、Rsync簡介
二、Rsync優點與不足
三、Inotify 簡介
四、Rsync+Inotify組合實驗案例
一、Rsync簡介
Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。Rsync使用所謂的“Rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。
二、Rsync優點與不足
優點:
快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。
安全:rsync 允許通過 ssh 協議來加密傳輸數據。
更少的帶寬:rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
特權:安裝和執行 rsync 無需特別的權限
缺點:
由於 rsync同步數據時,需要掃描所有文件後進行比對,進行差量傳輸,所以不適宜傳輸大數據
Rsync不能實時的去監測文件系統中添加、刪除、修改等操作,無法及時的同步數據。
三、Inotify 簡介
Inotify 是一種強大的、細粒度的、異步的文件系統事件監控機制,linux內核從2.6.13起,加入了Inotify支持,通過Inotify可以監控文件系統中添加、刪除,修改、移動等各種細微事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。
四、Rsync+Inotify組合實驗案例
Web IP: 172.16.10.1
Mysql IP: 172.16.10.2
Backup IP: 172.16.10.3
Backup服務器配置
1、安裝部署Rsync服務器
1 2 3 4 | [root@localhost ~]# yum install rsync -y [root@localhost ~]# rpm -qa | grep rsync rsync- 3.0 . 6 - 9 .el6.x86_64 [root@localhost ~]# |
2、創建rsync的主配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [root@localhost ~]# vim /etc/rsyncd.conf uid = nobody gid = nobody user chroot = no max connections = 200 timeout = 600 pid file = / var /run/rsyncd.pid lock file = / var /run/rsyncd.lock log file = / var /log/rsyncd.log [web] path=/backup/web ignore errors read only = no list = no hosts allow = 172.16 . 10.0 / 255.255 . 0.0 auth users = test secrets file = /etc/rsyncd.password [mysql] path=/backup/mysql ignore errors read only = no list = no hosts allow = 172.16 . 10.0 / 255.255 . 0.0 auth users = test secrets file = /etc/rsyncd.password |
註釋:
第1-2行:指定備份的用戶和組,nobody爲任何用戶
第3行: 此處傳輸文件時無需chroot到path參數所指定的目錄下
第4行: 最大連接數
第5行: 覆蓋客戶指定的IP超時時間,也就是說rsync服務器不會永遠等待一個崩潰的客戶端。
第6-8行:指定pid,lock,log的文件
第9行: 指定認證模塊名稱,注意此模塊是對外公佈的模塊
第10行: 指定備份的路徑
第11行: 可以忽略一些無關的IO錯誤
第12行: 允許可讀可寫
第13行: 不允許列清單
第14行: 只允許172.16.10.0網段進行同步,拒絕其它IP
第15行: 認證的用戶名
第16行: 指定密碼文件的存放路徑
3、創建備份目錄並設置目錄的權限並啓動rsync服務
1 2 3 4 5 6 7 8 9 10 | [root@localhost ~]# cd / [root@localhost /]# mkdir -pv /backup/web [root@localhost /]# mkdir -pv /backup/mysql [root@localhost /]# chmod -R 777 /backup/ [root@localhost /]# echo "test:test" > /etc/rsyncd.password [root@localhost /]# chmod 600 /etc/rsyncd.password [root@localhost ~]#rsync --daemon --config=/etc/rsyncd.conf #啓動服務 [root@localhost ~]# netstat -anpt | grep rsync #rsync監聽 873 端口 tcp 0 0 0.0 . 0.0 : 873 0.0 . 0.0 :* LISTEN 1306 /rsync [root@localhost ~]# |
Web服務器與Mysql服務器配置
1、創建認證文件並設置權限 (web與mysql)
1 2 | [root@localhost ~]# echo "test" > /etc/rsyncd.password [root@localhost ~]# chmod 600 /etc/rsyncd.password |
2、服務器進行服務測試(web服務配置成功)
1 2 3 4 5 6 | [root@localhost ~]# rsync -avp /etc/fstab test@ 172.16 . 10.3 ::web --password-file=/etc/rsyncd.password sending incremental file list fstab sent 848 bytes received 27 bytes 1750.00 bytes/sec total size is 779 speedup is 0.89 [root@localhost ~]# |
此時rsync已經配置成功但是不能監控文件的變化此時就需要安裝inotify
由於inotify特性需要Linux內核的支持,在安裝inotify-tools前要先確認Linux系統內核是否達到了2.6.13以上,如果Linux內核低於2.6.13版本,就需要重新編譯內核加入inotify的支持
3、判斷內核是否支持inotify:(web與mysql)
1 2 | [root@localhost ~]# uname -r 2.6 . 32 - 358 .el6.x86_64 |
4、檢查系統是否支持inotify(Web與Mysql)
1 2 3 4 5 6 | [root@localhost ~]# ll /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_queued_events -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_user_instances -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_user_watches [root@localhost ~]# |
如果有以上3個文件說明系統默認是支持inotfiy功能的。
5、安裝inotfiy-tools工具(Web與Mysql)
1 2 3 4 5 | [root@localhost ~]# wget http: //cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@localhost ~]#tar xf inotify-tools- 3.14 .tar.gz [root@localhost ~]# cd inotify-tools- 3.14 [root@localhost inotify-tools- 3.14 ]# ./configure --prefix=/usr/local/inotify [root@localhost inotify-tools- 3.14 ]# make && make install |
6、創建rsync腳本(web服務器)
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~]# vim /etc/rsync.sh #!/bin/bash host= 172.16 . 10.3 src=/usr/local/httpd/apache/htdocs des=web user=test /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib $src \ | while read files
do /usr/bin/rsync -vzrtopg -- delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2 >& 1 done |
創建rsync腳本(Mysql服務器)
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~]# vim /etc/rsync.sh #!/bin/bash host= 172.16 . 10.3 src=/data des=mysql user=test /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib $src \ | while read files
do /usr/bin/rsync -vzrtopg -- delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2 >& 1 done |
註釋:
--timefmt:指定時間的輸出格式。
--format:指定變化文件的詳細信息。
7、設置腳本權限(Web與Mysql)
1 | [root@localhost inotify-tools- 3.14 ]# chmod 764 /etc/rsync.sh |
8、Web服務器測試
1 2 3 4 5 6 7 | [root@localhost inotify-tools- 3.14 ]# bash -x /etc/rsync.sh + host= 172.16 . 10.3 + src=/usr/local/httpd/apache/htdocs + des=web + user=test + read files + /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib /usr/local/httpd/apache/htdocs |
此時腳本處於監控狀態:
Web服務器創建文件檢查是否能及時同步
1 2 | [root@localhost ~]# cd /usr/local/httpd/apache/htdocs/ [root@localhost htdocs]# touch abc |
查看腳本狀態:
在Mysql服務器上測試同理,此處省略。。
9、讓腳本開機時自動啓動(web與mysql)
1 | [root@localhost inotify-tools- 3.14 ]# echo "/etc/rsync.sh " >> /etc/rc.local |
至此整個實驗過程告一段落。在此實驗中遇到的問題,總結如下:
同步時遇到的問題:
rsync: failed to connect to 172.16.10.2: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
故障原因:
服務沒有啓動
解決辦法:
1 | rsync --daemon --config=/etc/rsyncd.conf |