发布:thebaby   来源:脚本学堂     【  
本文介绍下,在linux系统中,使用rsync与inotify实现数据同步的一个实例,有研究文件同步的朋友可以作个参考。
本文转自:http://www.jbxue.com/article/13934.html

本节内容:
rsync与inotify数据同步

一、rsync
它是Linux系统下文件同步可数据传输的工具,采用rsync算法使客户机与服务器,主服务器与备份服务器数据同步。rsync也能实现中断后恢复传输。rsync支持增量备份。

二、rsync有4种模式
   1.本地模式。
   2.远程shell模式
   3.查询模式
   4.C/S模式

安装rsync:

复制代码代码示例:
tar xvf rsync-3.0.9.tar.gz  
cd rsync-3.0.9 
./configure  
make && make install 
 

rsync --help 查看选项
-v, --verbose               ##详细模式
-r, --recursive             ##递归
-u, --update                ##更新
-t, --times                 ##保持时间
-z, --compress              ##启用压缩
-o, --owner                 ##保持属主
-g, --group                 ##保持属组
-p, --perms                 ##保持权限
--delete                    ##以前边目录为准,同步
--progress                  ##显示传输过程
--exclude=PATTERN           ##不同步模式匹配的文件
--password-file=FILE        ##密码文件位置
1、本地模式

复制代码代码示例:
rsync -rv /etc/passwd .  ##拷贝passwd 到当前目录 
 

2、远程shell模式

复制代码代码示例:
rsync -rv /etc/passwd 172.16.1.3:/tmp  ##把passwd拷贝到远程主机上 
 

3、列表模式

复制代码代码示例:
rsync -r 172.16.1.3:/tmp ##查看远程目录下的文件 
 

前三种模式都可以用ssh来实现,本节研究第四种。
 
规划:
Master:172.16.1.2
Slave:172.16.1.2
一、Master上安装配置rsync
1.1 安装就不说了,刚才那样就行
1.2 配置rsync
安装时生成配置文件样例在/usr/local/share/man/man5下,叫rsyncd.conf.5 拷备到/etc/下叫rsyncd.conf,rsyncd.conf文件由多个模块组成,包含全局参数和模块参数,前面的是注释,主要内容有:

  uid = nobody             ##全局配置开始,指文件传输时模块进程的uid 
        gid = nobody             ##同上gid 
        use chroot = no          ##是否让进程离开工作目录 
        max connections = 4      ##最大并发数 
        syslog facility = local5 ##记录日志的facility 
        pid file = /var/run/rsyncd.pid  ##pid位置 
        [ftp]                    ##模块配置开始 
        path = /var/ftp/pub      ##需要备份的目录,必须指定, 
        comment = whole ftp area  ##注释 
        read only = no           ##客户端是否只读 
        write only = no          ##是否只能写 
        hosts allow = *          ##允许同步主机 
        hosts deny = 192.168.0.0/24 ##禁止访问的主机 
        list = yes               ##是否允许列出所有模块 
        uid = root                
        gid = root 
        auth users = slave       ##可以连接该模块的user 
        secrets file = /etc/rsync.pass  ##密码文件在哪,需要自己建立

1.3 建立密码文件 /etc/rsync.pass 如下格式,并确保权限为600或400

复制代码代码示例:
slave:helloworld

1.4 启动守户进程

复制代码代码示例:
rsync --daemon   ##启动守护进程 
netstat -tlnp |grep rsync 查看是否启动,查看监听端口

二、slave端rsync设置
2.1 安装rsync 看上方

2.2 不需要配置文件,直接运行命令即可,为了不用输入密码,建立密码文件,并确保权限为600
echo "helloworld" >/root/rsync.pass.slave

2.3 rsync的选项过多,我们把它写到一个脚本中,需要的时候运行即可
vi /root/rsync.sh

复制代码代码示例:
#!/bin/bash 
/usr/local/bin/rsync -vzrtogpg --delete --progress \ 
slave@172.16.1.2::ftp /var/ftp/pub --password-file=/root/rsync.pass.slave  
 

chmod +x /root/rsync.sh ##修改权限

三、测试
在master的目录中添加文件,查看是否能同步
cp /etc/passwd /var/ftp/pub  
slave运行脚本测试
sh /root/rsync.sh 
查看/var/ftp/pub 中是否多了个文件

四、客户端创建备份策略,每隔5秒同步一次
cron只能精确到分,下面用脚本实现每5秒同步一次。
vi cron.sh

复制代码代码示例:
#!/bin/bash 
for ((i=1;i<=12;i++));do 
echo "*/1 * * * * /root/rsync.sh" >> /var/spool/cron/root 
sleep 5 
done 
 

再次在/var/ftp/pub中添加文件,看是否能正常同步。
 
这种方式有个弊端,就是客户端每隔5秒须同步一次,这样的频率是十分浪费资源的,间隔时间长的话数据又不能保持一致,rsync每次同步都需要比对文件更改,如果文件多了,这样是非常低效的,所以我们得用更高效的方法,那就是inotify。

inotify是什么?

inotify 是一种强大的,细粒度的异步文件系统事件监控机制。通过inotify可以监控文件系统中的添加、删除、修改等,利用这个内核接口,第三方的软件可以监控文件系统的变化,从而触发rsync的同步操作,我们用inotify-tools来实现这个功能。

思路:inotify-tool应该装在需要被监控的主机上,假如我们把它安装在master上,监控自己的文件系统,当文件系统发生变化时,它应该通知客户端来同步,比如:

复制代码代码示例:
ssh 172.16.1.3 '/root/rsync.sh'  
 

前提双机ssh互信。
还有一种做法可能比这个好些,把inotify-tool安装在slave上,来监控slave的文件系统,当slave中文件系统有变化时,就把自己的数据同步到master上去,不过好想两者角色调转了。

五、尝试第一种思路
5.1 master上安装notify-tools
下载:

复制代码代码示例:
# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 
tar xvf inotify-tools-3.14.tar.gz  
cd inotify-tools-3.14 
./configure 
make && make install 

5.2 生成了两个执行程序 usr/local/bin/inotifywait  /usr/local/bin/inotifywatch,inotifywait用来监控文件系统的更改,inotifywatch用来统计更改文件系统事件的。

5.3 inotifywait的一些参数 
-m  --monitor     ##始终监控 
-r  --recursive   ##递归的 
-q  --quiet       ##打印监控事件 
-e  --event       ##指出要监控的事件,有:modify,delete,create,attrib等

5.4 运行 inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%e' -e modify,delete,create,attrib /var/ftp/pub 往/var/ftp/pub中添加一个文件,查看有没有输出,如果有,代表一切正常。  
--timefmt  时间格式 
--format   变化文件的详细信息

5.5 用脚本来实现,当/var/ftp/pub/中文件有变化时,让slave同步  
vi inotify_slave.sh

复制代码代码示例:
#!/bin/bash 
inotifywait -mrq --timefmt '%d/%m%y %H%M' --format '%T %w%f%e' \
-e modify,delete,create,attrib /var/ftp/pub  | while read files  
do 
     ssh 172.16.1.3 '/root/rsync.sh'    ##双机互信已经做好
done

5.6 测试
运行脚本,在/var/ftp/pub中添加文件测试

复制代码代码示例:
sh inotify_slave.sh &  
cp -R /etc/rc.d/init.d /var/ftp/pub 
 

查看slave中文件是否同步

六、另一种思路,在slave上安装inotify_tools
6.1 安装就不赘述了
 
6.2 结束master上运行的脚本

6.3 写个脚本来监控slave的/var/ftp/pub,当/var/ftp/pub文件系统发生变化,立刻同步到master上,这样一来slave就成了真正的master,master变成了slave
vi inotify_to_master.sh

复制代码代码示例:
#!/bin/bash 
inotifywait -mrq --timefmt '%d/%m%y %H%M' --format '%T %w%f%e' \
-e modify,delete,create,attrib /var/ftp/pub/  | while read files 
do 
 rsync -vzrtogpg --delete --progress  /var/ftp/pub slave@172.16.1.2::ftp \
--password-file=/root/pass.rsync
done
 

6.4 往slave的/var/ftp/pub中添加文件,运行测试

复制代码代码示例:
sh inotify_to_master.sh & 
cp -R /etc/yum /var/ftp/pub

查看master中是否同步.

总结:到此rsync实验完毕,rsync对数据备份挺有用的,尤其是一些资金不足的公司,可替代共享存储。

您可能感兴趣的文章:
linux rsync同步备份的安装与配置
Linux下架设rsync服务器的案例分享
rsync同步排除多个文件的方法
linux下rsync服务配置一例
使用rsync备份文件的方法浅析
rsync同步时排除文件的方法
有关rsync安装与配置的实例教程
有关rsync服务器端配置及客户端的使用
学习rsync服务端与客户端的配置
使用rsync的exclude选项
rsync文件同步配置一例
文件同步工具rsync配置
linux rsync同步设置指南

rsync与inotify 数据同步的更多相关文章

  1. Inotify+rsync实现实时数据同步

    使用rsync可以实现数据同步,但是即使使用crontab定时任务最小执行间隔为1分钟,在数据实时性要求比较高场合需使用inotify+rsync实现实时同步 下载inotify wget https ...

  2. Linux学习系列之Inotify+Rsync实现实时数据同步

    Inotify简介 inotify介绍 inotify是一种强大的.异步的文件系统监控机制,linux内核从2.6.13起,加入了inotify的支持,通过inotify可以监控文件系统中添加.删除. ...

  3. centos7部署inotify与rsync实现实时数据同步

    实验环境:CentOS Linux release 7.6.1810 node1:192.168.216.130 客户端(向服务端发起数据同步) node2:192.168.216.132 服务端(接 ...

  4. RHEL 6.5----rsync+inotify数据同步服务

    Rsync特性: 可以镜像保存整个目录树和文件系统: 可以保持原文件的权限.时间.软硬链接等: 安装简单. 传输特点: 速度快:rsync首次同步会复制同步全部内容,以后只传输修改过的文件: 压缩传输 ...

  5. rsync服务架设(数据同步|文件增量备份)

        近期由于业务需要,需要将两台服务器数据保持同步.方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究.以下是本文提纲,供参考: rsy ...

  6. Rsync结合Inotify 实时同步配置(更新之前繁琐的传输认证)

    今天一位CU的友友根据之前介绍过 通过rsync+inotify-tools+ssh实现触发式远程实时同步  配置分发系统,但是由于认证繁琐,很容易出错,我今天重新整理了下,用rsync密码文件pas ...

  7. Rsync+inotify 数据同步应用指南

    Rsync+Inotify-tools (1):Inotify-tools 只能记录下被监听的目录发生了变化(包括增加.删除.修改),并没有 把具体是哪个文件或者哪个目录发生了变化记录下来: (2): ...

  8. Rsync+inotify数据同步

    安装环境 备份服务器端:CentOS7,IP:192.168.1.100 备份客户端:CentOS7,IP:192.168.1.200 服务器端Rsync服务部署 1.安装程序包 # yum –y i ...

  9. 配置rsync服务,数据同步。

    这部分设计服务器端和客户端. [服务器端] 如果服务器没有安装rsync服务则使用yum安装rsync服务. yum install rsync 然后 vim /etc/xinetd.d/rsync ...

随机推荐

  1. jquery美化滚动条插件jscrollpane应用(转)

    原文地址:http://www.jqcool.net/jquery-jscrollpane.html jScrollPane是一个设计非常灵活的跨浏览器的jQuery ,它将浏览器的默认滚动条或是元素 ...

  2. mysql使用心得

    SET FOREIGN_KEY_CHECKS=0; -- ------------------------------ Table structure for `staff`-- ---------- ...

  3. php单引号、双引号与数据库

    /**  * 初始化http参数数据  */ public static function init () {  if (!get_magic_quotes_gpc()) {   $_POST  = ...

  4. java_spring_依赖注入

    IOC反转控制 PersonService属性 PersonDao personDao接受通过xml注入的对象 PersonDaoBean.  Person中save()调用 PersonDaoBea ...

  5. Migration from Zend Framework v2 to v3

    Migration from Zend Framework v2 to v3 Zend Framework v2 to v3 has been intended as an incremental u ...

  6. Android之HTTP网络通信--GET传递

    说明 在做一个项目的时候难免会与服务器打交道,这里我就做一个小的Demo来简单的说明一下HTTP的使用,我这里使用的是图灵的接口,你也可以登陆www.tuling123.com进行申请.我使用的是上面 ...

  7. 使用angular的ng-repeat遇到的一个问题

    问题描述:ng-repeat绑定的数据集动态更新之后其包裹的子元素所绑定的事件全部丢失:问题详述:问题代码如下: <style> img{width:100px;height:100px; ...

  8. StringBuilder 用法和div获取

    StringBuilder strHtml = new StringBuilder(); strHtml.Append("<tr>"); strHtml.Append( ...

  9. 为ubuntu只带的network-manager添加latp/ipsec VPN

    sudo apt-add-repository ppa:seriy-pr/network-manager-l2tp sudo apt-get update sudo apt-get install n ...

  10. JavaScript入门(8)

    一.什么是对象 JavaScript中的所有事物都是对象.如:字符串.数值.数组.函数等.每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的.如:字符串的长度.图像的长宽 对象的方法:能 ...