1.参考文献:

使用cwRsync实现windows下文件定时同步(备份)

文件同步工具CwRsync的使用方法及常用命令详解

2.背景:

当前的SCADA架构中,有1台Server,5台FE,还有1台Client。其架构如下图所示:

虽然叫法不同,但是他们的安装文件和配置文件是完全一样的。并且大多数情况下,也建议这些服务器上面的配置文件保持一致,这样只需要维护一个版本的config即可,不需要个性化定义每台服务器上面的config文件。由此也带来了一个新的问题,每当我在一台机器上面修改了配置文件,我还需要在其他6台机器上面做相同的修改,重复劳动非常多。由此产生了部署一套文件同步系统的想法,只需要在一台机器上做修改,其他机器自动定时同步即可。

3.解决方案:

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

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

客户端版本:cwRsync 4.0.5 Installer

服务器版本:cwRsyncServer 4.0.5 Installer

4.安装:

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

5.配置:

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

5.1服务器端配置

  在cwRsync的安装目录下,可以找到一个rsyncd.conf的配置文件,下面我根据自己实际的业务需求来讲名配置文件的修改方法,在第二节背景中我就已经讲到了,我有1台Server,5台FE,1台Client。我们的SCADA系统安装在这七台机器的相同目录下,都是D:\xxx,然后配置文件目录是D:\xxx\config,我要实现的目标就是:只要我修改Server这台机器的config目录,那么其他六台机器(5台FE和1台Client)就会自动同步相应的配置信息。

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

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
port = 8173 #默认端口8173
uid = 0 #不指定uid,不加这一行将无法使用任何账户
gid = 0 #不指定gid
max connections = 10 #最大连接数10 # Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
# [config]
path = /cygdrive/d/xxx/config #表示文件目录
read only = false
transfer logging = yes
lock file = rsyncd.lock
#auth users = service-scada #认证用户名
#secrets file = rsync.password #认证用户的用户名和密码存储位置

  在配置完毕以后,我们接下来就需要启动cwRsync的服务,我们将此服务设定为自动启动,如下图所示。

  还有,在上面我们指定RsyncServer的端口是8173,我们可以通过netstat -an这个命令来检查8173端口是否被监听,如下图所示。

5.2客户端配置

在安装完cwRsync的客户端以后,我们看到默认的安装目录是C:\Program Files\cwRsync,我们记下这个安装目录,后面会用到这个安装目录。

在客户端上新建一个记事本,在记事本中输入以下信息:

 c:
cd C:\Program Files\cwRsync\bin
rsync -av rsync://10.138.16.54:8173/config /cygdrive/d/xxx/config

  然后再将此记事本重命名为config_rsync.bat,就形成了一个批处理文件。在批处理文件中,之所以需要添加第1、2行,是因为在安装cwRsync客户端的时候,并没有将cwRsync的程序目录添加到path这个环境变量当中,如果在环境变量path当中添加C:\Program Files\cwRsync\bin,则不需要在批处理中添加第1、2行。

  第三行"rsync -av rsync://10.138.16.54:8173/config /cygdrive/d/xxx/config"的含义是从服务器同步config文件,同步到本地的D:\xxx\config目录下面。同步会以server上面的版本为准,如果在fe上面存在同名文件会被替换。

5.3通过计划任务客户端定时同步文件

  前面通过批处理文件来实现文件同步还是手动操作,后面通过添加计划任务即可实现。我们添加一个叫做rsync_scada的计划任务,然后指定其运行脚本是config_rsync.bat,如下图所示:

在日程安排中设定执行时间,如下图所示,这样设置能够做到每个十分钟就能同步一次config目录。

6.日志查看:

对于文件同步的日志,只能在安装有服务器版cwRsync的机器上面查看。在5.1中提到了服务器端的配置文件,其中有一行是:log file = rsyncd.log。我们在安装目录下就能找到 rsyncd.log这个文件,打开文件我们可以看到所有的记录。下面我摘录部分日志信息

2013/10/10 15:40:38 [2316] connect from BJCGNSCF01 (10.138.16.55)
2013/10/10 15:40:39 [2316] rsync on config/ from bjcgnscf01 (10.138.16.55)
2013/10/10 15:40:39 [2316] building file list
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () config.xml 438246
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () config1.xml 438161
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () process-test.xml 20339
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_AUML.txt 8178
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BPCG.txt 4453
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BRBA_SE.txt 4373
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BRBA_VS.txt 4340
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_DEBT.txt 7114
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_LWZA.txt 4462
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMCH.txt 4822
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMDS.txt 7531
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMFR.txt 7104
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMHJ.txt 4956
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMSY_VS.txt 4184
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMXQ.txt 4340
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_PI.txt 50574
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_SCDA.txt 4960
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_SDSG.txt 7531
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TPSA.txt 4466
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TSLW.txt 4791
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TWSA.txt 4466
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_XKHA.txt 4791
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_XZDA.txt 4952
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_ZJCA.txt 4462
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_zjc.txt 43642
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/alarm_tab_define.sys 141
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/his_start_month.sys 8
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/pointvalue_10m.sys 255
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/system - 副本.sys 138
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/system.sys_bak 269
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/version.sys 5
2013/10/10 15:40:40 [2316] sent 580665 bytes received 5217 bytes total size 4120913
#cwRsync只同步增量文件,当server端没有新增或者删除文件时,客户端的目录页不会发生变化
2013/10/10 15:50:16 [2252] connect from BJCGNSCF01 (10.138.16.55)
2013/10/10 15:50:17 [2252] rsync on config/ from bjcgnscf01 (10.138.16.55)
2013/10/10 15:50:17 [2252] building file list
2013/10/10 15:50:17 [2252] sent 2420 bytes received 125 bytes total size 4120913

7.Windows下rsync服务无法启动的解决方法

  服务器在意外重启后,RsyncServer服务不能启动,提示“本地计算机上的reyncserver服务启动后又停止了”,方法是将安装目录下的rsyncd.pid文件删除或改名即可,再重新启动RsyncServer服务,OK,成功了,rsyncd.pid文件会自动重新生成。

8.rsync排除目录的使用方法

需求场景:当前希望将一台server上面的一个文件夹同步到5个client上面去,但是又不希望同步所有文件,由个别文件是不需要同步的,所以必须在server的配置文件中添加排除同步的文件,这就需要用到了exclude这个参数。这个可以在client上面使用,也可以直接在server上面的进行配置。下面的例子是在server的rsyncd.conf文件上面配置的。

案例:config文件目录下有test1、test2和test3这三个目录,这三个目录当中都有一个test.txt文件。下面通过不同的配置信息来实现不同的同步要求。

ENVISION——config——test1——test.txt

        ||———test2——test.txt

        ||———test3——test.txt

8.1通过exclude关键字实现test1目录的例外

[config]
path = /cygdrive/d/ENVISION/config
#exclude from = rsync.exclude
exclude = test1/
read only = false
transfer logging = yes
lock file = rsyncd.lock

8.2通过exclude from关键字实现test2和test3目录的例外

[config]
path = /cygdrive/d/ENVISION/config
exclude from = rsync.exclude
#exclude = test1/
read only = false
transfer logging = yes
lock file = rsyncd.lock

其中rsync.excluede文件跟rsyncd.conf在同一目录下,其中的文件内容是,其中“/”非常重要。

test2/
test3/

8.2排除目录下的指定文件

exclude和exclude from不仅仅指限制与目录,也可以使指定的文件名。

在test1目录下添加一个文件test2.txt,然后进行如下配置

[config]
path = /cygdrive/d/ENVISION/config
exclude from = rsync.exclude
exclude = test1/test.txt
read only = false
transfer logging = yes
lock file = rsyncd.lock

再次执行同步命令,会发现test1/test2.txt会被同步,而test1/test.txt不会被同步。

使用cwRsync实现windows下文件定时同步的更多相关文章

  1. 使用cwRsync实现windows下文件定时同步【转】

    1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...

  2. 解决Windows下文件在Linux下打开出现乱码的问题

    目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...

  3. 利用cwRsync客户端将Windows下文件同步到Linux

    这里不描述Linux服务端安装配置rsync服务的过程,有需要可以在网络上查找相关教程. 1.安装cwRsync客户端下载地址:http://itefix.no/cwrsync/下载文件cwRsync ...

  4. windows 下的 Rsync 同步

    整理一下 windows 下的 rsync 文件同步. Rsync下载地址: 链接:https://pan.baidu.com/s/1nL0Ee_u76ytWKUFMeiKDIw 提取码:52in 一 ...

  5. windows 下文件的高级操作

    本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没 ...

  6. windows下mysql定时备份

    场景:一套B/S小系统,租用了一个虚拟服务器windows 2003,数据库是mysql,做每天的数据库备份 1.关于windows下的定时任务执行     * 命令说明 - /sc 指定计划类型,取 ...

  7. Windows下文件的所有和权限

    跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...

  8. Windows下文件列举,搜索

    Windows下列举文件用的函数是 FindFirstFile 和 FindNextFile ,另外一个结构体是WIN32_FIND_DATA 以下是MSDN对于WIN32_FIND_DATA的定义 ...

  9. Pycharm+Python3+python工程打包成exe+在windows下自动定时运行

    python3打包成exe---pyinstaller方法:https://www.cnblogs.com/mufenglin/p/7479281.html 按照如上方式打包后,执行dist文件夹(新 ...

随机推荐

  1. 【译】使用OpenVAS 9进行漏洞扫描

    本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...

  2. python-super1

    一.问题的发现与提出 一般子类在继承父类后,若子类覆盖了父类,则只执行子类,不执行父类.如果没有,则执行父类代码. 发现使用super()后,子类,父类都会执行,比较疑惑,记录学习,super知识点 ...

  3. linux笔记_day08

    1.文件权限管理 1)chown:改变文件属主(只有管理员才能使用这个命令)(change owner) chown USERNAME file... -R :修改目录以及内部文件的属主 --refe ...

  4. 使用NSIS制作安装包

    nsis下载地址:http://www.pc6.com/softview/SoftView_14342.html nsis使用: 启动NSIS程序主界面,选择“可视化脚本编辑器(VNISEdit)”菜 ...

  5. Linux 串口、usb转串口驱动分析(2-2) 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4186852 Linux 串口.usb转 ...

  6. elasticsearch常见异常及解决办法

    报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 20602552 ...

  7. 【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境jdk:1.7+ 前言之前我写过关于comparator的理解,但是都 ...

  8. 大数据统计分析平台之一、Kafka单机搭建

    1.zookeeper搭建 Kafka集群依赖zookeeper,需要提前搭建好zookeeper 单机模式(7步)(集群模式进阶请移步:http://blog.51cto.com/nileader/ ...

  9. 【AtCoder】ARC100 题解

    C - Linear Approximation 找出\(A_i - i\)的中位数作为\(b\)即可 题解 #include <iostream> #include <cstrin ...

  10. PLSQL Developer 中文显示乱码的解决方法

    PLSQL Developer 中文显示乱码是因为 Oracle 数据库所用的编码和 PLSQL Developer 所用的编码不同所导致的. 解决方法: 1. 先查询 Oracle 所用的编码 se ...