平台:Ubuntu 10.04 x86。
我们有一个HTTP服务器(nginx,但不相关),它服务于一些静态内容。 内容(很less)由内容pipe理者通过SFTP上传,但可能会改变/添加我的一些其他手段(如cat ,直接在服务器上)。
现在我们要添加第二个完全相同的HTTP服务器 – 在另一个大陆的另一个数据中心中的一个从镜像。 (并设置DNS循环。)
在主服务器和从镜像之间build立同步的最佳方式是什么,以便修改和重新同步之间的延迟是最小的(几秒钟应该是可忍受的)?
解决scheme必须处理大的变更和竞争条件。 也就是说,如果我改变1000个文件,它不应该产生1000个同步过程。 如果在同步处于活动状态时我改变了一些东西,那么我的新改变最终也必须交给服务器。等等。
拒绝解决scheme:
我会说我们需要基于inotify的东西。 有没有现成的解决scheme?
更新:我忘记提及的两个额外的(相当明显的)要求:
如果数据在从镜像上发生了某种变化(例如,超级用户意外删除了一个文件),那么同步解决scheme必须在下次同步时将数据恢复到主状态。
在空闲状态下,解决scheme不能占用stream量或系统资源(当然,除了睡眠守护进程的一些内存等)。
更新2:一个更多的要求:
那么pirsyncd呢? 我认为这对你来说是个好主意;)
你有没有考虑过Unison作为保持文件同步的手段? 使用它,你可以做你要求的单向同步。 这似乎是一个合理的适合这个应用程序。
您可以使用lsyncd请参阅: 是否有一个工作的Linux备份解决scheme使用inotify?
看起来像这样,你可能想写一个脚本来检查文件的时间戳,如果时间戳比上次运行脚本晚,假定需要推送文件,然后触发rsync或其他工具来同步文件。 同样,在另一方面,检查一个文件是否被更改也是一样的,如果是的话,触发一个拉。 面料可能实际上是一个很好的工具。 如果您熟悉Python,那么使用结构可能是一种可行的方法,并结合时间戳检查。