如何实现数据实时同步

如何实现数据实时同步,第1张

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,-递归对联目录递归求解。

-z,-compress在传输过程中减小备份数据文件的大小。

-l,-链接节省了导电柔性连接。

-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,它有两个功能,一个是inotifywatch,用于监督文件系统软件改造的恶性事件,另一个是inotifywatch,用于统计分析文件系统软件的浏览频率。这一次,我们使用inotifywait来集成rsync,以完成即时同步。

inotifywait有以下常见的主要参数:

-m,-monitor持续监控恶性事件。

-r,-递归递归监督目录

-q,-quiet只复制已打开的恶性事件。

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

-timefmt指定时间格式,在-format模型选择的%T格式中使用。

-format指定输出格式。

%w表示发生恶性事件的目录。

%f表示导致恶性事件的文件。

%e表示生成的恶性事件。

%T应用由-—timefmt定义的时间格式。

Inotify等常见监测恶性事件:

访问文件或目录加载

修改文件或目录更改

属性文件或目录特征改变

移动文件或目录移动

创建文件或目录

删除文件或目录。

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目录中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/783471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存