Rsync工具
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。
inotify-tools使用方法介绍
inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件(例如打开、关闭、移动/重命名、删除、创建或者改变属性等)。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。
一、同步有两种方案
Rsync+Inotify-tools与Rsync+sersync两种架构
- Rsync+Inotify-tools(我们选择它)
- Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
- rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。
- 配置简单。
- Rsync+sersync
- sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
- rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
- 配置稍微复杂。
- 但在/root目录下会生成很多的tps*文件。
机器 | 描述 | 俗称 |
---|---|---|
192.168.2.158 | nginx部署机器(需要同步到这台机器) | 服务端机器 |
192.168.2.102 | 项目部署机器(生成文件的源机器) | 客户端机器 |
二、2.158部署机器安装rsync步骤
- yum安装rsync
- 安装完成后,会在/etc目录下生成一个rsyncd.conf文件,编辑这个文件,具体配置参数解释请看链接。
- 创建用户springboot,并设置密码12345678.
- 创建用户:useradd -m springboot
- 设置密码:passwd springboot(输入命令后会提示设置密码)
- 在/etc目录下创建文件rsyncd.password,并将用户springboot和密码放入。
创建文件:touch /etc/rsyncd.password
编辑文件:vim /etc/rsyncd.password
填充内容:springboot:12345678 - 赋予所有者拥有etc/rsyncd.password文件的读写权限,其他用户没有任何的权限,命令“chmod 600 文件名”。
修改权限前:
修改权限后: - 启动:
命令:rsync --daemon - 重启时,需要杀掉进程,并删除/var/run/rsyncd.pid文件再执行重启,否则重启失败异常。
- 创建同步目录
三、项目部署的机器安装rsync步骤:
- yum安装rsync(步骤同上)。
- 在/etc目录下创建文件rsyncd.password,这里只需将用户springboot的密码放入。
创建文件:touch /etc/rsyncd.password
编辑文件:vim /etc/rsyncd.password
填充内容:12345678 - 启动
命令:rsync --daemon
在2.102机器上,测试从2.102同步到2.158目录同步文件命令:
- rsync -avz /data/program/downFiles/ springboot@192.168.2.158::tongbu --password-file=/etc/rsyncd.password
在2.102服务器上,测试从2.158同步到2.102目录同步文件命令:
- rsync -avz springboot@192.168.2.158::tongbu /data/program/downFiles --password-file=/etc/rsyncd.password
四、安装sersync
在2.102服务器上,安装sersync
-
下载安装包并修改解压文件:
$ wget https:
//raw
.githubusercontent.com
/wsgzao/sersync/master/sersync2
.5.4_64bit_binary_stable_final.
tar
.gz
#下载sersync
$
tar
xf sersync2.5.4_64bit_binary_stable_final.
tar
.gz
$
mv
GNU-Linux-x86/
/usr/local/sersync
$
cd
/usr/local/sersync/
$
cp
confxml.xml confxml.bak
#修改前备份配置文件
-
编辑confg.mxl文件
<?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"> <host hostip="localhost" port="8008"></host> <debug start="true"/> <fileSystem xfs="false"/> <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <inotify>#监控删除事件同步 <delete start="false"/>#start=true为同步,start=false不同步,其他事件类似解释 <createFolder start="true"/> <createFile start="true"/> <closeWrite start="true"/> <moveFrom start="false"/> <moveTo start="false"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <localpath watch="/data/program/downFiles"># 定义本地要同步的目录 <remote ip="192.168.2.158" name="tongbu"/># 定义要同步的的目标机器IP和模块 <!--<remote ip="192.168.8.39" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-artuz"/> <auth start="true" users="springboot" passwordfile="/etc/rsyncd.password"/>#鉴权用户及用户对应的密码文件 <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="true" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--># 当同步失败后,日志记录到/tmp/rsync_fail_log.sh文件中,并且每60分钟对失败的log进行重新同步 <crontab start="false" schedule="60"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync> <plugin start="false" name="command"> <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--> <filter start="false"> <include expression="(.*)\.php"/> <include expression="(.*)\.sh"/> </filter> </plugin> <plugin name="socket"> <localpath watch="/opt/tongbu"> <deshost ip="192.168.138.20" port="8009"/> </localpath> </plugin> <plugin name="refreshCDN"> <localpath watch="/data0/htdocs/cms.xoyo.com/site/"> <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> </localpath> </plugin> </head>
-
启动命令
$
/usr/local/sersync/sersync2
-dro
/usr/local/sersync/confxml
.xml
- 但sersync有个不好的地方,在/root目录下总是会新建tps*文件,而且时间越长,新建越多,如下图:
五、sersync换装inotify-tools工具
- 下载:wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
- 解压并安装
-
在目录/data/program下编写脚本auto_inotify.sh
#!/bin/sh src=/data/program/downFiles/ ip=192.168.2.158 inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w %f' -e modify,create ${src} | while read file do for i in $ip do rsync -azurtopg $src springboot@$ip::tongbu --password-file=/etc/rsyncd.password done done
-
启动命令:nohup sh /usr/local/auto_inotify.sh &
- 停止进程:ps -ef|grep inotify,然后kill -9 进程号,如下图红框中的三个进程号。