我有两个ec2实例,webserver和production。我需要production复制小文件(2-5kb)到和从webserver,而网络服务器可以没有访问生产。我使用的是ubuntu 12.04。目前,我在ssh上使用rsync得到了4-5秒的延迟。有没有更快的方法来做这件事?我可以忍受1秒的延迟。
我正在考虑在vpc中启动实例,并进行联网过程,但我不确定这是否足够快-关于这方面的教程也很少。或者,我已经开始阅读nfs,但我仍然不确定它是否能做到这一点。
发布于 2013-07-05 14:00:44
初始rsync延迟可能有几个原因
在完成任何数据更新之前,
rsync会对两端进行调查,以确定不同之处。如果您有一些大型数据块或大量目录条目,这可能需要一段时间。这是一个特别的问题,如果您启用了DNS,它执行完整的内容校验和来检查differences.rsync通常与--checksum一起使用,这可能会由于DNS延迟和超时而出现延迟,因此您可能会进行检查,以确保两台主机的DNS记录都有正向(A)和反向(PTR)记录,并且DNS在两端都起作用,或者通过/etc/hosts等相互识别主机。假设您使用SSH作为rsync的传输机制(缺省设置),并且SSH密钥位于目标端的~/.ssh/authorized_keys文件中,请确保首先测试SSH连接性是否为lag。如果是这样的话,你也应该检查这个文件,看看它正在使用的记录是否包含有自己的滞后问题的包装器脚本-如果是其他人写的,而你是解决它的问题的人,这可能会令人惊讶。
另一个问题是,您是否应该考虑编写一些代码来使延迟变得无关紧要。即使只有一秒钟的时间进行实际的更新,也可能会影响到事情,而且rsynced目录很容易在动态内容中增长,因此需要更多的更新时间。在以前的公司,我们偶尔不得不维护不同的代码层次结构(比方说两个),并在不使用的代码上执行rsync,然后切换。当然,这可能不适用于您的情况(如果有脚本语言运行在仍然开放的源代码文件上,就会出现类似的问题,就像bash那样)。
在本地网络上的一个小目录上进行测试的计时(使用time ...)显示:
sent 160 bytes received 13 bytes 115.33 bytes/sec
total size is 3455 speedup is 19.97
real 0m0.499s
user 0m0.008s
sys 0m0.000sstrace可以让你看到时间的去向:
strace -tt -f -o /tmp/log rsync -avz ....在我的系统上,它主要看起来像是等待目标主机反馈的少量延迟,大致与我预期的一样。
https://stackoverflow.com/questions/17353077
复制相似问题