在初始化lsyncd之前运行rsync扫描,以同步EC2上的实例

我的公司使用几台EC2服务器,根据我们在任何时候在我们的网站上收到的负载进行放大和缩小。 为了我们在这里的讨论,我们运行了四个实例:

  • master.ourdomain.com – 同步networking服务器“集线器”的文件
  • www1 / www2 / www3.ourdomain.com – 根据加载指令打开或closures的三个Web服务器

我使用lsyncd来保持所有的web服务器同步,而且大多数情况下它工作得很好。 我们使用双向同步scheme,以便每个Web服务器与主服务器进行同步,并对每个Web服务器进行主同步。 因此,networking服务器保持同步,即使它们不直接相互同步。

不过,我遇到了一个难以解决的问题。 在这种情况下会发生:

  • 对主服务器进行更改(也许在推送新代码之后),而某些冗余的Web服务器正在hibernate
  • 然后睡觉的networking服务器醒来吸收负载

在这种情况下,我想要发生以下情况:

  • 首先,新觉醒的networking服务器应该同步它的文件结构 – 一种方法 – 反对主站点,以使其Web应用程序代码最新。
  • 然后,只有这样,才能开始将其文件结构中的更改推回给主。

不幸的是,当睡眠服务器启动时,当lsyncd启动时,会在更新自己的代码库之前将更改推回到主服务器,从而用旧的覆盖新代码。

因此,在lsyncd启动之前,我希望能够将web服务器代码与主服务器进行同步,也许通过针对两台机器运行简单的单向rsync

我们正在运行lsyncd v.2,并试图通过使用lsyncd手册中logging的“bash”configuration选项来实现此目的 。 我的configuration文件如下所示:

settings = { logfile = "/home/user/log/lsyncd/log.txt", statusFile = "/home/user/log/lsyncd/status.txt", maxProcesses = 2, nodaemon = false, } bash = { onStartup = "rsync [email protected]:/home/user/www /home/user/www" } sync{ default.rsyncssh, source="/home/user/www/", host="[email protected]", targetdir="/home/user/www/", rsyncOpts="-ltus", excludeFrom="/home/user/conf/lsyncd/exclude" } 

(我明显地修改了这个文件来保护有罪的身份。)

简单地说,这只是不起作用。

我还可以怎样解决这个问题? 我正在看man rsync中的--delete-after选项,但我不认为这是我所期待的。

对于如何解决这个问题有什么build议吗?

感谢您借用您的时间和专业知识。

克里斯

在web服务器的lsyncd.lau中设置init = false似乎适用于我。

之后,您仍然需要调用从主服务器到新启动的networking服务器的单向同步。