我有 2 个 Web 服务器,但可能需要在此过程中添加更多服务器。目前,我使用 lsyncd + csync2 使这些服务器保持同步。从性能上讲,这种方法效果很好,因为所有文件都在两个服务器上(无需网络访问即可在本地打开文件),但在其他情况下效果不佳。
例如,如果我删除了服务器 1 上的一个文件,并立即将一个同名的新文件上传到服务器 1。与此同时,该文件将从服务器 2 中删除,导致服务器 1 上新上传的文件也被删除,因为服务器 2 会将删除事件发送到服务器 1,从而完成“更新循环”。
我忍不住想,一定有更好的方法来保持服务器同步。我一直在研究 GlusterFS,我发现不建议将所有文件复制到所有服务器的设置。但是,我在这些服务器上运行 Drupal 之类的 CMS 系统。这样的 CMS 系统通常会打开相当多的文件,我担心获取这些文件所需的网络流量太大会减慢请求速度。
考虑用 GlusterFS 替换 lsyncd + csync2 以将所有文件复制到所有节点是一个好主意吗?或者这是一个坏主意?
答案1
BitTorrent Sync 可以帮你完成这个任务。我用它来保持我家的几台内部服务器之间的文件同步,它做得非常好。当你的应用程序使用 CMS 时,你需要考虑的另一件事是后端数据库。确保有 MySQL 复制正在进行,或者类似的东西。
答案2
答案3
Gluster 可以解决您的问题,因为它可以持有锁、传播更改 - 删除所有其他节点上的文件,但它可能会增加额外的延迟,这对 Web 服务器来说可能是一个问题。下一个替代方案是 DRBD+OCFS2 或 GFS,但这可能更复杂,因为使用 gluster 时您使用的是底层文件系统 - 它不在块级别运行,因此如果服务器不同步,修复起来并不难,文件不会因为脑裂而轻易损坏,等等......
我们将其用作邮件服务器,对于包含大量文件的目录,它的速度相当慢。部署之前,您一定要测试所有内容。我目前正在测试 NFS 挂载,因为它更适合小文件。
答案4
你为什么不使用这样的工具木偶? 在源中编写一次,准备好后使用“puppet kick”或 mcolletive 将其部署到目标。它有很好的文档记录。如果需要,您可以稍后轻松添加服务器。
您还可以依靠使用 inotify 的工具(如 lsyncd),这些工具在内核级别运行。它会监视文件夹中的更改并触发同步。但如果像 csync2 这样的专用于集群上文件同步的工具还不够,我不知道还有什么能做到。
只是为了确定,修改是否也发生在服务器 2 上或仅发生在服务器 1 上?