首页 > 代码库 > rsync+inotify实现数据实时同步
rsync+inotify实现数据实时同步
知识储备:
1、Rsync是Unix/Linux下的一款应用软件,利用它可以使多台服务器数据保持同步一致性,第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。Rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。可以很容易做到保持原来文件的权限、时间、软硬链接等。
2、Inotify是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。Rsync安装完毕后,需要安装inotify文件检查软件。
说明:准备两台服务器node1和node2,node1:202.207.178.6为服务端,node2:202.207.178.7为客户端
一、配置rsync,实现主从数据同步
node1上:
编译安装rsync:
前提:需要装开发环境:# yum -y install gcc
1、下载并安装rsync
# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
# tar xf rsync-3.0.7.tar.gz
# cd rsync-3.0.7
# ./configure --prefix=/usr/local/rsync
# make && make install
2、编辑配置文件
# vim /etc/rsyncd.conf
添加以下内容:
#########[global] 全局配置
uid = nobody
gid = nobody
use chroot = no
max connections = 30
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[web]
read only = yes
path = /data/www/web
comment = web
auth users =fsy
secrets file = /etc/rsync.pas
hosts allow = 202.207.178.0/24
释义:
[www] #要同步的模块名
path = /data/www/web #要同步的目录
comment = web #这个名名称无所谓,最好与模块名保持一致
read only = no # no客户端可上传文件,yes只读
write only = no # no客户端可下载文件,yes不能下载
list = yes #是否提供资源列表
auth users =test #登陆系统使用的用户名,没有默认为匿名。
hosts allow = 202.207.178.0/24 #本模块允许通过的IP地址
hosts deny = IP() #禁止主机IP
secrets file=/etc/rsync.pas #密码文件存放的位置
3、创建所需文件和目录
创建秘钥文件,并修改其权限
# vim /etc/rsync.pas
fsy:fsy666
# chmod 700 /etc/rsync.pas
4、启动rsync服务,并查看是否正常启动
# /usr/local/rsync/bin/rsync --daemon
# ps -ef | grep rsync
5、在服务器端创建复制目录,并在其中放置文件
# mkdir -pv /data/www/web
至此服务端配置完毕!
node2上:
1、建立秘钥文件,并授权
# vim /etc/rsync.pas
fsy666
# chmod 600 /etc/rsync.pas
2、连接至服务器端进行同步
# rsync -aP --delete fsy@202.207.178.6::web /data/www/web --password-file=/etc/rsync.pas
此时在从服务器可以看到拷贝的文件!
释义:
-a, --archive归档模式,表示以递归方式传输文件,并保持所有文件属性。
--exclude=PATTERN指定排除一个不需要传输的文件匹配模式
--exclude-from=FILE从 FILE 中读取排除规则
--include=PATTERN指定需要传输的文件匹配模式
--delete删除那些接收端还有而发送端已经不存在的文件
-P等价于 --partial --progress,实现半同步复制
-v, --verbose详细输出模式
-q, --quiet精简输出模式
--rsyncpath=PROGRAM指定远程服务器上的 rsync 命令所在路径
--password-file=FILE从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
二、通过Inotify实现数据实时同步(在node1上安装)
1、实现双机互信
node1:
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘
# ssh-copy-id -i .ssh/id_rsa.pub root@202.207.178.7
node2:
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘
# ssh-copy-id -i .ssh/id_rsa.pub root@202.207.178.6
2、安装inotify-tools-3.14.tar.gz
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
3、配置auto_inotify.sh同步脚本
# vim auto_inotify.sh
内容如下:
#!/bin/sh
src=http://www.mamicode.com/data/www/web/
des=/data/www/web/
ip=202.207.178.7
inotifywait -mrq --timefmt ‘%d/%m/%y-%H:%M‘ --format ‘%T %w%f‘ -e modify,delete,create,attrib ${src} | while read file
do
for i in $ip
do
/usr/local/rsync/bin/rsync -aP --delete $src root@$ip:$des
done
done
4、在服务器端后台启动该脚本
# nohup sh auto_inotify.sh &
此时在主服务器上的/data/www/web做修改,会发现从服务器上的/data/www/web也做同样的改动,说明配置成功!
欢迎批评指正!
本文出自 “10917734” 博客,请务必保留此出处http://10927734.blog.51cto.com/10917734/1873743
rsync+inotify实现数据实时同步