博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS6.5实现rsync+inotify实时同步
阅读量:5925 次
发布时间:2019-06-19

本文共 3353 字,大约阅读时间需要 11 分钟。

参考博文:

参考1:  

参考2:  

  对 rsync命令解释的很详细

参考1比较详细,但是有点问题,参考2主服务器端比较详细  但是有小问题  把二者结合培正成功

 

注意:从主服务器拷贝到从服务器,千万别搞混了。

1、首先从主服务器A开始

需要确定你的系统是否支持inotify:

在安装inotify-tools前请先确认你的linux内核是否达到了2.6.13,并且在编译时开启了CONFIG_INOTIFY选项,也可以通过以下命令检测,如果出现以下输出,说明支持:

[root@localhost ~]# ls /proc/sys/fs/inotify/max_queued_events  max_user_instances  max_user_watches

下载并安装inotify-tools:

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar xvf inotify-tools-3.14.tar.gz  cd inotify-tools-3.14  ./configure  make;make install

接下来需要写两个SH脚本,inotify_init.sh和inotify_monitor.sh:

inotify_init.sh 用于第一次初始化,也就是运行一次完整的RSYNC同步.

vim /root/inotify_init.sh
内容如下:
#!/bin/shSRC=/主服务器A需要同步的目录/ #记得在最后面加/不然RYNC会自动增加一层目录  DES=backupIP=从服务器B的IPUSER=rsync#DST=/etc/rsyncd 远程rsync模块下的目录INWT=/usr/bin/inotifywait    #注意路径 我的路径为:/usr/local/bin/inotifywait
RSYNC=/usr/bin/rsync $RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES

保存退出.

设置可执行权限:

chmod +x /root/inotify_init.sh

接下是inotify_monitor.sh,用于订阅文件修改事件.注意,因为特别原因,我在这里做的是增量备份+实时同步,也就是说,当主服务器A上的图片被删除是,从服务器B是不会删除图片的.

vi /root/inotify_monitor.sh

内容如下:

#!/bin/bash  ###########################sync[0]='/主服务器需要同步的目录/,从服务器B的IP,backup,rsync' # localdir,host,rsync_module,auth_user  INWT=/usr/bin/inotifywait  #注意路径 我的路径为:/usr/local/bin/inotifywaitRSYNC=/usr/bin/rsyncPASS=/root/rsync.pwd###########################

for item in ${sync[@]}; do

dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
user=`echo $item | awk -F"," '{print $4}'`
$INWT -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move $dir | while read date time file event
do
#echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --exclude='*' --password-file=$PASS \
--include=$file $dir $user@$host::$module "
echo $cmd >> /var/log/rsyncd.log   #写入日志文件
$cmd
fi
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --password-file=$PASS --exclude=$file \
$dir $user@$host::$module "
echo $cmd >> /var/log/rsyncd.log
$cmd
fi
;;
esac
done &
done

加 执行权限:

chmod +x /root/inotify_monitor.sh

设置RSYNC自动登录验证密码,认证文件只用加入密码即可

vi 
/root/rsync
.
pwd
xxxxxx

保存,退出

设置只有ROOT才可以查看的权限.

chmod 
600 
/root/rsync
.
pwd
 

2、以下是备从务器B的配置:

yum install rsync -y    #安装rsync服务

配置RSNYD服务:

vi /etc/rsyncd.conf

内容如下,需要把
Apache修改成你运行网站的用户名,我的是因为原来使用apache,虽然现在用Nginx,也一直没改用户名:
uid = rootgid = rootuse chroot = nomax connections = 0   #没有连接限制pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.log  [backup]path = /从服务器B本地用于存放备份的目录ignore errorsread only = nolist = falsehosts allow = 主服务器A的IPauth users = rsyncsecrets file = /etc/rsync.pwd

设置密码文件:

vim 
/etc/rsync
.
pwd    
#添加以下内容
rsync
:123456
chmod 
600 
/etc/rsync
.
pwd    
#修改密码文件权限为600

注:当配置文件中参数strict modes为true时,rsync认证口令文件的权限一定是600,否则客户端将不能连接服务器。rsync认证口令文件中每一行指定一个 用户名:口令 对,格式为:username:passwd。

启动RSYNCD

rsync --daemon

添加开机自动启动服务:

添加开机自动启动服务:

 
vi 
/etc/rc
.
local

添加以下内容:

rsync --daemon

3、主服务器开机启动

vi 
/etc/rc
.
local
添加以下内容,实时开机自动同步:
/root/inotify_init.sh/root/inotify_monitor.sh

保存退出

运行

/root/inotify_init.sh/root/inotify_monitor.sh
 

转载于:https://www.cnblogs.com/wuling129/p/5007520.html

你可能感兴趣的文章
C 枚举 相同的值
查看>>
CRONTAB调用备份脚本时要注意环境变量的设置
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
查看>>
C++如何实现哈希数据结构——map Library
查看>>
分享8个超棒的基于HTML5和jQuery的开发教程
查看>>
粗化—lhMorpThick
查看>>
Hadoop Streaming框架使用(一)
查看>>
无根的根:无名师的 Unix 心传
查看>>
如何隐藏vs2005的起始页
查看>>
关于自动化测试
查看>>
让 VS 编译 MonoTouch 项目源文件不再出错
查看>>
asp.net里获取当前时间,并字符串格式化转换(转)
查看>>
jQuery-插件-背景滑动菜单(第二次自已偿试写插件)
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
Android 打包签名 从生成keystore到完成签名
查看>>
Objective-C 编程语言官网文档(十二)-线程
查看>>
Visio绘制系统图
查看>>
如何让oracle的select强制走索引
查看>>
【面试虐菜】—— JAVA面试题(1)
查看>>
Oracle事务
查看>>