【惊雷】Linux下rsync+inotify的实时文件自动同步

来源:互联网 发布:宠物店软件 编辑:程序博客网 时间:2024/05/16 08:25

Linux下rsync+inotify的实时文件自动同步

注:本博文接着上一章的rync博文的环境下进程配置的

背景随着时代的发展,手工的同步文件的功能已经不适合为高效的现代化企业的服务了。

rsync的局限性:

1、对于大的文件(百万级、千万级的)同步耗时。
2、不能实时的检测,rsync是根据Linux守护进程的方式进行触发同步的,这过程有很大的时间差。导致出现问题的时候可能无法完全的恢复数据。
3、同步笨重,同步一次就是全部同步的了,不会自动只同步更新的那点。

所以rsync+inotify的实现可以更加高效,自动化的实现文件的实时同步,能够大大的提高工作的效率,有效的减少手工操作的失误。

【】inotify的简介

  Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

是一个非常好的辅助性工具软件,后期本博客还会有更加多与inotify嵌合的功能发布!

参考:https://baike.baidu.com/item/inotify/8361039?fr=aladdin

一、需求环境

  Ceotos 6.5 内核2.6.32-431.el6.x86_64

虚拟机环境下

inotify服务器:192.168.0.244/24          (即主机B)

备用服务器:192.168.0.144/24            (即主机A) 

rsync-3.1.2.tar.gz

inotify-tools-3.14.tar.gz

二、搭建rsync+inotify环境

  注:在原来的rsync服务器上面即 inotify服务器:192.168.0.244/24 上面开始搭建

1、先安装好inotify包

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

tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14

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

make && make install

2、创建监控脚本inotify.sh

#!/bin/bash#parahost01=192.168.0.144  #rsync服务器地址src=/backup        #本地监控的目录dst=backup         #rsync服务器的模块名称user=nowview      #rsync服务器的虚拟用户rsync_passfile=/etc/rsyncd.password   #本地调用rsync服务的密码文件inotify_home=/usr/local/inotify-3.14    #inotify的安装目录#judgeif [ ! -e "$src" ] \|| [ ! -e "${rsync_passfile}" ] \|| [ ! -e "${inotify_home}/bin/inotifywait" ] \|| [ ! -e "/usr/bin/rsync" ];thenecho "Check File and Folder"exit 9fi${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \| while read filedo#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1doneexit 0

  脚本创建完毕,丢给后台运行。(开机启动的话放到rc.local文档即可)

sh inotify.sh &

  查看年一下进程

[root@主机B-244 /]# ps -ef |grep inotifyroot       1793      1  0 17:53 ?        00:00:00 sh inotify.shroot       1806   1793  0 17:53 ?        00:00:00 /usr/local/inotify-3.14/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f -e close_write,delete,create,attrib /backuproot       1807   1793  0 17:53 ?        00:00:00 sh inotify.shroot       2032   1843  0 17:58 pts/0    00:00:00 grep --color inotify

  inotify的配置基本如上,更多的功能参数请参考上面的inotify文档网址。

三、测试

  现在,在inotify服务器上面可以看到

[root@主机B-244 backup]# pwd/backup[root@主机B-244 backup]# ls1    108  117  126  135  144  153  162  171  180  19   199  27  36  45  54  63  72  81  90  asound.conf                krb5.conf       pm-utils-hd-apm-restore.conf10   109  118  127  136  145  154  163  172  181  190  2    28  37  46  55  64  73  82  91  cgconfig.conf              ld.so.conf      request-key.conf100  11   119  128  137  146  155  164  173  182  191  20   29  38  47  56  65  74  83  92  cgrules.conf               libaudit.conf   resolv.conf101  110  12   129  138  147  156  165  174  183  192  200  3   39  48  57  66  75  84  93  cgsnapshot_blacklist.conf  libuser.conf    rsyslog.conf102  111  120  13   139  148  157  166  175  184  193  21   30  4   49  58  67  76  85  94  dracut.conf                logrotate.conf  sestatus.conf103  112  121  130  14   149  158  167  176  185  194  22   31  40  5   59  68  77  86  95  gai.conf                   mke2fs.conf     sudo.conf104  113  122  131  140  15   159  168  177  186  195  23   32  41  50  6   69  78  87  96  grub.conf                  mtools.conf     sudo-ldap.conf105  114  123  132  141  150  16   169  178  187  196  24   33  42  51  60  7   79  88  97  gssapi_mech.conf           nfsmount.conf   sysctl.conf106  115  124  133  142  151  160  17   179  188  197  25   34  43  52  61  70  8   89  98  host.conf                  nsswitch.conf   xinetd.conf107  116  125  134  143  152  161  170  18   189  198  26   35  44  53  62  71  80  9   99  idmapd.conf                ntp.conf        yum.conf

  我已经在根目录下创建了一个backup目录,立刻创建了如上内容

由于inotify脚本已经在后台运行了,正在实时的监控着这个目录的变化

下面到备用服务器(即原rsync服务器)上面去看看原来的rsync的模块bauckup的路径/home/backup下的情况

[root@主机A-144 backup]# pwd/home/backup[root@主机A-144 backup]# lltotal 0[root@主机A-144 backup]# 

  目前还有同步过来,需要时间

  等待......

  再看

[root@主机A-144 backup]# ls1    108  117  126  135  144  153  162  171  180  19   199  27  36  45  54  63  72  81  90  asound.conf                krb5.conf       pm-utils-hd-apm-restore.conf10   109  118  127  136  145  154  163  172  181  190  2    28  37  46  55  64  73  82  91  cgconfig.conf              ld.so.conf      request-key.conf100  11   119  128  137  146  155  164  173  182  191  20   29  38  47  56  65  74  83  92  cgrules.conf               libaudit.conf   resolv.conf101  110  12   129  138  147  156  165  174  183  192  200  3   39  48  57  66  75  84  93  cgsnapshot_blacklist.conf  libuser.conf    rsyslog.conf102  111  120  13   139  148  157  166  175  184  193  21   30  4   49  58  67  76  85  94  dracut.conf                logrotate.conf  sestatus.conf103  112  121  130  14   149  158  167  176  185  194  22   31  40  5   59  68  77  86  95  gai.conf                   mke2fs.conf     sudo.conf104  113  122  131  140  15   159  168  177  186  195  23   32  41  50  6   69  78  87  96  grub.conf                  mtools.conf     sudo-ldap.conf105  114  123  132  141  150  16   169  178  187  196  24   33  42  51  60  7   79  88  97  gssapi_mech.conf           nfsmount.conf   sysctl.conf106  115  124  133  142  151  160  17   179  188  197  25   34  43  52  61  70  8   89  98  host.conf                  nsswitch.conf   xinetd.conf107  116  125  134  143  152  161  170  18   189  198  26   35  44  53  62  71  80  9   99  idmapd.conf                ntp.conf        yum.conf[root@主机A-144 backup]# pwd/home/backup

  这些内容已经同步过来了。

四、总结

   关于这个inotify.sh它的这个监控,触发问题。

目前根据我的测试得出的结论是这样的,它的实时同步是建立在当这个被监控的目录/back  一旦生成有文件或者生成任何的东西的情况下,这个脚本就会立刻触发同步更新。当然会根据文件大小、网络以及其他的因素,它的同步会有所时间的差别。

总的来说是inotify服务器目录变化,那么rsync服务器的目录就跟着变化(同步),反过来就不可以了。不过,即便这样已经是满足了现代企业日常的需求了。

【如上述有错误或者不明确的地方,还望各位不吝赐教】

 

原创粉丝点击