我有两个ec2实例,webserver
和production
。我需要production
将小文件(2-5kb)复制到webserver
和从{{1}}复制,而网络服务器则无法访问生产。我正在使用ubuntu 12.04。目前我正在使用sync上的rsync延迟4-5秒。有更快的方法吗?我可以延迟1秒钟。
我正在考虑在vpc中启动实例,并通过网络程序,但我不确定这是否足够快 - 这方面的教程也很少。或者,我已经开始阅读nfs了,但是我不确定它是否能解决问题。
答案 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 ....
在我看来,它看起来像是等待来自目标主机的反馈的少量延迟,大致与我预期的一样。