通过rsync+inotify-tools+ssh实现触发式远程实时同步

文件的同步镜像在很多地方都需要用到,因此rsync这款免费软件得到了广泛的应用,包括在Windows平台上,都已经有了支持rsync的“cwRsyncServer”。
但是,我们一般都是通过结合crontab计划任务来实现文件同步的,这样做的缺点是效率低,不能做到实时同步。
现在,在Linux平台下我们可以利用2.6内核的inotify监控文件系统机制,通过inotify-tools来实现实时同步了。
具体操作如下:

1.安装所需软件
目前各大Linux发行版本都已经具有了rsync与inotify-tools的软件包,推荐通过RPM,yum,apt-get等方式进行安装。
RHEL:
[[email protected] ~]# rpm -ivh rsync-*
[[email protected] ~]# rpm -ivh inotify-tools-*

CentOS:
[[email protected] ~]# yum install rsync inotify-tools

Ubuntu:
[[email protected] ~]# apt-get install rsync inotify-tools

采用源码方式安装的步骤如下:
[[email protected] ~]# wget ftp://ftp.samba.org/pub/rsync/rsync-3.0.8.tar.gz
[[email protected] ~]# tar xzvf rsync-3.0.8.tar.gz
[[email protected] ~]# cd rsync-3.0.8
[[email protected] ~]# ./configure
[[email protected] ~]# make
[[email protected] ~]# make install

[[email protected] ~]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[[email protected] ~]# tar xzvf inotify-tools-3.14.tar.gz
[[email protected] ~]# cd inotify-tools-3.14
[[email protected] ~]# ./configure
[[email protected] ~]# make
[[email protected] ~]# make install

2.配置ssh key信任
建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。

在两台服务器上创建rsync用户
[[email protected] ~]# useradd -m rsync
[[email protected] ~]# passwd rsync
[[email protected] ~]# useradd -m rsync
[[email protected] ~]# passwd rsync

[[email protected] ~]# su - rsync
[[email protected] ~]$ ssh-keygen -t rsa
在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/rsync/.ssh/目录下。

将公钥添加到远程主机的 authorized_keys 文件中
将文件上传到远程主机(假设远程主机IP为192.168.10.4)
[[email protected] ~]$ scp ~/.ssh/id_rsa.pub [email protected]:/home/rsync/

使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中
[[email protected] ~]$ mkdir .ssh
[[email protected] ~]$ chmod 700 .ssh
[[email protected] ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

重启SSH服务
[[email protected] ~]# /etc/init.d/sshd restart
[[email protected] ~]# /etc/init.d/sshd restart

3.创建inotify_rsync.sh脚本
[[email protected] ~]# vim inotify_rsync.sh
1    #!/bin/sh
2    SRC=/home/rsync/test
3    [email protected]:/home/rsync/test
4     
5    /bin/su - rsync
6    /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
7            do
8                    /usr/bin/rsync -ahqzt --delete $SRC $DST
9            done

相关注解如下:
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src}
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件

/usr/bin/rsync -ahqzt --delete $SRC $DST
-a 存档模式
-h 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件

要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加--exclude或--excludei参数,具体查看man inotifywait。

inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。

赋予脚本可执行权限
[[email protected] ~]# chmod +x inotify_rsync.sh
执行脚本
[[email protected] ~]# /root/inotify_rsync.sh &
设置脚本开机自启动
[[email protected] ~]# cat "/root/inotify_rsync.sh &" >> /etc/rc.local

4.测试
首先在server1服务器的/home/rsync/test目录下创建文件或目录,然后再到server2的/home/rsync/test目录下查看,如果看到就说明成功了。
[[email protected] ~]$ cd test
[[email protected] test]$ touch a.txt
注意:第一次SSH连接的时候可能需要输入一次密码,之后就不需要输入了。

[[email protected] ~]$ cd test
[[email protected] test]$ ls
a.txt

看到了a.txt文件,说明文件同步已经成功!

时间: 2024-10-12 13:11:55

通过rsync+inotify-tools+ssh实现触发式远程实时同步的相关文章

Rsync+Inotify远程实时同步

Rsync简介 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步.官方网站:http://rsync.samba.org/ 开始部署Rsync 1.在服务器A和服务器B上同时安装rsync服务和Xinetd服务yum -install rsync2.在服务器A上编辑/etc/rsyncd.conf配置文件(没有这个文件的话可自行创建) uid = nobody gid = nobody us

INOTIFY监控服务与RSYNC服务实现CLIENT与SERVER之间的实时同步

准备两台主机服务器 服务端:host1 192.168.1.109 客户端:host2 192.168.1.107 一.服务端配置 1.修改host1的rsync配置文件: ~]# vim /etc/rsyncd.conf uid=root gid=root use chroot=no max connections=0 #不限制最大连接数 exclude = lost+found pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd

rsync + inotify 实现两台主机间文件的同步备份

前面一篇博文介绍了rsync的主要使用及工作于服务器模式下的安装.配置.inotify是Linux内核中监控文件系统的一种事件机制,它负责监视文件系统的变化.如文件的创建.修改.删除等,并以事件的方式通知给应用程序.inotify-tools是一个基于内核的inotify机制为用户提供实现对文件系统的事件进行监控功能的应用程序组件. inotify实现的对文件系统监视的事件: IN_ACCESS:文件被访问 IN_MODIFY:文件被修改 IN_ATTRIB,文件属性被修改 IN_CLOSE_W

unison+inotify-tools触发式双向自动同步

双向实时数据同步部署 首先添加服务器ssh信任,即免秘钥登陆 Web1:192.168.10.36 Web2:192.168.10.37 分别在web1和web2上执行以下命令 mkdir ~/.ssh chmod 700 ~/.ssh 生成RSA密钥 ssh-keygen -t rsa  (然后连续三次回车) 添加密钥到授权密钥文件中 cd ~/.ssh ssh "-p 22" 192.168.10.36 cat /root/.ssh/id_rsa.pub >> auth

Linux(centos5.0+)unison+inotify-tools触发式双向自动同步

192.168.1.11是server1, 192.168.1.22是server2. [1]安装inotify-tools 各大linux发行版本都有inotify-tools软件包,建议通过yum方式安装: [[email protected] ~]#yum install inotify-tools [[email protected] ~]#yum install inotify-tools ******说明开始********************************* 郁闷的是

rsync+inotify实现实时同步

1.数据同步: A服务器的一个目录同步到B服务器上的一个目录 方法是: 可以在A服务器上把这个目录共享(如ftp,http等),然后B服务器上写shell脚本,用crontab做定时任务下载过来(数据同步不实时) 实时同步 方法是: rsync远程目录实时同步 drbd远程存储实时同步(很老的方案) 共享存储,就是同一个磁盘设备同时被很多人用 分布式存储(云存储) 2.同步.异步和远程同步 sync同步 async异步 rsync 远程同步 这里主要说rsync,在开始之前需要了解以下几个问题:

第三十四天-rsync+inotify实现实时同步案例

推荐: Rsync结合Inotify 实时同步配置 rsync+inotify实现实时同步案例 rsync+inotify实现多台服务器之间数据实时同步 Linux下Rsync+Inotify-tools实现数据实时同步

rsync+inotify实现数据的实时同步

一,简介: 1. rsync是类unix系统下的数据镜像备份工具--remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步.与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业

通过rsync+inotify实现文件的实时备份同步

原文参考:http://ixdba.blog.51cto.com/2895551/580280/ http://www.bamaol.com/Psy/Showposts-010000108-5048.html 一,rsync安装 目前rsync的最新版本是3.0.9 wget http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz tar-xvzfrsync-3.0.9.tar.gz;cdrsync-3.0.9; ./configure;make;