rsync+inotify实时文件同步
1.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会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
基本特点:
- 可以镜像保存整个目录树和文件系统;
- 可以很容易做到保持原来文件的权限、时间、软硬链接等;
- 无须特殊权限即可安装;
- 优化的流程,文件传输效率高;
- 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
- 支持匿名传输。
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

浙公网安备 33010602011771号