2

我有两个 ec2 实例,webserver并且production. 我需要production将小文件(2-5kb)复制到和从中复制webserver,而网络服务器无法访问生产。我正在使用 ubuntu 12.04。目前,我在 ssh 上使用 rsync 会有 4-5 秒的延迟。有没有更快的方法来做到这一点?我可以忍受 1 秒的延迟。

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

4

1 回答 1

2

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

  • rsync在完成任何数据更新之前,对双方进行调查以确定有什么不同。如果您有一些大数据块或大量目录条目,这可能需要一段时间。如果您已--checksum启用,这尤其是一个问题,它会执行完整的内容校验和以检查差异。
  • rsync通常与 SSH 一起使用,这可能会由于 DNS 滞后和超时而出现延迟,因此您可以检查以确保两台主机的 DNS 记录都有正向 (A) 和反向 (PTR) 记录,并且 DNS 在两端都起作用, 或者主机是通过/etc/hosts或类似方式相互认识的。

确保首先测试 SSH 连接是否存在延迟,假设您使用 SSH 作为(默认)的传输机制,并且目标端rsync的文件中包含 SSH 密钥。~/.ssh/authorized_keys如果是这样,您还应该检查该文件,以查看它使用的记录是否涉及具有自身滞后问题的包装脚本 - 如果其他人编写它并且您是对其进行故障排除的人,这可能会令人惊讶。

另一个问题是您是否应该考虑编写一些代码以使延迟无关紧要。即使是一秒钟的实际更新也会影响事情,并且rsynced 目录很容易在动态内容中增长,因此以后需要更多的更新时间。在以前的公司中,我们有时不得不维护不同的代码层次结构(比如说两个)并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  ....

在我看来,它在等待目标主机的反馈时似乎有少量延迟,大致如我所料。

于 2013-07-05T06:00:44.027 回答