原理:

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. Leetcode 74. 搜索二维矩阵 C+

    二分法,先对行二分找出结果可能存在的行,再对这一行二分查找.O(Log m+Log n),m.n分别为矩阵的高和宽. class Solution { public: bool searchMatri ...

  2. 路飞-Redis的使用,登录注册接口

    复习 """ 1.git项目开发 提供公钥成为开发者.copy项目.开发项目 先commit.再pull(可能出现冲突).最后push 特殊功能可以新建dev的子分支进行 ...

  3. <meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/>

    <meta charset="utf-8" name="viewport" content="width=device-width, initi ...

  4. LED Decorative Light Supplier - Decorative Use Of LED Light Strips

    Led strip refers to the led assembly in the ribbon of the FPC (flexible circuit board) or PCB hard b ...

  5. 【Python】蟒蛇绘制

    来画一只你的小蛇吧! 1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器, ...

  6. GOM引擎脚本 时间段内调整人物属性

    功能: 调整人物属性 格式: ChangeHumAbility 属性(1-20) 操作符(+ = -) 效果(1-65535) 时间秒说明: 属性1-12分别对应人物 防御下限 防御上限 魔御下限 魔 ...

  7. 第二十八篇 玩转数据结构——堆(Heap)和有优先队列(Priority Queue)

          1.. 优先队列(Priority Queue) 优先队列与普通队列的区别:普通队列遵循先进先出的原则:优先队列的出队顺序与入队顺序无关,与优先级相关. 优先队列可以使用队列的接口,只是在 ...

  8. SQL Server 函数大全

    本文链接:https://blog.csdn.net/qq_15028299/article/details/81330854SQL2008 表达式:是常量.变量.列或函数等与运算符的任意组合.htt ...

  9. java 子线程异常处理

    如何在父线程中捕获来自子线程的异常呢 方法一:子线程中try... catch... 方法二:为线程设置异常处理器UncaughtExceptionHandler (异常处理也是在子线程中执行,相当于 ...

  10. 路飞-后台Django项目创建

    后台:Django项目创建 环境 """ 为luffy项目创建一个虚拟环境 >: mkvirtualenv luffy """ &qu ...