加速两个实例的小文件(500kb)的rsyncing

时间:2013-06-27 20:59:38

标签: networking ssh amazon-web-services nfs vpc

我有两个ec2实例,webserverproduction。我需要production将小文件(2-5kb)复制到webserver和从{{1}}复制,而网络服务器则无法访问生产。我正在使用ubuntu 12.04。目前我正在使用sync上的rsync延迟4-5秒。有更快的方法吗?我可以延迟1秒钟。

我正在考虑在vpc中启动实例,并通过网络程序,但我不确定这是否足够快 - 这方面的教程也很少。或者,我已经开始阅读nfs了,但是我不确定它是否能解决问题。

1 个答案:

答案 0 :(得分:2)

您的初始rsync延迟有几种可能的原因

  • rsync会对双方进行调查,以确定在完成任何数据更新之前的不同之处。如果您有一些大型数据块或许多目录条目,这可能需要一段时间。如果您启用了--checksum,则会出现问题,这会执行完整的内容校验和以检查差异。
  • rsync通常与SSH一起使用,由于DNS滞后和超时而导致延迟,因此您可能会检查以确保两个主机的DNS记录都有前向(A)和反向(PTR)记录,并且DNS是两端的功能,或者主机通过/etc/hosts等彼此了解。

请确保首先测试SSH连接的延迟,假设您使用SSH作为rsync(默认值)的传输机制,并在目标端的~/.ssh/authorized_keys文件中使用SSH密钥。如果是这样,你应该检查那个文件,看看它使用的记录是否涉及一个带有自己的滞后问题的包装脚本 - 如果有人写了它并且你就是那个排除故障的人,这可能是一个惊喜。

另一个问题是你是否应该考虑编写一些代码来使延迟无关紧要。即使是坚实的第二次进行实际更新也会让事情变得妥协,rsync ed目录很容易在动态内容中增长,因此以后需要更多的更新时间。在以前的公司中,我们偶尔必须维护不同的代码层次结构(例如,两个),并在非使用的代码中执行rsync,然后切换。当然,这可能不适用于您的情况(类似问题可能会出现在git部署更新中,如果存在使用仍然开源文件的脚本语言,例如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.000s

strace可以让你看到时间的去处:

strace -tt -f -o /tmp/log  rsync -avz  ....

在我看来,它看起来像是等待来自目标主机的反馈的少量延迟,大致与我预期的一样。