rsync+inotify实时文件同步

1.rsync

http://man.linuxde.net/rsync

rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。
运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。Rsync可以搭配ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
基本特点:

  1. 可以镜像保存整个目录树和文件系统;
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  3. 无须特殊权限即可安装;
  4. 优化的流程,文件传输效率高;
  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
  6. 支持匿名传输。

2.rsync安装

#安装
yum install rsync -y

#修改配置文件
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[www]
ignore errors
path = /mdata/www
read only = false
list = false
hosts allow = 192.168.1.80/81
hosts deny = 0.0.0.0/32
auth users = rsync
secrets file = /etc/rsyncd.pass #权限文件

#如果为服务器,添加客户端登陆权限文件
echo "rsync:123456" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass

#如果为客户端,添加服务器密码文件
echo "123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

#rsync启动
rsync --daemon

#设置rsync开机启动
chmod +x /etc/rc.d/rc.local
echo "rsync --daemon --config=/etc/rsyncd.conf" > /etc/rc.d/rc.local

3.rsync实例

#从当前服务器去更新81服务器
rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/ssl.*/" --progress rsync@192.168.1.81::www /mdata/www/ --password-file=/etc/rsync.pass
 
-vzrtopg
  -v, --verbose 详细模式输出
  -z, --compress 对备份的文件在传输时进行压缩处理
  -r, --recursive 对子目录以递归模式处理
  -t, --times 保持文件时间信息
  -o, --owner 保持文件属主信息
  -p, --perms 保持文件权限
  -g, --group 保持文件属组信息
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
--exclude "logs/" 表示不对/www/logs目录下的文件进行备份。
--exclude "conf/ssl.*/"表示不对/www/conf/ssl.*/目录下的文件进行备份。
rsync@192.168.1.81::www 表示对该命令是对服务器192.168.1.81中的www模块进行备份,rsync表示使用rsync来对该模块进行备份。
--password-file=/etc/rsync.pass来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有root可读

4.inotify

http://man.linuxde.net/inotifywait

Linux内核从2.6.13开始,引入了inotify机制。通过intofity机制,能够对文件系统的变化进行监控,如对文件进行创建、删除、修改等操作,可以及时通知应用程序进行相关事件的处理。这种响应处理机制,避免了频繁的文件轮询任务,提高了任务的处理效率。

5.inotify-tool安装

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -xvf inotify-tools-3.14.tar.gz
cd inotify-tool-3.14
./configure --prefix=/usr/local/inotify
make && make install

 

6.建立脚本,inotify实时监控文件夹,并通过rsync同步文件

cd /usr/local/inotify
vim inotify.sh
#bin/bash
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /mdata/www \
|while read file
do
rsync -vzrtopg /mdata/www/ --delete rsync@192.168.1.81::www --password-file=/etc/rsync.pass
done
chmod +x inotify.sh
#启动脚本
./inotify.sh

#设置inotify.sh实时同步脚本开机启动
chmod +x /etc/rc.d/rc.local
echo "sh /usr/local/inotify/inotify.sh &" > /etc/rc.d/rc.local 

 

posted @ 2017-10-16 17:13  gaochenfeng  阅读(245)  评论(0)    收藏  举报