rsync+inotify-tools实现文件的实时同步

rsync简介:

Rsync 是一个远程数据同步工具,使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份

inotify-tools简介:

inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。现在介绍一下它的使用方法

环境部署:

inotify_slave  42.159.246.48:57893      数据备份端

inotify_master  42.159.246.48:57892      源数据端

一、部署数据备份端:

1. 备份端部署rsync服务:

[[email protected] ~]#yum -y install rsync

[[email protected] ~]#useradd rsync -s /sbin/nologin  -M

[[email protected] ~]#mkdir -p /cmsresoure/image/backup

[[email protected] ~]#chown rsync:rsync /cmsresoure/image/backup

2. 添加配置文件/etc/rsyncd.conf

[[email protected] ~]#vim /etc/rsyncd.conf

##################################################################################

##rsyncd.conf start##

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[backup]

path = /cmsresoure/image/backup/

ignore errors

read only = false

list = false

hosts allow = *

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

#rsync_config_______________end

##################################################################################

3. 配置虚拟用户的密码文件并启动服务

[[email protected] ~]# echo "rsync_backup:leesir" >/etc/rsync.password

[[email protected] ~]# chmod 600 /etc/rsync.password

[[email protected] ~]# rsync --daemon

[[email protected] ~]# ps -ef | grep rsync

4. 通过源数据端测试推送

[[email protected] ~]# echo "leesir" >/etc/rsync.password #注意:这里只要写密码即可,切记。

[[email protected] ~]# chmod 600 /etc/rsync.password

[[email protected] ~]# rsync -avzlh  inotify.sh [email protected]::backup --password-file=/etc/rsync.password

在源数据端推送后,去数据备份端检查是否推送成功。

二、源数据端部署

1. 查看当前系统是否支持inotify

[[email protected] ~]# ll /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 Oct  8 18:54 max_queued_events

-rw-r--r-- 1 root root 0 Oct  8 18:54 max_user_instances

-rw-r--r-- 1 root root 0 Oct  8 18:54 max_user_watches

Remarks:

#显示这三个文件则证明支持。

/proc/sys/fs/inotify/max_queued_evnets

#表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

/proc/sys/fs/inotify/max_user_instances

#表示每一个real user ID可创建的inotify instatnces的数量上限。

/proc/sys/fs/inotify/max_user_watches

#表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

例如: echo 30000000 > /proc/sys/fs/inotify/max_user_watches

2. 部署inotify服务:

[[email protected] ~]#  yum -y install inotify-tools

[[email protected] ~]#  rpm -qa  | grep inotify-tools

inotify-tools-3.14-1.el6.x86_64

[[email protected] ~]#  vim inotify.sh

##################################################################################

#!/bin/bash

#

#2015.10.8

#

DESTHOST=42.159.246.48

SRCDIR=/cmsresoure/image/backup/

PASSWD=/etc/rsync.password

USER=rsync_backup

inotifywait -mr  --timefmt ‘%d/%m/%y  %H:%M‘   --format  ‘%T   %w    %f‘ -e close_write,modify,create,attrib $SRCDIR | while read DATE TIME DIR FILE;do

FILECHANGE=${DIR}${FILE}

rsync -avztopglH $SRCDIR  [email protected]${DESTHOST}::backup --password-file=$PASSWD  &>/dev/null && \

echo "At ${TIME} on ${DATE}, file $FILECHANGE was  backed up via rsync"  >> /var/log/image.log

done

##################################################################################

3. 测试脚本创建文件测试:

[[email protected] ~]# more  /home/user/touch_file.sh

##################################################################################

#!/bin/sh

#

#2015.10.8

#

#Create 5 100K files, file name is a random number

#

#

for ((i=1;i<6;i++))

do

dd if=/dev/zero of=/cmsresoure/image/backup/$(sha1sum<<<$RANDOM|cut -b 5-10)  bs=100k count=1

echo "touch $i done"

sleep 3

done

echo "the script is done"

##################################################################################

[[email protected] ~]# echo "*/30 * * * * /bin/bash /home/user/touch_file.sh > /dev/null 2>&1" >> /etc/cronteb

[[email protected] ~]# sh inotify.sh &             #将脚本加入后台执行

Setting up watches.  Beware: since -r was given, this may take a while!

Watches established.

三. 实时同步测试

1. 源数据端操作:

[[email protected] ~]# sh /home/user/touch_file.sh

##################################################################################

1+0 records in

1+0 records out

102400 bytes (102 kB) copied, 0.000441594 s, 232 MB/s

touch 1 done

1+0 records in

1+0 records out

102400 bytes (102 kB) copied, 0.000603492 s, 170 MB/s

touch 2 done

1+0 records in

1+0 records out

102400 bytes (102 kB) copied, 0.000548994 s, 187 MB/s

touch 3 done

1+0 records in

1+0 records out

102400 bytes (102 kB) copied, 0.000423695 s, 242 MB/s

touch 4 done

the script is done

##################################################################################

[[email protected] ~]# ls /cmsresoure/image/backup/

039f90  15aaf2  1c2d4b  3b079d

2. 数据备份端检查:

[[email protected] ~]# cd /cmsresoure/image/backup/

[[email protected] backup]# ls

039f90  15aaf2  1c2d4b  3b079d

四. 维护:

1.  设置在备份端监控Rsync服务的脚本:

[[email protected] shell]# vim rsync_check.sh

##################################################################################

#!/bin/bash

#

#2015.10.8

#

#The script will check the Rsync service, if you find that Rsync will restart the service.

RSYNC_CHECK=`netstat -npl | grep -c rsync`

if [ "$RSYNC_CHECK" -eq "0" ];

then

/usr/bin/rsync --daemon

fi

##################################################################################

[[email protected] shell]# echo "*/2 * * * * /bin/bash /shell/rsync_check.sh >/dev/null 2>&1"  >>/etc/crontab

Remarks:

将脚本加入到计划任务中,没两分钟检查一次rsync是否正常运行

2.  设置在源数据端检查inotify服务的脚本:

[[email protected] shell]# vim check_inotify.sh

##################################################################################

#!/bin/bash

#

#2015.10.9

#

#the script will to check the inotify server

#

#

INOTIFY=/shell/inotify.sh

CHECK_INOTIFY=`ps -ef | grep -c inotify.sh`

if [ "$CHECK_INOTIFY"  -eq "1" ];

then

/bin/bash  "$INOTIFY"  >/dev/null 2>&1

fi

##################################################################################

[[email protected] shell]# echo  "*/2 * * * * /bin/bash /shell/check_inotify.sh >/dev/null 2>&1"  >> /etc/crontab

五。测试结果:

rsync+inotify-tools同步效果:rsync可以完全实时同步监控的文件夹,并输出同步日志。

时间: 2024-10-18 15:00:42

rsync+inotify-tools实现文件的实时同步的相关文章

rsync + inotify 用来实现数据实时同步

一.简介 1.rsync 比其cp.tar备份的方法,rsync的优点是,安全性高.备份迅速.支持增量备份.只能做对实时性要求不高的数据备份,例如:备份文件服务到远端从服务器.在本地磁盘上做数据镜像等 增量备份:就是rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.但是对于大量文件达到千万量级别时,扫描所有文件是非常耗时的. 如果发生改变的只是其中的一小部分的话,这是非常低效的方式. rsync 不能实时的去监测,同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,两

Rsync+inotify完整备份及数据实时同步

Rsync+inotify数据实时同步 客户端IP:192.168.1.10         服务端IP:192.168.1.20 1.什么是Rsync? Rsync(remote synchronize)是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据镜像同步备份优秀工具,他适用于unix/Linux/Windows多系统操作平台, 2.Rsync的特性 1.支持拷贝特殊文件入链接.设备等 2.可以有排除执行文件或目录同步的功能相当于打包命令tar的排除功能 3.可以做到保持源

rsync+inotify实现服务器间文件的实时同步

rsync虽然可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了我的需求,同步数据实时性的问题,下面便看我娓娓道来. 一) lists Ip Status Cp  PATH App 192.168.1.1 Server /data Rsync-server 192.168.1.2 Client /OM/logs/data Rsync-client+

rsync+inotify 实现服务器文件实时同步

rsync+inotify 实现服务器文件实时同步 操作系统:CentOS 6.X 源服务器:192.168.80.132 目标服务器:192.168.80.128 目的:把源服务器上/data/app目录实时同步到目标服务器的/data/app下 具体操作: 第一部分:在目标服务器192.168.80.128上操作 一.在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #SELINUXTYPE=targ

sersync + rsync 实现文件的实时同步

前面我们说过rsync + inotify 的方式来实时的同步文件 今天来记录一下一项新的东西来实现文件的实时同步 那就是sersync + rsync 实验环境: 192.168.220.99     源文件 192.168.220.98     备份文件 sersync的介绍 sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-tools+rsync ,另外一

rsync+inotify节点间文件实时同步

说明: 操作系统:CentOS 7.2 server服务器(代码.数据检入)server: SLB-1:10.171.63.120 client服务器(数据检出.主动推送)client:WWW:10.163.0.233 目的:把client服务器上/www/web目录实时同步到server服务器的/www/web下 ============================================================ 具体操作: 第一部分:在server--SLB-1_10.1

配置rsync+inotify实现站点文件实时同步

一.rsync简介 rsync是linux系统下的数据镜像备份工具.可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份.镜像服务器等应用. rsync的官方站点为http:rsync.samba.org/ 二.使用rsync备份工具 2.1.rsync命令的基本用法 用法类似于cp命令,例如将文件/etc/fstab 和目录/boot/grub同步备份到.opt目录下,其中-r表示递归整个目录,-l选项用来备份链接文

[rsync+inotify]——监控客户端文件变化,rsync同步到服务器

关于rsync的配置请参考博文:http://www.cnblogs.com/snsdzjlz320/p/5630695.html 实验环境 (1) Rsync服务器:10.0.10.158 (2) Rsync客户端:10.0.10.173 Inotify都在客户端配置 1.查看系统是否支持inotify # ls /proc/sys/fs/inotify/ max_queued_events max_user_instances max_user_watches  #这些值一般不去修改但在监控

rsync+sersync实现向多服务器实时同步数据

web:192.168.1.10的/www    同步到rsync:192.168.1.11的backup模块 1 inotify 适用于大量小文件实时同步 对于大文件使用sersync 2 下载安装包 wget http://cywl.jb51.net:81/201111/tools/sersync_64bit_binary_stable_final.tar.gz 3 解压 后为GNU-Linux-x86 4 mkdir /usr/local/sersync 5 将GNU-LINUX里面内容复