<a name="vkTtS"></a>html
<a name="moE1k"></a>linux
存储服务器数据实时同步到备份服务器 <a name="THGDm"></a>git
实时同步是一种只要当前目录触发事件,就立刻同步到远程的目录。 <a name="zi5md"></a>github
保证数据的连续性<br />减小人力成本 <a name="Cgj9v"></a>web
inotify+rsync<br />sersync+rsync<br />lsyncd<br />Inotify是一个通知接口,用来监控文件系统的各类变化,若是文件存取,删除,移动。能够很是方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时做出响应。rsync+inotify能够实触发式实时同步增量备份。<br />sersync是国人基于rsync+inotify-tools开发的工具,不只保留了优势同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提升运行效率,节省时间和网络资源。<br />sersync优势<br />(1)支持经过配置文件管理<br />(2)真正的守护进程socket(不须要写脚本)<br />(3)能够对失败文件定时重传(定时任务功能)<br />(4)第三方的HTTP接口(例如更新cdn缓存)<br />(5)默认多线程rsync同步shell
<a name="kmz2V"></a>express
inotify:实时监控目录数数据变化软件,安装在存储服务器。 <a name="yykPa"></a>vim
yum install -y inotify-tools #安装inotify rpm -ql inotify-tools #查看软件包内容 内容: /usr/bin/inotifywait #监控目录数据变化的命令 /usr/bin/inotifywatch #统计监控事件信息
<a name="prLZA"></a>windows
/usr/bin/inotifywait <br />参数:缓存
-m | 让监控过程始终保持下去;没有这个参数,只监控一次 | |
---|---|---|
-r | 递归监控目录 | |
format | 定义输出信息格式<br />时间信息 建立什么文件 事件信息:建立文件 | |
timefmt | 具体定义时间的格式 | |
-q | 输出更少的信息,只输出事件信息 | |
-e | 只监控什么事件 |
事件:<br />inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data
access | 文件或目录内容被读取 | |
---|---|---|
modify | 文件或目录内容被写入 | |
attrib | 文件或目录属性被改变 | |
close_write | 文件或目录被关闭,在打开以后有写操做而后关闭文件 | |
close_nowrite | 文件或目录被关闭,在打开以后没有任何操做<br />编写文件--打开文件--编辑/没有编辑--关闭文件 | |
close | 文件或目录被关闭,写或读以后被关闭 | |
open | 文件或目录被打开 | |
moved_to | 文件或目录被移动到监控目录,其它目录数据移动到监控目录 | |
moved_from | 文件或目录从监控目录移除,监控目录数据移动到其它地方 | |
move | 文件或目录移动到监控目录或移除监控目录 | |
create | 文件或目录在监控目录中被建立出来 | |
delete | 文件或目录在监控目录中被删除 | |
delete_self | 文件或目录被删除 | |
unmount | 包含文件或目录的文件系统被卸载 | |
重要事件: close_write、move、create、delete |
<a name="iuksB"></a>
语法结构:inotifywait 参数信息 监控目录 inotifywait -mrq --timefmt "%F %T" --format "%T %w%f %e" /data #监控命令 2019-07-20 22:13:20 /data/oldboy_dir/oldboy04.txt CREATE #监控的反应信息 # timefmt里的"%F %T"对应2019-07-20 22:13:20 #format里的%T对应timefmt里的"%F %T" # %w对应监控的目录 /data/oldboy_dir # %f对应触发事件文件数据信息 create # %e对应显示触发的事件信息
<a name="MRKo9"></a>
第一步:进行数据监控
[root@nfs01 ~]#inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data /data/test.txt /data/test.txt
第二步:部署好rsync守护进程服务<br />服务端:<br />安装rsync软件<br />编辑配置文件<br />建立虚拟(rsync)用户<br />建立密码文件并修改权限600<br />建立备份目录,修改属主属组权限<br />启动服务程序服务/重启程序<br /> 客户端:<br />建立密码文件,并修改权限600,测试传输<br />第三步:编写脚本
[root@nfs01 scripts]#vi inotify_watch.sh [root@nfs01 scripts]#cat inotify_watch.sh #!/bin/bash inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data|\ while read line do rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password done
问题一:<br />执行脚本总有输出信息,而且脚本不能持续运行,如何实现脚本在后台一直运行:<br />方法一: 执行脚本后面加上 &
sh /server/scripts/inotify_watch.sh # &:让脚本在后台运行,但链接断开,脚本就不回运行 # 在编辑脚本时,将-avz中的v去掉,不会再有输出信息
方法二: 利用专用命令 nohup
nohup sh /server/scripts/inotify_watch.sh & #脚本一直持续运行,断开也会运行
若是想要脚本开机运行,能够写入/erc/rc.local<br />问题二:数据已经同步完毕,可是脚本还在一直运行 shell知识学习完,有带解决。 <a name="TDFrl"></a>
sersync软件实现实时同步:先安装好inotify+rsync <a name="3K8HN"></a>
第一步:下载sersync软件<br />http://github.com/wsgzao/sersync<br />第二步:上传软件到linux系统
yum install -y lrzsr # lrzsz:实现Windows,linux互传文件 rz -y # 将Windows数据传输到linux sz -y # 将linux数据传输到windows
第三步:安装部署sersync软件(二进制包)
unzip sersync_installdir_64bit.zip mv /server/tools/sersync_installdir_64bit/sersync/ /usr/local/ # /usr/local/ 第三方软件目录
第四步:修改配置文件
[root@nfs01 ~]# vim /usr/local/sersync/conf/confxml.xml 说明:排除指定信息不要进行实时同步 <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> 说明:指定监控的事件信息 <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> 重点说明:实现实时同步关键配置 <sersync> <localpath watch="/data"> <remote ip="127.16.1.41" name="backup"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-az"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> <userDefinedPort start="false" port="874"/><!-- port=874 -->
<br />第五步:启动实时同步服务,并检查测试<br />首先让程序文件有执行权限 x
[root@nfs01 bin]# chmod +x /usr/local/sersync/bin/sersync
让程序启动<br />(1)在程序的bin目录启动:
[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml
(2)建立软连接启动
[root@nfs01 bin]# ln -s /usr/local/sersync/bin/sersync /usr/local/sbin/sersync [root@nfs01 bin]# ll /usr/local/sbin/sersync [root@nfs01 bin]# lrwxrwxrwx 1 root root 30 Jul 21 00:28 /usr/local/sbin/sersync -> /usr/local/sersync/bin/sersync
(3)加入环境变量
[root@nfs01 bin]# export PATH=$PATH:/usr/local/sersync/bin/ # 临时设置 [root@nfs01 bin]# vi /etc/profile # 永久设置 export PATH=$PATH:/usr/local/sersync/bin/ # 添加在文件中 # source /etc/profile 或者 . /etc/profile 让修改的配置文件生效
而后sersync就可使用了 <a name="xskeA"></a>
-d | 启用守护进程模式 | |
---|---|---|
-r | 在监控前,将监控目录与远程主机用rsync命令推送一遍 | |
-o | 指定配置文件,默认使用confxml.xml文件 | |
-n | 指定开启守护线程的数量,默认为10个 | |
-m | 使用 -m refreshCDN 开启刷新CDN模块<br />使用 -m socket 开启socket模块<br />使用 -m http 开启http模块 | |
不加-m参数,则默认执行同步程序 |
启动程序:
sersync -dro /usr/local/sersync/conf/confxml.xml
<a name="sfCmU"></a>
当用户存储数据时,存储到nfs服务器中,inotify监控到有新数据产生的时候,会同步给web01中的/data01,当nfs服务器坏掉的时候,web01中data挂载目录点会被卸载,挂载上data01,这样用户读取数据的时候,就会读取到data01的数据,data01的数据同nfs服务器中的数据同样。
原文出处:https://www.cnblogs.com/basa/p/11220209.html