linux文件监控和同步,(转)Linux下经过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步...

本文介绍了如何在Linux环境下利用inotify工具和rsync进行文件实时同步,包括安装步骤、配合shell脚本实现同步、参数优化以及高并发场景下的解决方案。重点讨论了inotify的优缺点和配合rsync的压力测试结果。
摘要由CSDN通过智能技术生成

Linux下经过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

原文:http://www.summerspacestation.com/linux%E4%B8%8B%E9%80%9A%E8%BF%87rsync%E4%B8%8Einotify%E5%BC%82%E6%AD%A5%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BA%8B%E4%BB%B6%E7%9B%91%E6%8E%A7%E6%9C%BA%E5%88%B6%E5%AE%9E%E7%8E%B0%E6%96%87%E4%BB%B6/

目录 [隐藏]mysql

inotify-tools工具安装

与rsync配合经过shell脚本实现同步

将inotify加入自动开机启动服务中

inotify参数优化

rsync+intity压力测试效果

rsync+inotify优缺点

高并发数据实时同步方案

inotify-tools工具安装

查看系统支持:linux

uname -r #系统内核至少达到2.6.13

ls -l /proc/sys/fs/inotify/

总用量 0

-rw-r--r-- 1 root root 0 6月 20 13:17 max_queued_events

-rw-r--r-- 1 root root 0 6月 20 13:17 max_user_instances

-rw-r--r-- 1 root root 0 6月 20 13:17 max_user_watches

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

uname -r #系统内核至少达到2.6.13

ls -l /proc/sys/fs/inotify/

总用量 0

-rw-r--r-- 1 root root 0 6月 20 13:17 max_queued_events

-rw-r--r-- 1 root root 0 6月 20 13:17 max_user_instances

-rw-r--r-- 1 root root 0 6月 20 13:17 max_user_watches

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

下载inotify源码包git

mkdir -p /home/kendall/tools/

cd /home/kendall/tools/

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

ls inotify-tools-3.14.tar.gz

mkdir -p /home/kendall/tools/

cd /home/kendall/tools/

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

ls inotify-tools-3.14.tar.gz

编译安装github

cd /home/kendall/tools/

tar zxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14/

./configure --prefix=/usr/local/inotify-tools-3.14

make && make install

echo $?

cd ../

ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools

cd /home/kendall/tools/

tar zxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14/

./configure --prefix=/usr/local/inotify-tools-3.14

make && make install

echo $?

cd ../

ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools

命令位置web

/usr/bin/inotifywait

inotifywait 能够直接使用

/usr/bin/inotifywait

inotifywait 能够直接使用

inotify安装在rsync客户端,监控到数据变化后经过rsync推给rsync服务端.sql

与rsync配合经过shell脚本实现同步mongodb

#!/bin/bash

inotify=/usr/bin/inotifywait

Path=/data

IP=172.16.1.41

$inotify -mrq --format '%w%f' -e create,close_write,delete $Path \

|while read file

do

if [ -f $file ];then

rsync -az $file --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

else

cd $Path

rsync -az ./ --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

fi

done

#!/bin/bash

inotify=/usr/bin/inotifywait

Path=/data

IP=172.16.1.41

$inotify -mrq --format '%w%f' -e create,close_write,delete $Path \

|while read file

do

if [ -f $file ];then

rsync -az $file --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

else

cd $Path

rsync -az ./ --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

fi

done

简易版shell

#!/bin/bash

inotify=/usr/bin/inotifywait

$inotify -mrq --format '%w%f' -e create,close_write,delete /data \

|while read file

do

cd /data &&\

rsync -az ./ --delete rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password & #能够增长效率

done

#!/bin/bash

inotify=/usr/bin/inotifywait

$inotify -mrq --format '%w%f' -e create,close_write,delete /data \

|while read file

do

cd /data &&\

rsync -az ./ --delete rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password & #能够增长效率

done

后台运行,开机启动

/bin/sh 脚本 &vim

将inotify加入自动开机启动服务中bash

vim /etc/init.d/syncd

1

vim /etc/init.d/syncd

#!bin/bash

#chkconfig: 2345 38 46

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

#

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

. /etc/init.d/functions

if [ $# -ne 1 ];then

usage: $0 {start|stop}

exit 1

fi

case "$1" in

start)

/bin/bash /server/scripts/inotify.sh &

echo $$ >/var/run/inotify.pid

if [ `ps -ef|grep inotify|wc -l` -gt 2 ];then

action "inotify service is started" /bin/true

else

action "inotify service is started" /bin/false

fi

;;

stop)

kill -9 cat /var/ run/inotify.pid >/dev/null 2>&1

pkill inotifywait

sleep 2

if [ `ps -ef|grep inotify|grep -v grep|wc -l` -eq 0 ];then

action "inotify service is stopped" /bin/true

else

action "inotify service is stopped" /bin/false

fi

;;

*)

usage: $0 {start|stop}

exit 1

esac

#!bin/bash

#chkconfig: 2345 38 46

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

#

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

. /etc/init.d/functions

if [ $# -ne 1 ];then

usage: $0 {start|stop}

exit 1

fi

case "$1" in

start)

/bin/bash /server/scripts/inotify.sh &

echo $$ >/var/run/inotify.pid

if [ `ps -ef|grep inotify|wc -l` -gt 2 ];then

action "inotify service is started" /bin/true

else

action "inotify service is started" /bin/false

fi

;;

stop)

kill -9 cat /var/ run/inotify.pid >/dev/null 2>&1

pkill inotifywait

sleep 2

if [ `ps -ef|grep inotify|grep -v grep|wc -l` -eq 0 ];then

action "inotify service is stopped" /bin/true

else

action "inotify service is stopped" /bin/false

fi

;;

*)

usage: $0 {start|stop}

exit 1

esac

chmod +x /etc/init.d/syncd

chkconfig --add syncd

chkconfig syncd on

1

2

3

chmod +x /etc/init.d/syncd

chkconfig --add syncd

chkconfig syncd on

inotify参数优化

下面两条命令须要加入开机启动/etc/rc.local中

echo "50000000" > /proc/sys/fs/inotify/max_user_watches

echo "50000000" > /proc/sys/fs/inotify/max_queued_events

max_queued_events #队列容纳事件数量

max_user_instances #每一个用户能够运行wait watch的数量

max_user_watches #最大监控文件数量

1

2

3

4

5

echo "50000000" > /proc/sys/fs/inotify/max_user_watches

echo "50000000" > /proc/sys/fs/inotify/max_queued_events

max_queued_events #队列容纳事件数量

max_user_instances #每一个用户能够运行wait watch的数量

max_user_watches #最大监控文件数量

rsync+intity压力测试效果

每秒200文件如下并发,基本没有差别.

rsync+inotify优缺点

优势:

监控文件系统事件变化,经过同步工具实现实时数据同步

缺点:

并发若是大于200个文件(10-100k),同步会有延迟。

咱们前面写的脚本,每次都是所有推送一次,但确实是增量的,也能够只同步变化的文件,不变化的不理。

监控到事件后,调用rsync同步是单进程的(加&并发),sersync多进程同步。

高并发数据实时同步方案

inotify(sersync)+rsync 文件级别

drbd 文件系统级别,基于block块同步 缺点:备份节点数据不可用

第三方软件同步功能:mysql同步,oracle mongodb

程序双写,直接写两台服务器

业务逻辑解决(【写主nfs,读备backup】读写分离,备读不到,读主 )防止延迟,弃用NFS方案,用web作nfs的备节点。效率提升不少

NFS集群(145方案整合)(双写主存储,备存储用inotify(sersync)+rsync,备没有找主解决延迟问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值