发布: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. SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇, 最终的解决方案 验证。

    SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇. 1,安装数据库,我就不多说安装,客户一定要注意. 我将参照以下实施例和账户. 2,建立DNS,假设没有DN ...

  2. Python 魔术方法指南

    入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...

  3. 笨办法学C 练习

    http://c.learncodethehardway.org/book/index.html

  4. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  5. 关于XML的DTD概述

    1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...

  6. 服务器的SVN项目版本较低,check out 下来后报错

    check out下来后报错提示: svn: E155036: Please see the 'svn upgrade' commandsvn: E155036: Working copy '/hom ...

  7. selendroid inspector xpth元素定位记录

    android自动化测试元素定位,目前发现appium官方的uiautomatorviewer一般的元素定位还行,但好多都找不到. 这个时候,可以考虑selendroid的inspector 官网:h ...

  8. [记录]ns_error_unexpected firefox tinymce

    参考: Form not saving, NS_ERROR_UNEXPECTED  Error: NS_ERROR_UNEXPECTED #794 NS_ERROR_UNEXPECTED on Fir ...

  9. PHP生成HTML页面顶部出现空白部分(&#65279字符?)

    参考了:PHP生成HTML页面顶部出现空白部分(#65279字符?)的解决办法 查看拼接两个Html,查看文件格式是否是UTF-8 无Bom,我的内容Html是UTF-8 + Bom.

  10. SharePoint移动客户端--Rshare 中的Smart Cache

    Rshare中的Smart Cache 能好好的帮助那些移动客户,当网络信号不好或者没有wifi的时候,cache大有可为,只要你在上飞机执勤cache 了相关文档,你就可以在飞行模式下继续你的工作. ...