Rsync+Inotify实现数据实时同步

简介: Rsync+Inotify实现数据实时同步

1、环境及相关软件介绍

操作系统:Ubuntu12.04_x64

源服务器(推送):192.168.18.10

目标服务器(备份):192.168.18.20

rsync:

 rsync是unix系统下的数据镜像备份工具,是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输)、rsync主机同步。

rsync有以下常用的参数:

   -v,--verbose 显示同步过程的详细信息

   -a,--archive 归档模式,表示以递归方传输文件,并保持所有文件属性,等同于-rlptgoD

   -r,--recursive 对子目录以递归模式处理

   -z,--compress 对备份的文件在传输时进行压缩处理

   -l,--links 保留软连接

   -H,--hard-links 保留硬链接

   --delete 删除那些DST中SRC没有的文件(源服务器删除文件,目标服务器也同时删除)

   --progress 显示备份过程,等同于-P

--port=PORT 指定rsync服务端口

   --exclude=FILE 排除一个目录或文件(排除多个目录时,可以写多个--exclude)

   --exclude-from=FILE  排除多个目录或文件,FILE里面写多个要排除的目录

inotify:

inotify是一个Linux特性,它监控文件系统操作,比如读取、写入和创建,当文件系统有变化时,则会触发inotify。inotify提供inotify-tools工具,这个工具包含两个功能,一个是inotifywait,用来监控文件系统变化的事件,另一个是inotifywatch,用来统计文件系统访问的次数。我们这次使用inotifywait结合rsync实现实时同步功能。

inotifywait有以下常用参数:

-m,--monitor 一直保持监听事件

-r,--recursive 递归监控目录

-q,--quiet 只打印触发的事件

-e,--event 指定监视时间

--timefmt 指定时间格式,用于-format选型中的%T格式

--format 指定输出格式。

%w 表示发生事件的目录

%f 表示发生事件的文件

%e 表示发生的事件

%T 使用由—timefmt定义的时间格式

inotifywait常用监视事件:

access 文件或目录读取

modify 文件或目录更改

attrib 文件或目录属性更改

move  文件或目录移动

create 文件或目录创建

delete 文件或目录删除

2、目标服务器安装与配置

# sudo apt-get install rsync    #ubuntu系统默认已安装
# sudo cp/usr/share/doc/rsync/examples/rsyncd.conf /etc/
# sudo vi /etc/rsyncd.conf

# 以下是全局配置

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd

#以下是模块选项配置

[home]     #模块名,在源服务器指定这个名字
   comment = sync rsync/home      #描述信息
   path = /home/rsync      #备份目录
   use chroot=no           #不使用chroot,不用root权限
   read only = no          #设置本地备份目录为读写权限
   uid=root          
   gid=root
   max connections=10       #客户端最大连接数
   auth users = rsync      #指定数据同步用户
   secrets file = /etc/rsyncd.pass          #指定数据同步用户信息文件
   hosts allow=192.168.18.0/24     #允许连接的客户端
   ignore errors = yes     #忽略出现I/O错误
   timeout = 600

#创建认证文件

# sudo vi /etc/rsyncd.pass
rsync:123456      #格式是用户名:密码
# sudo chmod 600 /etc/rsyncd.pass      #属主要有权限读这个文件,否则会报没权限
# sudo /etc/init.d/rsync start     #如果启动报如下错误,则根据提示打开/etc/default/rsync文件,将RSYNC_ENABLE=false该为RSYNC_ENABLE=true,再重启即可。
* rsync daemon not enabled in/etc/default/rsync, not starting...

#,查看是否启动,有rsync监听端口说明正常:
# sudo netstat -antp |grep rsync
tcp        0     0 0.0.0.0:873            0.0.0.0:*               LISTEN      29605/rsync

博客地址:http://lizhenliang.blog.51cto.com

3、源服务器安装与配置

# sudo apt-get install rsync inodify-tools
#rsync不用配置,因为我们只使用rsync命令,紧接着创建认证文件
# sudo vi /etc/rsyncd.pass
123456     #只写密码
# sudo chmod 600/etc/rsyncd.pass

#此时基本配置完成,测试下是否能推送吧!

# rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@192.168.18.20::home   #home即是目标服务器上rsync里面的模块名
sending incremental file list
rsync/a
           0 100%    0.00kB/s   0:00:00 (xfer#1, to-check=5/7)
sent 354 bytes  received 126 bytes  960.00 bytes/sec
total size is 0  speedup is 0.00

#出现以上信息说明同步正常,接下来,就该编写Shell脚本,使用inotifywait做实时监控源目录,加个while循环判断源目录是否有触发,如果有变化则执行rsync同步,并记录日志:

# vi inotify_rsync.sh
#!/bin/bash
SRC='/home/rsync'
DST='rsync@192.168.18.20::home'
/usr/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w %f %e' -e create,delete,move,modify $SRC|while read files
do
    rsync -avzP --password-file=/etc/rsyncd.pass --delete $SRC $DST
    echo "$files was rsynced.">> /tmp/rsync.log
done

4、测试实时同步

#先打印形式查看脚本执行情况

# bash -x inotify_rsync.sh 
+ SRC=/home/rsync/        #目录结尾一定要加个/,否则会再目标服务器再创建个目录
+DST=rsync@192.168.18.213::home
+ read files
+ /usr/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' -e create,delete,move,modify,attrib /home/loongtao
+ rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@@192.168.18.213::home
sending incremental file list
rsync/
rsync/test.txt
           0 100%    0.00kB/s   0:00:00 (xfer#1, to-check=2/11)
 
sent 349 bytes  received 32 bytes  762.00 bytes/sec
total size is 9380  speedup is 24.62
+ echo '15-04-24 13:33/home/rsync/test.txt CREATE was rsynced.'
+ read files
+ rsync -avzP--password-file=/etc/rsyncd.pass --delete /home/rsync rsync@192.168.18.213::home
sending incremental file list
 
sent 310 bytes  received 10 bytes  640.00 bytes/sec
total size is 9380  speedup is 29.31
+ echo '15-04-24 13:33/home/rsync/test.txt ATTRIB was rsynced.'
+ read files

#可以看到以上信息,无任何报错,说明已经推送成功。

然后,把脚本放到后台运行:

# chmod +x inotify_rsync.sh
# ./inotify_rsync.sh &

#此时当源服务器/home/rsync目录文件有更新,则会同步到目标服务器/home/rsync目录


相关文章
|
Linux Perl
Centos8 yum源配置方法
本文介绍了Centos8 版本中yum的配置
12054 30
Centos8 yum源配置方法
|
9月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
1048 16
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
271553 0
|
Linux 数据安全/隐私保护 Windows
【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南
本文是JumpServer堡垒机使用指南,介绍了如何在JumpServer中简便添加Windows资产的步骤,包括准备工作、开启Windows远程设置、在JumpServer中配置Windows资产以及授权使用。
4397 1
【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南
|
Linux Apache
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
8753 0
|
应用服务中间件 nginx Docker
配置Containerd运行时镜像加速器
containerd配置国内容器镜像加速器
5178 1
|
云安全 缓存 网络协议
如何防护DDoS攻击,筑牢网络安全防线
随着信息技术的飞速发展,网络已成为现代社会不可或缺的一部分,极大地便利了个人社交和商业活动。然而,网络空间在创造无限机遇的同时,也潜藏着诸多威胁,其中分布式拒绝服务攻击(DDoS,Distributed Denial of Service)以其高破坏力和难以防范的特点,成为网络安全领域的一大挑战。本文将从DDoS攻击的原理出发,详细探讨如何有效防护DDoS攻击,以筑牢网络安全防线。
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
449 1
|
Shell 网络安全 开发工具
Unison+Inotify 实时双向同步
【8月更文挑战第25天】Unison+Inotify可以实现,无论客户端还是服务器,只有发生变化全部进行同步,前置条件,两台服务器必须互相建立SSH密钥对验证,其次服务器和客户端必须同时安装以下软件,做相同的配置。
299 3
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析