积极答复者
windows 域环境下数据实时同步?

问题
答案
-
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).aspxPowershell FileSystemWatcher
http://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084bTechnical problem is never a problem.
- 已标记为答案 行者无疆2011 2013年6月6日 6:08
全部回复
-
-
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).aspxPowershell FileSystemWatcher
http://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084bTechnical problem is never a problem.
- 已标记为答案 行者无疆2011 2013年6月6日 6:08
-
hi,Finy
测试环境是一对一的,数据量大概15g 没有发现同步异常,我司线上环境是目前二对一以后甚至更多(主要冗余)数据大概300g ,和测试环境有所差别,对了 finy老您上面提供的两个链接能否有中文版的,英文看起来比较吃力,有时间好好研究下
非常感谢您耐心的解答!!!
你是Windows 2008吗?或者2003装有PowerShell吗?
如果有Powershell,我觉得你都不用研究了,就用Powershell FileSystemWatcher那段代码吧,稍微改一下监控目录以及触发执行的命令就可以了,我刚实测了一下很好用很方便。
这样还真C++代码都不必写了。。。
Technical problem is never a problem.
-
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
恳请老师指点
稍微改一下监控目录以及触发执行的命令就可以了
谢谢
-
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
-
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