cwRsync是基于cygwin平台的rsync软件包,支持windowswindowswindowsLinuxLinuxwindows高效文件同步。由于CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包。Cwrsync还集成了OpenSSH for windows,可以实现Linux Rsync一模一样的操作。使用 cwRsync 来同步文件后,只需要对一台主服务器进行文件修改,其他镜像服务器可以自动同步,包括文件的更新、删除、重命名等。

正好符合我现在的需求

cwRsync分为付费版和免费版两种,我们只需要使用免费版即可,在官方网站上面下载cwRsync的客户端版本和服务器版本。

请在附件中下载

客户端版本:cwRsync 4.0.5 Installer

服务器版本:cwRsyncServer 4.0.5 Installer

这里我只需要让win做服务端,客户端rsync linux默认就有

查看服务器是否安装rsync

# rpm -aqrsync

rsync-3.0.9-15.el7.x86_64

如果没有可以yum装下

# yum installrsync -y

 

1.安装:

对于cwRsync的安装没有什么好说的,我选择的全部都是默认安装,对于服务器版本的安装,这里再多加一句,在安装过程中会提示要求我们输入Serviceaccount以及密码,如果我们不指定的话会使用SvcCWRSYNC这个账户,密码是随机生成的,所以要记住这个密码。但是在我后面的配置中,并没有用到这个Serviceaccount

 

密码保持默认,占时我还没发现这个密码所用之地

wKioL1cxlv2yvfvbAABt2VyKcng072.png

2.配置:

cwRsync的架构很简单,有一个Server和多个Client组成。安装server版的cwRsync以后,在服务器上面启动cwRsync服务,然后在客户端上面执行文件同步命令即可实现文件同步功能。如果我们将文件同步命令添加到windows计划任务当中,就可实现定义同步的功能。

2.1服务器端配置

  在cwRsync的安装目录下,可以找到一个rsyncd.conf的配置文件,下面我根据自己实际的业务需求来讲名配置文件的修改方法

下面我将自己服务器端配置文件贴出来,在配置文件的下端,我们看到[user]标签,这就是我们需要同步的user目录,这里需要注意的就是对于文件目录名称的变更。在windows系统下,目录地址为c:\work的,在我们的配置文件path中,需要修改为/cygwin/c/work。同样的,我们的当前想要同步的目录是D:\xxx\user,那么我就写成path =/cygdrive/d/xxx/user。其他的配置就按照给出的模板来配置即可。

 

配置文件

wKioL1cxlsWBSUUQAABBh5WUlnE415.png

配置文件内容:

use chroot = false
strict modes = false
log file = rsyncd.log
port = 873
uid=0
gid=0
hosts allow = 10.172.191.172
 
[user]
path = /cygdrive/d/rqt/user
read only = false
transfer logging = yes
list = no
auth users = rsync_backup
secrets file = etc/rsync.password
 
[static_3]
path = /cygdrive/d/rqt/static_3
read only = false
transfer logging = yes
list = no
auth users = rsync_backup
secrets file = etc/rsync.password
 
[contract]
path = /cygdrive/d/rqt/contract
read only = false
transfer logging = yes
list = no
auth users = rsync_backup
secrets file = etc/rsync.password

 

2.2创建密码文件:

wKiom1cxlkOjpzytAAA_pmjan-E407.png

 

2.3启动服务

wKiom1cxllDzWCZKAAEGfIuOiPw850.png

 

2.4查看服务是否启动

wKiom1cxll-wgqYOAAASEUwHKVQ219.png

 


3.LINUX端配置


3.1Linux端创建密码文件,并修改权限为600

wKiom1cxlmviWkZ1AAAXXzCCApI796.png

 

3.2命令测试

客户端推往服务器:

rsync -avzp /etc/hosts rsync_backup@10.173.49.15::test

wKiom1cxlneD2vbhAAAkgPFdzME642.png

 

客户端向服务端拉去文件:

rsync -avzp rsync_backup@10.173.49.15::test/root/test

wKiom1cxloayoHtJAABAUEakYBY160.png

 

3.3 同步数据老提示错误 uid4294967295 (-1) is impossible to set on  查资料说是软件bug··· 但是数据同步是不受到影响的。

wKiom1cxlpWAMAL1AABWMy-Yr6M209.png

解决方法:

server端添加一行参数:

fake super= yes

重启rsync服务即可。再同步就不会出现错误信息了。

 

wKioL1cxl4Oxwg3MAAA421fd5BU797.png

 

3.4 安装inotify

    

安装

前提 rsnyc 服务配置成功,可以正常在客户端正常推送拉取数据,然后才能配置inotify

 

Inotify在客户端配置 ,内核必须在2.6以上

 

必须有以下3个文件

[root@es-server ~]# ll/proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 Apr 17 14:45 max_queued_events   #监控最大值

-rw-r--r-- 1 root root 0 Apr 17 14:45 max_user_instances

-rw-r--r-- 1 root root 0 Apr 17 14:45 max_user_watches

 

max_user_watches       #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances       #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events      #设置inotify实例事件(event)队列可容纳的事件数量


vim /etc/sysctl.conf 

#加入以下3行

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576


立即生效

sysctl -p

 

下载源码包

inotify-tools下载地址:

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

cd /usr/local/src

tar zxvf inotify-tools-3.14.tar.gz  #解压


cd inotify-tools-3.14 #进入解压目录

./configure--prefix=/usr/local/inotify-tools-3.14  #配置

make #编译

make install  #安装






3.5 同步脚本

 

脚本:

#!/bin/bash
host01=10.162.222.27 
src=/project/rqt/contract
dst=contract
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_home="/usr/local/inotify-3.14"
 
if [ ! -e"$src" ] \
|| [ ! -e"${rsync_passfile}" ]\
|| [ ! -e"${inotify_home}/bin/inotifywait" ]\
|| [ ! -e"/usr/bin/rsync" ];
then
      echo "Check File and Folder"
      exit 9
fi
 
${inotify_home}/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,create,attrib$src \
| while read file
do
      cd $src && rsync -aruz -R ./--timeout=100 $user@$host01::$dst --password-file=${rsync_passfile}>/dev/null 2>&1
      sleep 10
      cd $src && rsync -aruz -R --timeout=100$user@$host01::$dst --password-file=${rsync_passfile} ./ >/dev/null2>&1   
done
exit 0

 

解释:

host01:要同步机器的Ip

src:要同步的目录

dst:目标主机模块名

user:同步用户

rsync_passfile:密码文件,需要和目标主机密码文件一个,注意这个是在本机,只存密码

inotify_homeinotify目录

 

3.5 运行:sh sync.sh &

 

4 测试:


4.1 win端创建testA.txt

wKioL1cxl7ywb78kAAA1HThnoFo977.png

4.2 linux端创建testB.txt

wKiom1cxlunxWO4aAAAXS1esdn4006.png

ls看下win下的testA已经同步过来了

wKioL1cxl9XRSzKwAAAYLr7K1ec166.png


4.3 然后再回到win端,会发现文件testB.txt已经同步过来

wKiom1cxlyDjzn0gAABCk1Raxs4334.png

 

4.4 故障排除:http://53cto.blog.51cto.com/9899631/1771826