inotify+rsync目录实时同步
两台linux服务器系统CentOS7
一台Apache IP:192.168.155.130(发布文件服务器,也可以叫rsync客户端)
一台nginx IP:192.168.155.131(同步镜像文件服务器,也可以叫rsync服务器端) Apache服务器同步文件夹路径
/usr/local/apache/htdocs nginx服务器同步文件夹路径
/usr/local/nginx/html nginx服务器
rsync
下载地址https://rsync.samba.org/
wget下载路径https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
这里用到的是
rsync-3.1.2.tar.gz 用 WinSCP上传到指定的目录下,这里是
/usr/local/src shell端
进入到安装包目录
cd /usr/local/src 解压缩rsync到当前文件夹,这里解压缩时也不能加 z 参数
tar -xvf rsync-3.1.2.tar.gz 进入解压缩目录
cd rsync-3.1.2 配置安装目录
./configure --prefix=/usr/local/rsync 编译
make 安装
make install 安装后rsyncd配置文件存放在/etc/rsyncd.conf
编辑删除原有内容改成如下内容,uid参数到timeout参数部分为全局参数,[rsyncserver]开始及以后部分为模块参数
uid = root
gid = root
port = 873
max connections = 0
motd file = /usr/local/rsync/rsyncd.motd
log file = /usr/local/rsync/rsyncd.log
pid file = /usr/local/rsync/rsyncd.pid
lock file = /usr/local/rsync/rsyncd.lock
address = 192.168.155.131
transfer logging = true
log format = %t %a %m %f %b
timeout = 900
hosts allow = 192.168.155.130 192.168.155.129
hosts deny = *
syslog facility = local3
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[rsyncserver]
path = /usr/local/nginx/html/
exclude = lost/ found/
comment = rsync from 192.168.155.130
ignore errors
read only = false
list = true
use chroot = false
auth users = rsyncuser
secrets file = /usr/local/rsync/rsyncd.secrets
esc+:wq保存
vim /etc/rsyncd.conf 新建rsync用户名,密码文件输入以下内容,用户名与密码用:分开,一行一个用户,这里只设一个用户
rsyncuser:123456
vim /usr/local/rsync/rsyncd.secrets 设置权限
因为rsyncd.secrets存储了rsync服务的用户名和密码,所以非常重要。要将rsyncd.secrets设置为root拥有, 权限为600
chmod 600 /usr/local/rsync/rsyncd.secrets 启动rsync服务
rsync全局参数的值也可在执行rsync时设值,例如下
--daemon : 启动一个守护进程执行rsync
--address : 及--port作用参考全局rsync配置文件的全局参数信息,这俩参数可加可不加
--config : 指定配置文件位置,不加的话默认就是/etc/rsyncd.conf
/usr/local/rsync/bin/rsync --daemon --address=192.168.155.131 --port=873 --config=/etc/rsyncd.conf 查看rsync端口是否有对应服务
lsof -i:873 开启防火墙873端口的外部访问
firewall-cmd --zone=public --add-port=873/tcp --permanent 重启防火墙
firewall-cmd --reload Apache服务器
rsync
这里用到的rsync和nginx服务器一样
rsync-3.1.2.tar.gz inotify-tools
下载地址http://inotify-tools.sourceforge.net/
wget下载路径https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
这里用到的是
inotify-tools-3.14.tar.gz 用 WinSCP上传到指定的目录下,这里是
/usr/local/src shell端
进入到安装包目录
cd /usr/local/src 解压缩rsync到当前文件夹,这里解压缩时也不能加 z 参数
tar -xvf rsync-3.1.2.tar.gz 进入解压缩目录
cd rsync-3.1.2 配置安装目录
./configure --prefix=/usr/local/rsync 编译
make 安装
make install 创建存放服务器端密码文件,只需要输入服务器端密码即可,不用输入用户名
这里填写上面服务器端密码文件里设定的密码,用户名在命令行里指定
123456
vim /usr/local/rsync/rsyncd.pass 设置权限,而且只能设成600
chmod 600 /usr/local/rsync/rsyncd.pass 向服务器端上传同步文件
/usr/local/apache/htdocs/ 本地客户端要同步的文件夹
rsyncuser 服务器端rsync服务中设定允许执行该模块的用户名
192.168.155.131 服务器端IP地址
::rsyncserver 表示服务器端需要同步的模块名称
命令行参数
-v : verbose
-z : 压缩
-r : recursive
-t : 表示保持原文件创建时间
-o : 表示保持原文件属主
-p : 表示保持原文件的参数
-g : 表示保持原文件的所属组
-a : 存档模式
-P : 表示代替-partial和-progress两者的选项功能
-e : ssh建立起加密的连接。
--partial : 阻止rsync在传输中断时删除已拷贝的部分(如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件。)
--progress : 是指显示出详细的进度情况
--delete : 客户端上删除,服务器端也删除,保持真正的一致。
--exclude : 不包含/ins目录
--size-only : 这个参数用在两个文件夹中的差别仅是源文件夹中有一些新文件,不存在重名且被修改过的文件,因为这种文件有可能会因为内容被修改可大小一样,而被略过。这个参数可以大大地提高同步的效率,因为它不需要检查同名文件的内容是否相同。
--password-file : 指定包含server端认证用户的密码文件,不加此选项连接服务器端时会提示手动输入密码。
/usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsyncd.pass /usr/local/apache/htdocs/ rsyncuser@192.168.155.131::rsyncserver 安装inotify前需要先安装gcc与gcc-c++
yum install -y gcc gcc-c++ cd /usr/local/src tar -zxvf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify 编译
make 安装
make install 编写执行inotify的脚本填写以下内容,使inotify实时监控指定目录并做相应操作
#!/bin/bash
#同步接收方ip
client=192.168.155.131
#本地要监视的文件夹路径
local_folder=/usr/local/apache/htdocs/
#同步接收方配置的rsync模块名
module=rsyncserver
#同步接收方鉴权时的用户
user=rsyncuser
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e create,move,delete,modify,attrib $local_folder | while read files
do
/usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsyncd.pass $local_folder $user@$client::$module
done
inotify部分参数
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 监听“创建 移动 删除 修改 属性” 事件
vim /usr/local/inotify/inotify.sh 设置脚本权限
chmod 755 /usr/local/inotify/inotify.sh 后台执行脚本开始监听并同步
/usr/local/inotify/inotify.sh& 将 sh /usr/local/inotify/inotify.sh & 这段代码写在 /etc/rc.d/rc.local 文件的最后一行,使开机后台执行 /usr/local/inotify/inotify.sh 脚本
nginx服务器端的rsync也用用此方法写入脚本再添加到开机启动
echo "/usr/local/inotify/inotify.sh &" >> /etc/rc.d/rc.local 附录
uid = root # 运行rsync守护进程的用户
gid = root # 运行rsync守护进程的组
port = 873 # 默认端口873
max connections = 0 # 最大连接数无限制,指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。
motd file = /usr/local/rsync/rsyncd.motd # 用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。
log file = /usr/local/rsync/rsyncd.log # 指定 rsync 守护进程的日志文件存放位置,而不将日志发送给 syslog。
pid file = /usr/local/rsync/rsyncd.pid # 守护进程将其 PID写入文件的存放位置
lock file = /usr/local/rsync/rsyncd.lock # 指定支持 max connections 参数的锁文件存放位置。
address = 192.168.155.131 # 在独立运行时,将此服务绑定到指定的 IP 地址运行(这里也就是本机IP地址)。由 xinetd 运行时将忽略此参数,使用命令行上的 --address 选项替代。
transfer logging = true # 使 rsync 服务器将传输操作记录到传输日志文件。
log format = %t %a %m %f %b # 通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:
timeout = 900 # 单位秒,该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。
hosts allow = 192.168.155.130 192.168.155.129 # 运行访问本rsync服务器的IP地址,或网段,或者用*表示允许全部,多IP用空格分隔
hosts deny = * # 不允许访问本rsync服务器的IP地址,赋值规则同hosts allow
syslog facility = local3 # 指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 用来指定那些在传输之前不进行压缩处理的文件。 [rsyncserver] # 这里是认证的模块名,在客户端(这里是Apache服务器)端需要指定
path = /usr/local/nginx/html/ # 需要做镜像的目录
exclude = lost/ found/ # 不包含的目录,多目录用空格分开,这里就是不同步/usr/local/nginx/html/目录下的lost/和found/两个文件夹
comment = rsync from 192.168.155.130 # 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
ignore errors # 忽略错误
read only = false # 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。
list = true # 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。默认值是true。
use chroot = false # 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限。
auth users = rsyncuser # 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块,如果没有这行则表明是匿名,此用户与系统无关,是secrets file参数指定文件里保存的用户名
secrets file = /usr/local/rsync/rsyncd.secrets # 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用
inotify+rsync目录实时同步的更多相关文章
- 【转】inotify+rsync实现实时同步
[转]inotify+rsync实现实时同步 1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服 ...
- inotify +rsync进行实时同步
1.安装rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpmyum -y install ino ...
- inotify+rsync实现实时同步部署
1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Cen ...
- inotify+rsync实现实时同步
第1章 数据实时同步介绍 1.1 什么是实时同步:如何实现实时同步 A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 B. 发现目录中数据产生变化,就利用rsync服务推送到 ...
- inotify+rsync实现实时同步并邮件通知
服务器之间文件实时同步,监控文件的变化,发送邮件通知,并实时同步文件. 由于人工同步多台服务器的文件比较吃力,可以借助这样一套软件,自动化的实现这样的工作. 并且可以事实监控变化发送邮件给系统管理人员 ...
- inotify+rsync文件实时同步
原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行 ...
- lsyncd替代inotify+rsync实现实时同步
因公司业务需要需要实时同步日志文件,刚一开始使用的是inotify+rsync来实现实时同步,但时间久而久之发现同步的速度越来越慢,往往延迟好几个小时.查了一下网上的inotify+rsync方案基本 ...
- inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)
1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tool ...
- inotify+rsync文件实时同步报错:usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0:
解决办法: ln -sv /usr/local/lib/libinotify* /usr/lib/ /usr/lib64/libinotifytools.so.
随机推荐
- 【HDU3721】枚举+最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3721 题意:给你一颗n个节点n-1条边的树,每条边都有一个权值,现在让你任意移动一条边然后把这条边连接 ...
- JS的Touch事件们,触屏时的js事件
丫的,终于找到了JS在平板电脑上的事件!!! iphone.ipod Touch.ipad触屏时的js事件 1.Touch事件简介 pc上的web页面鼠标会产生onmousedown.on ...
- MUI - DIV窗体切换
神坑记录: 1.js报错异常:没有找到"innerHeight"属性? 解决方案:暂时不知原因,通过对mui.view.js进行调试得知是跳转目标页没有 .mui-navbar-l ...
- coolpro2 剪切并淡出
1.先将音乐暂停或者停止. 2.选择需要淡出的一段音乐 3.选择效果--波形振幅--渐变 4.选择Fade-out,确定
- Linux学习笔记---用户管理---帐号管理
root管理 (1)新增用户:useradd -u 指定UID -g 指定GID -G 作为组员添加到某个组 -M 不创建主用户目录 -m 创建主用户目录 -c 用户信息说明列 -d 指定某个目录为主 ...
- matlab函数bwareaopen的详解
matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下 ...
- Python多行注释
由于Python的注释只有针对于单行的注释(用#),多行注释时很不方便(要想多行注释只能每行代码前面都加上#).在网上看到一个Python的多行注释方法,分享给大家,其实很简单的,就是使用一对三个双引 ...
- css3:flexbox
旧弹性盒子 过渡弹性盒子 新弹性盒子 功能类似,次加了几个属性 新弹性盒子 参考1w3-En 参考2w3-Cn 参考3IBM 参考4doyoe 参考5caibaojian /*6个盒子属性.窍门:fl ...
- GDC2016 Epic Games【Bullet Train】 新风格的VR-FPS的制作方法
追求“舒适”和“快感”的VR游戏设计方法 http://game.watch.impress.co.jp/docs/news/20160318_749016.html [Bullet Tr ...
- DataGridView key points
Simple Examples => http://csharp.net-informations.com/datagridview/csharp-datagridview-readonly-c ...