跨服务器文件镜像,延迟最小

跨服务器文件镜像,延迟最小

平台:Ubuntu 10.04 x86。

我们有一个 HTTP 服务器(nginx,但这并不相关),它提供一些静态内容。内容管理员(很少)通过 SFTP 上传内容,但可以通过其他方式(例如cat,直接在服务器上制作)更改/添加内容。

现在我们要添加第二个相同的 HTTP 服务器 — 位于另一个大陆的另一个数据中心的从属镜像。(并设置 DNS 循环。)

在主服务器和从属镜像之间设置同步的最佳方法是什么,以便修改和重新同步之间的延迟最小(虽然几秒钟应该是可以忍受的)?

解决方案必须能够应对大型变更集和竞争条件。也就是说,如果我更改了 1000 个文件,它不应该产生 1000 个同步进程。如果我在同步处于活动状态时更改了某些内容,我的新更改最终也必须发送到服务器……等等。

被拒绝的解决方案:

  • CDN — 对于我们的特定使用场景来说不值得花钱。
  • nfs——不通过全球互联网。
  • 愚蠢的 cron + rsync — 延迟和/或系统负载太大。
  • 手动 rsync — 不可靠,内容被非 IT 用户更改。

我想说我们需要一些基于 inotify 的东西。有现成的解决方案吗?

更新:我忘记提及的两个额外(相当明显的)要求:

  • 如果从属镜像上的数据以某种方式发生变化(例如,超级用户意外删除了文件),则同步解决方案必须在下次同步时将数据恢复到主状态。

  • 在空闲状态下,解决方案不得消耗流量或系统资源(当然,除了休眠守护进程的一些内存等)。

更新 2:还有一个要求:

  • 该解决方案必须适用于 UTF-8 文件名。

答案1

关于什么pirsyncd?我认为这对你来说是个好主意 ;)

答案2

你有没有考虑过齐奏作为保持文件同步的手段?使用它,您可以进行您请求的单向同步。它似乎很适合这个应用程序。

答案3

答案4

似乎这时您可能需要编写一个脚本来检查文件的时间戳,如果时间戳晚于上次运行脚本的时间,则假设需要推送该文件,然后触发 rsync 或其他工具来同步该文件。同样,在另一边,做同样的事情来检查文件是否已更改,如果已更改,则触发拉取。Fabric 实际上可能是一个很好的工具。如果您熟悉 Python,那么结合时间戳检查使用 fabric 可能是最佳选择。

相关内容