背景:随着时代的发展,手工的同步文件的功能已经不适合为高效的现代化企业的服务了。
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、创建监控脚本inotify.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的安装目录
#judgeif [ ! -e "$src"] \|| [ ! -e "${rsync_passfile}"] \|| [ ! -e "${inotify_home}/bin/inotifywait"] \|| [ ! -e "/usr/bin/rsync"];then
echo "Check File and Folder"exit9
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>&1cd $src&& rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
doneexit0
脚本创建完毕,丢给后台运行。(开机启动的话放到rc.local文档即可)
sh inotify.sh &
查看年一下进程
[root@主机B-244 /]# ps -ef |grepinotify
root1793 1 0 17:53 ? 00:00:00 sh inotify.shroot1806 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
root1807 1793 0 17:53 ? 00:00:00 sh inotify.shroot2032 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.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 92cgrules.conf libaudit.conf resolv.conf101 110 12 129 138 147 156 165 174 183 192 200 3 39 48 57 66 75 84 93cgsnapshot_blacklist.conf libuser.conf rsyslog.conf102 111 120 13 139 148 157 166 175 184 193 21 30 4 49 58 67 76 85 94dracut.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 97gssapi_mech.conf nfsmount.conf sysctl.conf106 115 124 133 142 151 160 17 179 188 197 25 34 43 52 61 70 8 89 98host.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-144backup]# ll
total0[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.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 92cgrules.conf libaudit.conf resolv.conf101 110 12 129 138 147 156 165 174 183 192 200 3 39 48 57 66 75 84 93cgsnapshot_blacklist.conf libuser.conf rsyslog.conf102 111 120 13 139 148 157 166 175 184 193 21 30 4 49 58 67 76 85 94dracut.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 97gssapi_mech.conf nfsmount.conf sysctl.conf106 115 124 133 142 151 160 17 179 188 197 25 34 43 52 61 70 8 89 98host.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服务器的目录就跟着变化(同步),反过来就不可以了。不过,即便这样已经是满足了现代企业日常的需求了。
Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里