阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

216次阅读
没有评论

共计 5145 个字符,预计需要花费 13 分钟才能阅读完成。

注:本文接着上一章 <Linux 下配置 Rsync 实现文件同步 > 的环境下进程配置的  http://www.linuxidc.com/Linux/2017-12/149183.htm

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

rsync 的局限性:

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

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

inotify 的简介

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

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

一、需求环境

  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、创建监控脚本 i notify.sh

#!/bin/bash
#para
host01=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 的安装目录
#judge
if [! -e "$src" ] \
|| [! -e "${rsync_passfile}" ] \
|| [! -e "${inotify_home}/bin/inotifywait" ] \
|| [! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0

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

sh inotify.sh &

  查看年一下进程

[root@主机 B -244 /]# ps -ef |grep inotify
root       1793      1  0 17:53 ?        00:00:00 sh inotify.sh
root       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 /backup
root       1807   1793  0 17:53 ?        00:00:00 sh inotify.sh
root       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]# ls
1    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.conf
10   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.conf
100  11   119  128  137  146  155  164  173  182  191  20   29  38  47  56  65  74  83  92  cgrules.conf               libaudit.conf   resolv.conf
101  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.conf
102  111  120  13   139  148  157  166  175  184  193  21   30  4   49  58  67  76  85  94  dracut.conf                logrotate.conf  sestatus.conf
103  112  121  130  14   149  158  167  176  185  194  22   31  40  5   59  68  77  86  95  gai.conf                   mke2fs.conf     sudo.conf
104  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.conf
105  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.conf
106  115  124  133  142  151  160  17   179  188  197  25   34  43  52  61  70  8   89  98  host.conf                  nsswitch.conf   xinetd.conf
107  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]# ll
total 0
[root@主机 A -144 backup]#

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

  等待 ……

  再看

[root@主机 A -144 backup]# ls
1    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.conf
10   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.conf
100  11   119  128  137  146  155  164  173  182  191  20   29  38  47  56  65  74  83  92  cgrules.conf               libaudit.conf   resolv.conf
101  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.conf
102  111  120  13   139  148  157  166  175  184  193  21   30  4   49  58  67  76  85  94  dracut.conf                logrotate.conf  sestatus.conf
103  112  121  130  14   149  158  167  176  185  194  22   31  40  5   59  68  77  86  95  gai.conf                   mke2fs.conf     sudo.conf
104  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.conf
105  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.conf
106  115  124  133  142  151  160  17   179  188  197  25   34  43  52  61  70  8   89  98  host.conf                  nsswitch.conf   xinetd.conf
107  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 服务器的目录就跟着变化(同步),反过来就不可以了。不过,即便这样已经是满足了现代企业日常的需求了。

CentOS 6.5 rsync+inotify 实现数据实时同步备份 http://www.linuxidc.com/Linux/2016-11/137655.htm

rsync+inotify 实现数据的实时同步 http://www.linuxidc.com/Linux/2017-01/139778.htm

rsync+inotify 实现服务器之间文件实时同步详解  http://www.linuxidc.com/Linux/2016-11/137659.htm

Rsync 结合 Inotify 实时同步配置  http://www.linuxidc.com/Linux/2017-02/140877.htm

RSync 实现数据备份  http://www.linuxidc.com/Linux/2017-06/144913.htm

inotify+rsync 实现数据实时同步  http://www.linuxidc.com/Linux/2017-10/147901.htm

rsync+inotify 实现数据的实时备份  http://www.linuxidc.com/Linux/2016-11/137630.htm

rsync+inotify 实现数据自动同步  http://www.linuxidc.com/Linux/2017-03/141717.htm

使用 rsync 实现数据实时同步备份  http://www.linuxidc.com/Linux/2017-05/143462.htm

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149355.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5145字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中