構建企業實時備份數據服務器(Rsync+inotify)

一、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        000.0.0.0:8730.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 848bytes  received 27bytes  1750.00bytes/sec
total size is779speedup is0.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-- 1root root 0Sep  110:02max_queued_events
-rw-r--r-- 1root root 0Sep  110:02max_user_instances
-rw-r--r-- 1root root 0Sep  110:02max_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 \
| whileread 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 \
| whileread 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章