none
windows 域环境下数据实时同步? RRS feed

  • 问题

  • hi,all 

           起初尝试使用WINDOWS DFS 复制,现在各个成员数据同步没有问题,但是满足不线上需求(以前是linux实现的)需求:

             1、线下b服务器有数据增加会及时往线上a服务器更新,但是如果线下b服务器上有文件删除,不会触发到线上a服务器上

              2、确保线上a服务器的数据只会增加不会减少


    谢谢

    2013年6月5日 6:02

答案

  • Rsync是可拉可推的。

    根据你的环境和需求,实现方式应是:在你的文件变化源所在服务器上执行Rsync客户端,去推到,同步目的地(安装Rsync服务端来接收推)

    另,这个Rsync的话题有点脱离微软产品了,不太适合在这里继续探讨。


    Technical problem is never a problem.


    2013年6月9日 12:21
  • Finy 老师,

         小数据量用您给的循环语句测试 cpu和I/O都没有太太提升,担心以后线上300g甚至更大数据时服务器能否顶的住 ,关于您提到利用NTFS的Modify Notification机制,去回调rsync.exe ,如果能实现的话几乎和我线上linux环境下rsyn+lsync一致,恳请老师帮忙写个脚本

    非常感谢

    这个cwRsync的硬件资源消耗不会随数据量大小而有很大变化的。

    最恶劣状况应该会是表现在一次Sync的时间很长,但不会出现资源利用高,它应该根本高不起来的(单线程计算检验和,单线程差异传输)

    只有多对一的Sync才会引起那个单点那头的CPU和IO高起来,而一对一的Sync不会高起来的。

    另外,NTFS的Nitification机制的利用,你还是找专业代码员去帮你定制代码吧

    可以参考以下文章(里面有示例代码,你如果懂点开发的话,自己弄弄也许能完成)

    Obtaining Directory Change Notifications
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx

    Powershell FileSystemWatcher
    http://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b


    Technical problem is never a problem.

    2013年6月6日 5:53

全部回复

  • 建议你试试cwRsync,就是Windows版的Rsync,很好用,可以exclude delete

    当然,它不是实时同步,每运行一次就同步一次(差异的哦),你可以根据实际需要,脚本或计划任务方式调整其运行间隔。


    Technical problem is never a problem.



    • 已编辑 Finy 2013年6月5日 7:09
    2013年6月5日 7:08
  • 有做过测试,同步频率有问题,windows 的计划任务貌似只能精确的5分钟,线上linux环境下rsyn+lsync 几乎是实时的 ,Finy老师你提到的脚本是怎么回事,会比windows计划任务频率高点吗

    麻烦你指点 或者传个脚本 

    非常感谢您的解答

    2013年6月5日 8:00
  • 有做过测试,同步频率有问题,windows 的计划任务貌似只能精确的5分钟,线上linux环境下rsyn+lsync 几乎是实时的 ,Finy老师你提到的脚本是怎么回事,会比windows计划任务频率高点吗

    麻烦你指点 或者传个脚本 

    非常感谢您的解答

    想高频率么就反复执行Rsync命令咯,bat脚本做个Loop不就完事了

    :Loop

    rsync.exe xxxxxxxxxxxxxxxxxxxxxxxxxx

    goto Loop


    Technical problem is never a problem.

    2013年6月5日 8:11
  • 大数据量(300g)同步,服务器负载是否会涨的很高,总感觉没有linux那个好,linux有监控程序发现有更新就触发 rsync  ,如果这样不管有没有更新都刷新。另外您这个脚本是一直循环刷新吗?这样的话300g数据rsync程序第一次都还没扫描完,然后第二次就开始了,会不会出现死循环?

    谢谢

    2013年6月5日 9:33
  • 以上脚本不会出现重叠Sync,因为rsync.exe在一次执行完之前不会返回,就走不到goto语句,必须一次完,才会紧接着走下一次。

    性能问题,你只能自己试着衡量,看能不能能接受。理论上,你的数据变化频率不大的话,不会很吃CPU和网络IO

    最后,如果你想实现 "文件发生变化才触发Sync" 的话,你恐怕得写个小程序,利用NTFS的Modify Notification机制,去回调rsync.exe,这也许是比较完美的。


    Technical problem is never a problem.




    • 已编辑 Finy 2013年6月5日 10:16
    2013年6月5日 10:15
  • Finy 老师,

         小数据量用您给的循环语句测试 cpu和I/O都没有太太提升,担心以后线上300g甚至更大数据时服务器能否顶的住 ,关于您提到利用NTFS的Modify Notification机制,去回调rsync.exe ,如果能实现的话几乎和我线上linux环境下rsyn+lsync一致,恳请老师帮忙写个脚本

    非常感谢

    2013年6月6日 5:23
  • Finy 老师,

         小数据量用您给的循环语句测试 cpu和I/O都没有太太提升,担心以后线上300g甚至更大数据时服务器能否顶的住 ,关于您提到利用NTFS的Modify Notification机制,去回调rsync.exe ,如果能实现的话几乎和我线上linux环境下rsyn+lsync一致,恳请老师帮忙写个脚本

    非常感谢

    这个cwRsync的硬件资源消耗不会随数据量大小而有很大变化的。

    最恶劣状况应该会是表现在一次Sync的时间很长,但不会出现资源利用高,它应该根本高不起来的(单线程计算检验和,单线程差异传输)

    只有多对一的Sync才会引起那个单点那头的CPU和IO高起来,而一对一的Sync不会高起来的。

    另外,NTFS的Nitification机制的利用,你还是找专业代码员去帮你定制代码吧

    可以参考以下文章(里面有示例代码,你如果懂点开发的话,自己弄弄也许能完成)

    Obtaining Directory Change Notifications
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx

    Powershell FileSystemWatcher
    http://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b


    Technical problem is never a problem.

    2013年6月6日 5:53
  •       hi,Finy

            测试环境是一对一的,数据量大概15g 没有发现同步异常,我司线上环境是目前二对一以后甚至更多(主要冗余)数据大概300g ,和测试环境有所差别,对了 finy老您上面提供的两个链接能否有中文版的,英文看起来比较吃力,有时间好好研究下

    非常感谢您耐心的解答!!!

    2013年6月6日 6:20
  •       hi,Finy

            测试环境是一对一的,数据量大概15g 没有发现同步异常,我司线上环境是目前二对一以后甚至更多(主要冗余)数据大概300g ,和测试环境有所差别,对了 finy老您上面提供的两个链接能否有中文版的,英文看起来比较吃力,有时间好好研究下

    非常感谢您耐心的解答!!!

    你是Windows 2008吗?或者2003装有PowerShell吗?

    如果有Powershell,我觉得你都不用研究了,就用Powershell FileSystemWatcher那段代码吧,稍微改一下监控目录以及触发执行的命令就可以了,我刚实测了一下很好用很方便。

    这样还真C++代码都不必写了。。。


    Technical problem is never a problem.

    2013年6月6日 6:26
  • 纯windows server 2008 R2 环境,马上测试

    谢谢

    2013年6月6日 7:48
  • hi,finy

          昨天晚上测试了下没有成功,我不太确定触发执行命令的语句在哪里或如何执行调用?

    1、监控多个目录?这个脚本是在rsync的客户机上还是服务端运行?

    2、如果此脚本是在服务器端运行,发现监控目录包括子目录及文件有改动,如何去触发客户端批出程序(参考文档:http://bbs.ywlm.net/thread-915-1-1.html)

        @echo off
    "C:\Program Files (x86)\cwRsync\bin\rsync.exe" -vzrtopg --progress administrator@192.168.1.1::www /cygdrive/c/www --port=10556 --password-file=/cygdrive/c/databackup/rsyncpwd.txt < C:\databackup\passwd.txt

    恳请老师指点

    稍微改一下监控目录以及触发执行的命令就可以了

    谢谢

    2013年6月7日 9:03
  • 1. 如果要监控n个目录,那么需要开n个PowerShell窗口,分别在里面执行不同的脚本(里面的$folder分别为各个被监控目录)以登记监控,且Powershell窗口不能关闭掉。

    2. 如果想从被监控的机器触发rsync,那么你应该在Rsync另一头的机器上安装Rsync Server端,而被监控目录的机器这头跑Rsync客户端(也就是执行rsync.exe)

    3. 关于触发执行的命令,就加在原版ps1脚本的Write-Host和Out-File那两句话的位置(替换掉那两句话,或者加在其上下行),你可以先试试加个c:\windows\system32\notepad.exe,每当监控到目录变化时,会立即弹出个notepad窗口(我实测就是这样)

    ---------------------------------------------------------------------------------------------------

    例如下图:我对两个目录做了监控,对于新建文件,分别触发calc.exe和notepad.exe


    Technical problem is never a problem.


    • 已编辑 Finy 2013年6月7日 10:03
    2013年6月7日 9:46
  • Finy,您好!

       您第二点理解有点出入,(rsync 的服务端是直接面对用户的,有权限更新、删除数据(当然删除是exclude),即当用户去服务器端(被监控的192.168.1.1)更新数据时,要保证线上rsync的客户端(192.168.1.2)数据及时同步,此时需要在此客户端上执行如下脚本@echo off
    "C:\Program Files (x86)\cwRsync\bin\rsync.exe" -vzrtopg --progress administrator@192.168.1.1::www /cygdrive/c/www --port=10556 --password-file=/cygdrive/c/databackup/rsyncpwd.txt < C:\databackup\passwd.txt  )而不是在rsync服务端执行   

    所以现在实现:

    1、在rsync客户端(192.168.1.2)上通过脚本FileSystemWatche能否监控远程rsync的服务器(192.168.1.1)目录文件夹(及用户平时需要更新数据目录)而不是在服务端本地监控

    2、按您上面讲的第3条测试报错,我 powershell 语法不怎么懂,恳请Finy老师提供上面原始脚本

    非常感谢

     rsycn搭建参考文档:http://bbs.ywlm.net/thread-915-1-1.html

    2013年6月8日 9:16
  • Rsync是可拉可推的。

    根据你的环境和需求,实现方式应是:在你的文件变化源所在服务器上执行Rsync客户端,去推到,同步目的地(安装Rsync服务端来接收推)

    另,这个Rsync的话题有点脱离微软产品了,不太适合在这里继续探讨。


    Technical problem is never a problem.


    2013年6月9日 12:21
  • hi,Finy

           在线上用一段时间,发现FileSystemWatcher脚本有bug,在监控文件夹里的具体文件(.txt word excell 等)修改里面内容时不能触发 rsync,新建和删除是没问题的

    帮忙看下是否脚本有问题,谢谢

    • 已建议为答案 阳润桂 2013年6月24日 10:07
    2013年6月24日 8:50