原理:

rsync:用于跨主机目录同步

inotify:用于监测目录变化

再编写一个触发脚本,一旦inotify检测到目录中内容发生变化,则调用rsync执行同步。

rsync服务器的的配置:

因为rsync是被xinetd守护,所以需要首先安装xinetd程序。

服务端配置:

安装阿里云epel源:

rpm -ihv https://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install xinetd -y  安装守护进程xinetd

service xinetd start

yum install rsync -y   安装rsync

使xinetd监听rsync:

vim /etc/xinetd.d/rsync       #启用rsync

将其中的disable = yes 改为disable = no

service xinetd restart

编辑主要配置文件 /etc/rsyncd.conf  这个文件需要自己创建

vim /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log    #最好指明日志文件目录,一旦出错才好查看日志排查

[web]

path = /rsync

list = false

read only = no  一定要关闭只读,因为默认只读客户端是没有权限拉取数据的。

#hosts allow = 192.168.9.195/255.255.255.0

#hosts deny = 0.0.0.0/32

auth users = test   #指明用于认证的用户,到时候其它主机来同步文件就要以这个用户的身份

secrets file = /etc/test.pass    #指明用于保存密码的文件路径

每一个“[]”下面的为一个模块,path是它所映射的目录,当同步这个模块时,便是同步path下面的目录中的内容

编辑服务器的密码文件 /etc/test.pass

vim /etc/test.pass

test:123456   这个用户和密码需要是实际存在的系统用户,到时候客户端来同步数据时就是以这个身份

chmod 600 /etc/test.pass

客户端配置:

客户端主要是要去同步服务端的配置,rsync默认是安装了的,若没有可以自行安装

yum install rsync -y   安装rsync

编辑rsync连接时的密码文件 /etc/rsync_client.pass

vim /etc/rsync_client.pass

123456                    # 只需要配置连接时使用的密码即可,必须与服务器上定义的密码相同.

chmod 600 /etc/rsync_client.pass

配置好服务端和客户端之后就可以进行同步测试了

rsync命令的使用:

  

rsync 可以相当于复制命令,会将指定内容复制到目标位置

-a 保留文件所有属性复制

-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试

-v:详细输出模式,--verbose

-q:--quiet,静默模式

-c:--checksum,开启校验功能,强行对文件传输进行校验

-r:--recursive,递归复制

-a: --archives.归档,保留文件的原有属性相当于rlptgoD的选项组合wKioL1gEMvXRMZ5SAAAitet95ug281.png-p:--perms 保留文件的权限

-t: --times 保留文件的时间戳

-l:--links 保留文件的符号链接

-g:--group保留文件的属组

-o:--owner 保留文件的属主

-D:--devices 保留设备文件

-e ssh:表示使用ssh协议作为继承

-z:对文件压缩后传输

--progress:显示进度条

注意:

rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身,包括目录

客户端从服务端拉取数据:

  rsync -avzP test@192.168.0.106::web /rsync --password-file=/etc/rsync_client.pass

客户端向服务端推送数据:

  rsync -avzP /rsync test@192.168.0.106::web  --password-file=/etc/rsync_client.pass

安装inotify:

  

yum install inotify-tools -y

安装之后会在服务器上生成两个二进制程序:inotifywait   inotifywatch

我们主要是利用inotifywait  来监测目录变化。

在客户端添加实时同步脚本:

  

#!/bin/bash

# tools : inotifywait and rsync

/usr/bin/inotifywait -mrq --exclude '.*/*\.(swp|swx|.*~)$' --timefmt '%y/%m/%d/%H:%M' --format '%T %w %f %e' -e modify,delete,create,move /rsync | while read events ; do

rsync -vzrtopg --progress --delete --password-file=/etc/rsync_client.pass /rsync test@192.168.0.106::web

done

之后将脚本挂在后台运行就可以了

rsync+inotify实现主机之间目录实时同步的更多相关文章

  1. rsync+inotify实现服务器之间文件实时同步--转

    之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...

  2. linux系统中rsync+inotify实现服务器之间文件实时同步

    最近需要对服务器上的文件实施动态备份,我又不想每次都手动来进行备份,在网上找了挺多资料,发现使用rsync就可以实现,如果想要实现实时同步,还可以使用rsync+inotify组合,本文就是以组合方式 ...

  3. linux下rsync+inotify实现服务器之间文件实时同步

    先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例 ...

  4. centos6.5 rsync+inotify实现服务器之间文件实时同步

    1. rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据 ...

  5. rsync+inotify 实现服务器之间目录文件实时同步(转)

    软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文 ...

  6. Centos 6.5 rsync+inotify 两台服务器文件实时同步

    rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源 ...

  7. rsync+inotify实现多台服务器之间数据实时同步

    配置环境 1.操作系统:CentOS6.5-X86_64 2.rsync客户端(rsync+inotify):192.168.200.82 3.rsync服务端:192.168.200.80,192. ...

  8. inotify+rsync目录实时同步

    两台linux服务器系统CentOS7 一台Apache IP:192.168.155.130(发布文件服务器,也可以叫rsync客户端) 一台nginx IP:192.168.155.131(同步镜 ...

  9. 使用rsync+inotify实现/www目录实时同步

    一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...

随机推荐

  1. 在多租户(容器)数据库中如何创建PDB:方法6 DBCA本地克隆PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:DBCA静默本地克隆PDB.根据 CDB1 中的 PDB1 克隆出 CDB1 中的 PDB_CLONE 对应路径:Creating ...

  2. Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程

    在写驱动的过程中,对于入口函数与出口函数我们会用一句话来修饰他们:module_init与module_exit,那会什么经过修饰后,内核就能狗调用我们编写的入口函数与出口函数呢?下面就来分析内核调用 ...

  3. 关于Javaweb的比较好用的jar包概述

    (连接数据库之前首先要导入这个数据库的驱动jar包 例如mysql 为mysql-connector-java-5.1.46.jar) 关于连接数据库的数据库连接池c3p0  jar包: c3p0-0 ...

  4. nginx知识学习

    设备: macbook 有用的命令行: sudo nginx -t  测试nginx是否正常 sudo nginx -s reload  平滑重启 配置目录: /usr/local/etc/nginx ...

  5. JS table新增一行的时候 如何在新增的这一行把样式也加进去 例如变成<tr class="trd0">

      JS table新增一行的时候 如何在新增的这一行把样式也加进去 例如变成<tr class="trd0">5 JS: var tab = document.get ...

  6. Customized Mini LED Keychain For Better Brand Identity

    Looking for products that tell people the brand name? Then you'll find an affordable product that wi ...

  7. 关于我 & 关于这个博客

    关于我 OIer,初一在读,蒟蒻,普及组选手,只拿过两次PJ2=,实乃菜也 喜欢数学,OI,OI 上主要研究高级数据结构(如平衡树)和一些不那么暴力的算法(如分块) 打不动 CF . 关于这个博客 是 ...

  8. php对字符串的操作3之 字符类型转换详解

    所有的数据输出到屏幕上,实际上被隐式的转换成了字符型,首先了解下各种数据类型的字符串表示 <?php echo 300,'<hr>'; echo true,'<hr>'; ...

  9. MyBatis(7)——使用注解开发

    说明:注解就是利用接口实现的,因此转为面向接口编程,使用接口开发拓展性好.分层开发时上层不用管理具体的实现.更加标准化更加规范.使得各个层的耦合度更低. 注:有了注释语句就不需要实体类的mapper文 ...

  10. jmeter的使用---控制器

    1.如果(If)控制器.Switch Controller if控制语句,判断字段是否存在,或者符合,执行不同的逻辑 2.简单控制器 一次进件流程,需要不同模块的数据,例如登陆,提交个人信息,信用认证 ...