天天看點

用rsync結合inotify實作資料實時備份

系統環境:centos 6.4

需要軟體:inotify,rsync

主機規劃:172.16.1.220   172.16.1.218

需求:将172.16.1.218上面的/usr/local/218backup檔案夾下面的資料實時同步到/usr/local/220backup檔案夾下面,(生産環境慎用,因為一台伺服器上面的資料丢失,可能導緻遠端備份伺服器上面的資料也丢失)。

步驟:

首先在兩台主機上面分别安裝rsync軟體,然後在用戶端,也就是218上面安裝inotify軟體

在172.16.1.218主機上:

[root@218 rsyncd]# ls

rsyncd.secrets  rsyncd.secretsbak

[root@218 rsyncd]# pwd

/etc/rsyncd

[root@218 rsyncd]# vim rsyncd.secrets

12345678

[root@218 rsyncd]#chmod 600 /etc/rsyncd/rsyncd.secrets

安裝inotify軟體,安裝在configure及編譯路徑指向/usr/local/inotify下面

源碼安裝編譯,直到OK

OK之後,inotify檔案夾下會有四個目錄,如下:

[root@218 inotify]# ls

bin        include       lib       logs

bin目錄下有兩個指令:

[root@218 bin]# ls

inotifywait      inotifywatch

安裝已經OK了,下面需要編寫同步腳本,腳本如下:

[root@218 local]# vim inotify_rsync.sh

#!/bin/sh

#date:2013-1-11

#function:rysnc 172.16.1.218  to  172.16.1.220

if [ ! -f /etc/rsyncd/rsyncd.secrets ];then

        /bin/chmod 600 /etc/1.pas

fi

log=/usr/local/inotify/logs/rsync.log

src="/usr/local/218backup/"

host="172.16.1.220"

module="220backup"

/usr/local/inotify/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $src |  while read DATE TIME DIR FILE; do

       FILECHANGE=${DIR}${FILE}

       echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> $log

done

在主機220上面需要做如下配置:

首先:安裝好rsync軟體,确認無誤後啟動程式

[root@backup]#rsync --daemon

[root@backup 220backup]# netstat -antup|grep 873

tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      9857/rsync          

tcp        0      0 :::873                      :::*                        LISTEN      9857/rsync         

873端口已經開啟了,代表rsync安裝成功。

它的配置檔案需要手動建立,如下所示。

[root@backup 220backup]# vim /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

port = 873

read only = no

max connections = 10

uid = root

gid = root

use chroot = yes

auth users = rsync

secrets file = /etc/rsyncd/rsyncd.secrets

[apache]

hosts allow = 172.16.1.0/24

path = /usr/local/backup/

[220backup]

path = /usr/local/220backup/

#[blogweb02]

#hosts allow = 192.168.71.0/24

#path = /usr/local/apache2/htdocs/

#[bbs-nginx]

同步之前先在218上面開啟同步腳本,腳本路徑在/usr/local/inotify_rsync.sh

[root@218 218backup]# pwd               卻換到218backup檔案夾下

/usr/local/218backup

[root@218 218backup]# touch {1..100}

[root@218 218backup]# ls

1    12  16  2   23  27  30  34  38  41  45  49  52  56  6   63  67  70  74  78  81  85  89  92  96

10   13  17  20  24  28  31  35  39  42  46  5   53  57  60  64  68  71  75  79  82  86  9   93  97

100  14  18  21  25  29  32  36  4   43  47  50  54  58  61  65  69  72  76  8   83  87  90  94  98

11   15  19  22  26  3   33  37  40  44  48  51  55  59  62  66  7   73  77  80  84  88  91  95  99

在這個目錄下面建立100個檔案

然後在220上面登入,檢視/usr/local/220backup檔案夾下面是否有檔案

[root@backup 220backup]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:7B:72:F9  

          inet addr:172.16.1.220  Bcast:172.16.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe7b:72f9/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:10652680 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5458288 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:15093282373 (14.0 GiB)  TX bytes:323043775 (308.0 MiB)

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:264 errors:0 dropped:0 overruns:0 frame:0

          TX packets:264 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:18961 (18.5 KiB)  TX bytes:18961 (18.5 KiB)

[root@backup 220backup]# pwd

/usr/local/220backup

[root@backup 220backup]# ls

同時,在172.16.1.220下面也建立了100個檔案,實驗成功。

然後嘗試在172.16.1.218下面的/usr/local/218backup檔案夾下删除所有的檔案。

[root@218 218backup]# rm -f *

在檢視220backup下面的檔案是否還存在

[root@backup 220backup]#

220backup下面的檔案已經被同步删除了,實驗成功。

QQ交流:406564728

     本文轉自陳繼松 51CTO部落格,原文連結:http://blog.51cto.com/chenjisong/1610456,如需轉載請自行聯系原作者