1.介绍:开源的、快速的、多功能的可以实现全量和增量备份的工具;还能实现文件的删除等;可以根据文件大小的变化和修改时间的变化来同步数据(快速)

2.描述:支持特殊文件的拷贝,例如设备文件,链接等;可以排除目录下指定文件的同步功能,相当于tar;可以做到保持原文件的属性和权限等不改变(-p);实现增量同步,传输效率很高;可以使用rcp等方式来传输文件;可以通过socket传输文件和数据(c/s);支持匿名认证的方式进行传输
3.企业应用:两台服务器之间的数据同步(nfs备份),时时同步,增量备份
4.rsync的工作模式:单个主机之间本地传输(类似于cp)
                                借助rcp,ssh等通道来传输数据(类似于scp)
                                以守护进程socket的方式传输数据(重要功能)
5.使用方法:
       rsync [OPTION...] SRC... [DEST]
       所有属性的拷贝rsync -avz
       删除文件或者目录(不同的目录或者文件)rsync -r --delete 目录1 目录2
6.rsync的推拉复制
       rsync -avz file(需要发送的文件) -e(指定通道) 'ssh -p 65535'(指定协议) haha@172.1.1.1:~           文件的推送
       rsync -avz -e 'ssh -p 65535' haha@172.1.1.3:~/hosts  /home/haha                                                        文件的拉取
7.客户端的常用参数
       rsync -v:详细方式输出
                 -z:压缩传输2w
                 -a:归档模式(rtopDI)
                 -e,--rsh=command:使用的信道协议
                 --exclude=PATTERN,--exclude-from
                 --bwlimit=10:传输限速
*8.socket方式传输
      daemon方式:
           拓扑:
rsync的server端的配置文件/etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog:http://oldboy.blog.51cto.com
##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
[oldboy]                                         #共享设置
path = /oldboy/
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end
 服务以daemon方式启动:rsync --daemon
netstat -lntup | grep 873     监听在873端口
然后创建对应的目录及用户,将属主和属组修改
mkdir /oldboy              ----                 useradd -s /ssbin/nologin -M rsync      ------chown -R rsync.rsync /oldboy
接下来创建虚拟用户以及密码
echo "rsync_backup:oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
客户端的操作:
echo "oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
数据的流向是服务端走向客户端
在客户端执行:(下面的oldboy是服务端[oldboy]模块名,不是目录)
rsync -avz rsync_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password         拉取操作
rsync -avz rsync :/rsyn_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password
rsync -avz /data/(data下的内容) rsync_backup@172.1.1.4::oldboy  --password-file=/etc/rsync.password      推操作
rsync -avz /data/  rsync://rsync_backup@172.1.1.4/oldboy --password-file=/etc/rsync.password
 
 
Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
****rsync拍错过程:防火墙,seliux,参考日志/var/log/syncd.log,文件命名和权限
 
 
深度讲解rsync(873端口)
正常情况下需要将服务端rsync写到rc.local下(echo "/usr/bin/rsync --daemon" >> /etc/rc.local)保证开机自启动
客户端负责推送本地的文件到rsync服务端的对应模块下
rsync拓展:
--exclude
--exclude-from
排除的方法:可以在客户端排除,也可以在服务端设置参数进行排除
rsync -avz --exclude=log/ /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password     排除目录或者单个文件可以这样纸
rsync -avz --exclude={1.txt,2.txt,5.txt,log/} /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password     排除多个文件和目录的用法
rsync -avz --exclude-from=hehe.log /data/ rsync_backup@172.1.1.4::oldboy--password-file=/etc/rsync.password 
服务端的排除:(需要修改配置文件,会带来麻烦)
 
********无差异同步实践(主备机之间的需求)
参数:--delete
推送的场景:其一是备份(主要) --delete风险(文件丢失)
拉取【客户端操作】的应用场景:代码发布,下载(远端有啥本地有啥)
rsync -avz --delete rsync_backup@172.1.1.4::oldboy /data/ --password-file=/etc/rsync.password         保证数据的时时同步
使用场景:负载均衡器之间和高可用服务器之间
 
防火墙配置:
iptables -A INPUT -s 172.1.1.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
 
 
多模块配置(共享多个目录)
需要在服务器端操作的事项:配置文件中写多个模块,参考配置文件如下:
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
ignore errors
read only = false
list = false
hosts allow = 172.1.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
 
[oldboy]
path = /oldboy/
 
[data]
path = /data/
 
 
然后再对data目录给以rsync属主,此时就可以实现在客户端的操作了
 
 
 
 
排错:密码文件权限问题,目录以及权限问题,防火墙问题,
前提是熟悉部署的流程;
原理要理解
学会看日志(命令行和日志输出)
模拟错误,重视日常的错误
 
 
 
 
rsync+inotify时时同步
 
1、时时同步原理
      计划任务结合rsync实现分钟级别的同步
      inotify是一种异步文件系统时间监控机制,触发同步
      首先在客户端安装inotify程序,在服务端启动rsync --daemon;当客户端检测到的目录及内容发生变化时然后客户端会将发生变化的目录及内容推送
2、inotify的实施
       准备条件:实现rsync daemon和客户端之间的推拉传输数据
       配置inotify的要求:在客户端安装和配置
 
      先查看客户端是否支持inotify
# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 5月  18 17:32 max_queued_events          最大队列事件(大一点比较好)
-rw-r--r-- 1 root root 0 5月  18 17:32 max_user_instances           
-rw-r--r-- 1 root root 0 5月  18 17:32 max_user_watches
./configure -prefix=/opt/inotify
make && make install
ln -s /opt/inotify /usr/local/inotify
3、详细介绍
/opt/inotify/bin/inotifywait   
--exclude <pattern>      排除文件或者目录时不区分大小写
    --excludei <pattern>   排除文件或者目录时不区分大小写                    
    -m|--monitor              始终保持事件监听状态
    -d|--daemon                                                                     
    -r|--recursive               递归查询目录
    --fromfile <file>    
    -o|--outfile <file>
    -s|--syslog     
    -q|--quiet                     打印很少的信息,打印监控事件    
    -qq              
    --format <fmt>            打印使用指定的输出类似格式的字符串  
    --timefmt <fmt>    strftime-compatible format string for use with
                      %T in --format string.
    -c|--csv          Print events in CSV format.
    -t|--timeout <seconds>
                      When listening for a single event, time out after
                      waiting for an event for <seconds> seconds.
                      If <seconds> is 0, inotifywait will never time out.
    -e|--event <event1> [ -e|--event <event2> ... ]              监控事件的变化
        Listen for specific event(s).  If omitted, all events are 
        listened for.
Exit status:
    0  -  An event you asked to watch for was received.
    1  -  An event you did not ask to watch for was received
          (usually delete_self or unmount), or some error occurred.
    2  -  The --timeout option was given and no events occurred
          in the specified interval of time.
 
Events:
    access         file or directory contents were read
    modify        file or directory contents were written
    attrib           file or directory attributes changed
    close_write    file or directory closed, after being opened in
                   writeable mode
    close_nowrite    file or directory closed, after being opened in
                   read-only mode
    close        file or directory closed, regardless of read/write mode
    open        file or directory opened
    moved_to    file or directory moved to watched directory
    moved_from    file or directory moved from watched directory
    move        file or directory moved to or from watched directory
    create        file or directory created within watched directory
    delete        file or directory deleted within watched directory
    delete_self    file or directory was deleted
    unmount        file system containing file or directory unmounted
4.实战:
在inotify端执行:
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e create,delete,open /backup      在backup目录下的创建操作进行监控
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e delete /backup 
简化的事件输出:
#!/bin/bash
/opt/inotify/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /backup
while read file
     do
        rsync -az "$file" --delete rsync_backup@serverip::backup --password-file=/etc/rsync.password
      done
执行上述的脚本,然后再往backup下创建和删除文件测试,但是不能实现删除同步操作。
 
 
优化版脚本如下:
 
#!/bin/bash
#parameter
host=172.1.1.4
src="/backup"
dst="oldboy"
user="rsync_backup"
pass="/etc/rsync.password"
cmd="/opt/inotify/bin/inotifywait"
 
#judge
if [ ! -e $src ] \
|| [ ! -e $pass ] \
|| [ ! -e $cmd ] \
|| [ ! -e "/usr/bin/rsync" ];
then
     echo "please check file and folder !"
     exit 9
fi
 
#exec
$cmd -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
        do
           # rsync -azP --delete --timeout=100 --password-file=$pass $src $user@$host::$dst &> /dev/null
           cd $src && rsync -az -R --delete ./ --timeout=100 $user@$host::$dst --password-file=$pass &> /dev/null
        done
exit 0
 
通过start|stop控制脚本事项inotify操作结合上述脚本实现开关操作
 
#!/bin/bash
. /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 $$ > /opt/inotify/i.pid
        if [ `ps -ef | grep inotify|wc -l` -gt 2 ];then
            action "inotify server is started" /bin/true
        else
            action "inotify server is error" /bin/false
        fi
        ;;
stop)
        kill -9 `cat /opt/inotify/i.pid` > /dev/null 2>&1
        pkill inotifywait
        sleep 1
        if [ `ps -ef | grep inotify |wc -l` -eq 0 ];then
             action "inotify server is stopped" /bin/true
        else
             action "inotify server is stopped error" /bin/false
        fi
        ;;
*)
        usage :$0 {start|stop}
        exit 1
esac
 
 
压力测试 及优化
查看inotify对应的内核参数
cd /proc/sys/fs/inotify/
 cat *
16384         表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
128             表示每一个real user ID可创建的inotify instatnces的数量上限
8192           表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)       
上述三个参数可以按照实际情况尽可能地调大一点
重启机器之后会失效,永久操作的方法
 
vim /etc/sysctl.conf

fs.inotify.max_queued_events= 99999999
fs.inotify.max_user_watches= 99999999
fs.inotify.max_user_instances= 65535

 
修改完成之后sysctl -p 刷新生效即可

注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
(小文件的最大并发数也就200左右,否则会有延迟)
 
echo {a..j} | tr " " "\n" > a.log     #竖着 写文件
split -l 2 a.log                             #两行一个分割文件
 
 
inotify的缺点
(1)、并发大于200有延迟
(2)、推送效率不高
 
改进版
#!/bin/bash
cmd="/opt/inotify/bin/inotifywait"
$cmd -mqr --format '%w%f' -e create,close_write,delete /backup|\
while read line
do
     [ ! -e "$line" ] && continue
     rsync -az --delete $line rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password
 
done
                                                                                              
               
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1.介绍:开源的、快速的、多功能的可以实现全量和增量备份的工具;还能实现文件的删除等;可以根据文件大小的变化和修改时间的变化来同步数据(快速)

2.描述:支持特殊文件的拷贝,例如设备文件,链接等;可以排除目录下指定文件的同步功能,相当于tar;可以做到保持原文件的属性和权限等不改变(-p);实现增量同步,传输效率很高;可以使用rcp等方式来传输文件;可以通过socket传输文件和数据(c/s);支持匿名认证的方式进行传输
3.企业应用:两台服务器之间的数据同步(nfs备份),时时同步,增量备份
4.rsync的工作模式:单个主机之间本地传输(类似于cp)
                                借助rcp,ssh等通道来传输数据(类似于scp)
                                以守护进程socket的方式传输数据(重要功能)
5.使用方法:
       rsync [OPTION...] SRC... [DEST]
       所有属性的拷贝rsync -avz
       删除文件或者目录(不同的目录或者文件)rsync -r --delete 目录1 目录2
6.rsync的推拉复制
       rsync -avz file(需要发送的文件) -e(指定通道) 'ssh -p 65535'(指定协议) haha@172.1.1.1:~           文件的推送
       rsync -avz -e 'ssh -p 65535' haha@172.1.1.3:~/hosts  /home/haha                                                        文件的拉取
7.客户端的常用参数
       rsync -v:详细方式输出
                 -z:压缩传输2w
                 -a:归档模式(rtopDI)
                 -e,--rsh=command:使用的信道协议
                 --exclude=PATTERN,--exclude-from
                 --bwlimit=10:传输限速
*8.socket方式传输
      daemon方式:
           拓扑:
rsync的server端的配置文件/etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog:http://oldboy.blog.51cto.com
##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
[oldboy]                                         #共享设置
path = /oldboy/
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end
 服务以daemon方式启动:rsync --daemon
netstat -lntup | grep 873     监听在873端口
然后创建对应的目录及用户,将属主和属组修改
mkdir /oldboy              ----                 useradd -s /ssbin/nologin -M rsync      ------chown -R rsync.rsync /oldboy
接下来创建虚拟用户以及密码
echo "rsync_backup:oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
客户端的操作:
echo "oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
数据的流向是服务端走向客户端
在客户端执行:(下面的oldboy是服务端[oldboy]模块名,不是目录)
rsync -avz rsync_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password         拉取操作
rsync -avz rsync :/rsyn_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password
rsync -avz /data/(data下的内容) rsync_backup@172.1.1.4::oldboy  --password-file=/etc/rsync.password      推操作
rsync -avz /data/  rsync://rsync_backup@172.1.1.4/oldboy --password-file=/etc/rsync.password
 
 
Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
****rsync拍错过程:防火墙,seliux,参考日志/var/log/syncd.log,文件命名和权限
 
 
深度讲解rsync(873端口)
正常情况下需要将服务端rsync写到rc.local下(echo "/usr/bin/rsync --daemon" >> /etc/rc.local)保证开机自启动
客户端负责推送本地的文件到rsync服务端的对应模块下
rsync拓展:
--exclude
--exclude-from
排除的方法:可以在客户端排除,也可以在服务端设置参数进行排除
rsync -avz --exclude=log/ /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password     排除目录或者单个文件可以这样纸
rsync -avz --exclude={1.txt,2.txt,5.txt,log/} /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password     排除多个文件和目录的用法
rsync -avz --exclude-from=hehe.log /data/ rsync_backup@172.1.1.4::oldboy--password-file=/etc/rsync.password 
服务端的排除:(需要修改配置文件,会带来麻烦)
 
********无差异同步实践(主备机之间的需求)
参数:--delete
推送的场景:其一是备份(主要) --delete风险(文件丢失)
拉取【客户端操作】的应用场景:代码发布,下载(远端有啥本地有啥)
rsync -avz --delete rsync_backup@172.1.1.4::oldboy /data/ --password-file=/etc/rsync.password         保证数据的时时同步
使用场景:负载均衡器之间和高可用服务器之间
 
防火墙配置:
iptables -A INPUT -s 172.1.1.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
 
 
多模块配置(共享多个目录)
需要在服务器端操作的事项:配置文件中写多个模块,参考配置文件如下:
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
ignore errors
read only = false
list = false
hosts allow = 172.1.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
 
[oldboy]
path = /oldboy/
 
[data]
path = /data/
 
 
然后再对data目录给以rsync属主,此时就可以实现在客户端的操作了
 
 
 
 
排错:密码文件权限问题,目录以及权限问题,防火墙问题,
前提是熟悉部署的流程;
原理要理解
学会看日志(命令行和日志输出)
模拟错误,重视日常的错误
 
 
 
 
rsync+inotify时时同步
 
1、时时同步原理
      计划任务结合rsync实现分钟级别的同步
      inotify是一种异步文件系统时间监控机制,触发同步
      首先在客户端安装inotify程序,在服务端启动rsync --daemon;当客户端检测到的目录及内容发生变化时然后客户端会将发生变化的目录及内容推送
2、inotify的实施
       准备条件:实现rsync daemon和客户端之间的推拉传输数据
       配置inotify的要求:在客户端安装和配置
 
      先查看客户端是否支持inotify
# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 5月  18 17:32 max_queued_events          最大队列事件(大一点比较好)
-rw-r--r-- 1 root root 0 5月  18 17:32 max_user_instances           
-rw-r--r-- 1 root root 0 5月  18 17:32 max_user_watches
./configure -prefix=/opt/inotify
make && make install
ln -s /opt/inotify /usr/local/inotify
3、详细介绍
/opt/inotify/bin/inotifywait   
--exclude <pattern>      排除文件或者目录时不区分大小写
    --excludei <pattern>   排除文件或者目录时不区分大小写                    
    -m|--monitor              始终保持事件监听状态
    -d|--daemon                                                                     
    -r|--recursive               递归查询目录
    --fromfile <file>    
    -o|--outfile <file>
    -s|--syslog     
    -q|--quiet                     打印很少的信息,打印监控事件    
    -qq              
    --format <fmt>            打印使用指定的输出类似格式的字符串  
    --timefmt <fmt>    strftime-compatible format string for use with
                      %T in --format string.
    -c|--csv          Print events in CSV format.
    -t|--timeout <seconds>
                      When listening for a single event, time out after
                      waiting for an event for <seconds> seconds.
                      If <seconds> is 0, inotifywait will never time out.
    -e|--event <event1> [ -e|--event <event2> ... ]              监控事件的变化
        Listen for specific event(s).  If omitted, all events are 
        listened for.
Exit status:
    0  -  An event you asked to watch for was received.
    1  -  An event you did not ask to watch for was received
          (usually delete_self or unmount), or some error occurred.
    2  -  The --timeout option was given and no events occurred
          in the specified interval of time.
 
Events:
    access         file or directory contents were read
    modify        file or directory contents were written
    attrib           file or directory attributes changed
    close_write    file or directory closed, after being opened in
                   writeable mode
    close_nowrite    file or directory closed, after being opened in
                   read-only mode
    close        file or directory closed, regardless of read/write mode
    open        file or directory opened
    moved_to    file or directory moved to watched directory
    moved_from    file or directory moved from watched directory
    move        file or directory moved to or from watched directory
    create        file or directory created within watched directory
    delete        file or directory deleted within watched directory
    delete_self    file or directory was deleted
    unmount        file system containing file or directory unmounted
4.实战:
在inotify端执行:
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e create,delete,open /backup      在backup目录下的创建操作进行监控
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e delete /backup 
简化的事件输出:
#!/bin/bash
/opt/inotify/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /backup
while read file
     do
        rsync -az "$file" --delete rsync_backup@serverip::backup --password-file=/etc/rsync.password
      done
执行上述的脚本,然后再往backup下创建和删除文件测试,但是不能实现删除同步操作。
 
 
优化版脚本如下:
 
#!/bin/bash
#parameter
host=172.1.1.4
src="/backup"
dst="oldboy"
user="rsync_backup"
pass="/etc/rsync.password"
cmd="/opt/inotify/bin/inotifywait"
 
#judge
if [ ! -e $src ] \
|| [ ! -e $pass ] \
|| [ ! -e $cmd ] \
|| [ ! -e "/usr/bin/rsync" ];
then
     echo "please check file and folder !"
     exit 9
fi
 
#exec
$cmd -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
        do
           # rsync -azP --delete --timeout=100 --password-file=$pass $src $user@$host::$dst &> /dev/null
           cd $src && rsync -az -R --delete ./ --timeout=100 $user@$host::$dst --password-file=$pass &> /dev/null
        done
exit 0
 
通过start|stop控制脚本事项inotify操作结合上述脚本实现开关操作
 
#!/bin/bash
. /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 $$ > /opt/inotify/i.pid
        if [ `ps -ef | grep inotify|wc -l` -gt 2 ];then
            action "inotify server is started" /bin/true
        else
            action "inotify server is error" /bin/false
        fi
        ;;
stop)
        kill -9 `cat /opt/inotify/i.pid` > /dev/null 2>&1
        pkill inotifywait
        sleep 1
        if [ `ps -ef | grep inotify |wc -l` -eq 0 ];then
             action "inotify server is stopped" /bin/true
        else
             action "inotify server is stopped error" /bin/false
        fi
        ;;
*)
        usage :$0 {start|stop}
        exit 1
esac
 
 
压力测试 及优化
查看inotify对应的内核参数
cd /proc/sys/fs/inotify/
 cat *
16384         表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
128             表示每一个real user ID可创建的inotify instatnces的数量上限
8192           表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)       
上述三个参数可以按照实际情况尽可能地调大一点
重启机器之后会失效,永久操作的方法
 
vim /etc/sysctl.conf

fs.inotify.max_queued_events= 99999999
fs.inotify.max_user_watches= 99999999
fs.inotify.max_user_instances= 65535

 
修改完成之后sysctl -p 刷新生效即可

注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
(小文件的最大并发数也就200左右,否则会有延迟)
 
echo {a..j} | tr " " "\n" > a.log     #竖着 写文件
split -l 2 a.log                             #两行一个分割文件
 
 
inotify的缺点
(1)、并发大于200有延迟
(2)、推送效率不高
 
改进版
#!/bin/bash
cmd="/opt/inotify/bin/inotifywait"
$cmd -mqr --format '%w%f' -e create,close_write,delete /backup|\
while read line
do
     [ ! -e "$line" ] && continue
     rsync -az --delete $line rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password
 
done
                                                                                              
               
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

rsync学习与实践的更多相关文章

  1. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  2. ansible 学习与实践

    title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...

  3. Google App Engine 学习和实践

    这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.ne ...

  4. PMBOK 学习与实践分享视频

    本系列为自己在学习PMBOK时进行的总结与分享,每一节主要包括两部分: 对PMBOK本身的一个结构笔记和讲解. 对自己项目管理工作的一个总结和思考. PMBOK 学习与实践分享视频内容清单 人力资源管 ...

  5. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  6. Weex学习与实践

    Weex学习与实践(一):Weex,你需要知道的事 本文主要介绍包括Weex基本介绍.Weex源码结构.初始化工程.we代码结构.Weex的生命周期.Weex的工作原理.页面间通信.boxmodel ...

  7. 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践

    免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...

  8. RabbitMQ学习系列四-EasyNetQ文档跟进式学习与实践

    EasyNetQ文档跟进式学习与实践 https://www.cnblogs.com/DjlNet/p/7603554.html 这里可能有人要问了,为什么不使用官方的nuget包呐:RabbitMQ ...

  9. 孤荷凌寒自学python第七十天学习并实践beautifulsoup对象用法3

    孤荷凌寒自学python第七十天学习并实践beautifulsoup对象用法3 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步了 ...

随机推荐

  1. javascript笔记之正则表达式

    1.在js正则表达式特殊的需要转义的字符有: ^ $ . * + ?  = ! : | \ / ( ) [ ] { } 但实际应用中,还要根据实际情况来判断,以上字符可能不需要转义,也可能不止以上字符 ...

  2. HTML 页面加载动画效果

    浏览器:Chrome, IE <!doctype html> <html> <head> <title>CSS transform: CSS only ...

  3. 转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据

    转自 http://blog.csdn.net/ve_love/article/details/19685399

  4. Intel项目Java小记

    cannot be cast to javax.servlet.Filter添加provided即可 install -X是什么意思? Unsupported major.minor version ...

  5. Cocos2d-x 3.0 beta 中加入附加项目,解决无法打开包括文件:“extensions/ExtensionMacros.h”: No such file or directory”

    Cocos2d-x 3.0 Alpha 1开始 对目录结构进行了整合.结果有些附加项目也被在项目中被精简出去. 比如说如果你需要使用CocoStdio导出的JSON.或使用Extensions扩展库, ...

  6. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

  7. Celery Flower监控,完美搞定

    XXXX啊,,从上午就看到QUEQUE有问题,但一直不晓得哪里出了问题, 后来,安装上FLOWER看一下,队列就出来了... 神器啊.. 安装不说,运行很EASY.. celery flower -A ...

  8. OA学习笔记-010-Struts部分源码分析、Intercepter、ModelDriver、OGNL、EL

    一.分析 二. 1.OGNL 在访问action前,要经过各种intercepter,其中ParameterFilterInterceptor会把各咱参数放到ValueStack里,从而使OGNL可以 ...

  9. 被忽视的eMMC——A1 SD Bench闪存测试

    一直以来,大家对手机的配置方面都比较关注CPU和GPU的架构.频率.核心数等,却经常忽略了手机闪存的速度.实际上手机的闪存素质对手机日常操作的响应.载入速度同样起到举足轻重的影响,今天给大家介绍的则是 ...

  10. Excel数据链接取消

    Excel数据链接取消 2013-9-14 学校里弄来学生的成绩单,想去掉原来高一的学号,但是一删除,后面的成绩数据就一同消失,如以下两图对比所示. 删除第一列前 删除第一列后 此问题不知道怎么描述, ...