Rsync+inotify-tools实现数据实时同步


:Mr.zhou  阅读: 1,151 次

  需求:将 NFS 服务器共享的目录/data 实时同步到备份服务器的 /backup 内。使用 rsync 和 inotify-tools实现此需求。

  inotify 可以监控文件系统并将文件系统的变更通知应用程序。Linux核心子系统之一,在 2.6.13 内核后,正式纳入Linux内核。inotify 可以监控的事件有:读取文件、修改文件、文件属性变更、文件被打开、编辑可写入文件后关闭文件、编辑非可写入文件后关闭文件、文件移动、文件重命名、文件或目录被删除、新建文件、删除文件等。

  inotify-tools 是一个 C 库 和 Linux inotify 的简单命令集工具。这些命令集工具可以监视文件系统的变动并采取行动。目前 inotify-tools 的最新版本为 3.14 。 要是此工具需要,使用源码的方式进行安装。

  NFS服务器:

[root@nfs-server ~]# uname -nr
nfs-server.z-dig.com 2.6.32-504.el6.x86_64
[root@nfs-server ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
172.16.1.100
[root@nfs-server ~]# 

  Backup服务器:

[root@backup-server ~]# uname -nr
backup-server.z-dig.com 2.6.32-504.el6.x86_64
[root@backup-server ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
172.16.1.101
[root@backup-server ~]# 

  内核版本号大于 2.6.13 系统支持 inotify 。

  一、配置 Backup 备份服务器。使用 rsync –daemon 方式。

[root@backup-server ~]# cat /etc/rsyncd.conf 
uid=rsync
gid=rsync
use chroot=true
read only=false
list=false
ignore errors=true
hosts allow=172.16.1.0/24
hosts deny=0.0.0.0/0
max connections=1000
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
auth users=rsync_backup
secrets file=/etc/rsync.passwd
[backup]
comment=backup for all server
path=/backup
[root@backup-server ~]# 
[root@backup-server ~]# echo 'rsync_backup:123456#'>/etc/rsync.passwd
[root@backup-server ~]# chmod 600 /etc/rsync.passwd
[root@backup-server ~]# ll /etc/rsync.passwd
-rw------- 1 root root 13 Jun 24 01:07 /etc/rsync.passwd
[root@backup-server ~]#
[root@backup-server ~]# useradd -M -s /sbin/nologin rsync
[root@backup-server ~]# id rsync
uid=500(rsync) gid=500(rsync) groups=500(rsync)
[root@backup-server ~]#
[root@backup-server ~]# mkdir /backup
[root@backup-server ~]# chown -R rsync.rsync /backup
[root@backup-server ~]# ll -d /backup
drwxr-xr-x 2 rsync rsync 4096 Jun 24 01:06 /backup
[root@backup-server ~]# 
[root@backup-server ~]# rsync --daemon
[root@backup-server ~]# echo 'rsync --daemon'>>/etc/rc.local 
[root@backup-server ~]# tail -1 /etc/rc.local 
rsync --daemon
[root@backup-server ~]#

  NFS服务器:

[root@nfs-server ~]# echo '123456#'>/etc/rsync.passwd         
[root@nfs-server ~]# chmod 600 /etc/rsync.passwd 
[root@nfs-server ~]# ll /etc/rsync.passwd 
-rw------- 1 root root 8 Jun 24 01:11 /etc/rsync.passwd
[root@nfs-server ~]# 

  测试

[root@nfs-server ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.101::backup --password-file=/etc/rsync.passwd              
sending incremental file list
hosts
sent 154 bytes  received 27 bytes  362.00 bytes/sec
total size is 192  speedup is 1.06
[root@nfs-server ~]#
[root@backup-server ~]# ls /backup/
hosts
[root@backup-server ~]# 

  rsync –daemon 模式测试成功。

  二、配置 NFS 服务器。

  下载 inotify-tools 源码包并安装。

[root@nfs-server ~]# mkdir -p /server/tools
[root@nfs-server ~]# cd /server/tools/
[root@nfs-server tools]# wget -q http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@nfs-server tools]# echo $?
0
[root@nfs-server tools]# 
[root@nfs-server tools]# ls
inotify-tools-3.14.tar.gz
[root@nfs-server tools]# tar zxf inotify-tools-3.14.tar.gz 
[root@nfs-server tools]# ls
inotify-tools-3.14  inotify-tools-3.14.tar.gz
[root@nfs-server tools]# cd inotify-tools-3.14
[root@nfs-server inotify-tools-3.14]# ./configure -q --prefix=/usr/local/inotify-tools-3.14
[root@nfs-server inotify-tools-3.14]# echo $?
0
[root@nfs-server inotify-tools-3.14]# make -s&&make install
[root@nfs-server inotify-tools-3.14]# echo $?
0
[root@nfs-server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify-tools
[root@nfs-server inotify-tools-3.14]#

  编写脚本,使用 inotifyt-tools 实时监控 /data 中文件的变化,并将文件推送至备份服务器,实现数据的实时同步。

[root@nfs-server ~]# mkdir -p /server/scripts
[root@nfs-server ~]# cat /server/scripts/rsync-inotify.sh 
#!/bin/bash
#
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify -mrq --format '%w%f' -e create,close_write,delete /data \
|while read file
do
cd / &&
rsync -az ./data --delete rsync_backup@172.16.1.101::backup --password-file=/etc/rsync.passwd
done
[root@nfs-server ~]# 

  测试脚本。

  NFS服务器:

[root@nfs-server ~]# /bin/bash /server/scripts/rsync-inotify.sh &
[1] 3743
[root@nfs-server ~]# 

  创建文件实时同步:

[root@nfs-server ~]# for i in {1..20};do touch /data/$i&&sleep 1;done        
[root@nfs-server ~]#
[root@backup-server ~]# for i in {1..20};do ls /backup/data/&&echo '=========='&&sleep 1;done 
1  2
==========
1  2  3
==========
1  2  3  4
==========
1  2  3  4  5
==========
1  2  3  4  5  6
==========
1  2  3  4  5  6  7
==========
1  2  3  4  5  6  7  8
==========
1  2  3  4  5  6  7  8  9
==========
1  10  2  3  4  5  6  7  8  9
==========
1  10  11  2  3  4  5  6  7  8  9
==========
1  10  11  12  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  15  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  15  16  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  15  16  17  2  3  4  5  6  7  8  9
==========
1   11  13  15  17  2  4  6  8
10  12  14  16  18  3  5  7  9
==========
1   11  13  15  17  19  3  5  7  9
10  12  14  16  18  2   4  6  8
==========
1   11  13  15  17  19  20  4  6  8
10  12  14  16  18  2   3   5  7  9
==========
1   11  13  15  17  19  20  4  6  8
10  12  14  16  18  2   3   5  7  9
==========
[root@backup-server ~]#

  删除文件实时同步:

[root@nfs-server ~]# for i in {20..1};do rm -f /data/$i&&sleep 1;done 
[root@nfs-server ~]# 
[root@backup-server ~]# for i in {1..20};do ls /backup/data/&&echo '=========='&&sleep 1;done
1   11  13  15  17  2  4  6  8
10  12  14  16  18  3  5  7  9
==========
1  10  11  12  13  14  15  16  17  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  15  16  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  15  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  14  2  3  4  5  6  7  8  9
==========
1  10  11  12  13  2  3  4  5  6  7  8  9
==========
1  10  11  12  2  3  4  5  6  7  8  9
==========
1  10  11  2  3  4  5  6  7  8  9
==========
1  10  2  3  4  5  6  7  8  9
==========
1  2  3  4  5  6  7  8  9
==========
1  2  3  4  5  6  7  8
==========
1  2  3  4  5  6  7
==========
1  2  3  4  5  6
==========
1  2  3  4  5
==========
1  2  3  4
==========
1  2  3
==========
1  2
==========
1
==========
==========
==========
[root@backup-server ~]# 

  测试成功将脚本设置为开机自动后台运行。

[root@nfs-server ~]# echo '/bin/bash /server/scripts/rsync-inotify.sh &'>>/etc/rc.local 
[root@nfs-server ~]# tail -1 /etc/rc.local 
/bin/bash /server/scripts/rsync-inotify.sh &
[root@nfs-server ~]# 


转载请注明原文链接:http://www.z-dig.com/rsyncinotify-tools-to-achieve-real-time-data-synchronization.html



正文部分到此结束