在 PHP 中,我们在服务器上创建各种文件。问题是我们有两台服务器,它们是负载平衡的。保持两台服务器之间创建的文件同步的最佳方法是什么?是否有一些我从未听说过的常见做法?
答案1
#1:您可以让操作系统完成工作。假设您使用的是 Microsoft Windows 环境,DFS 将是最简单的解决方案(就管理工作而言)。您必须设置域控制器,这需要 R2 版本的 Windows Server(无论是 2003 还是 2008)。
#2:不要在负载平衡服务器自己的硬盘上创建文件。您应该将文件处理与 Web 服务器分开,并使用外部存储。
答案2
共享存储才是王道。我们使用 NAS 让所有服务器都可以访问文件。
答案3
嗯,使用 rsync 进行单向同步很容易。那么双向同步呢?我快速谷歌了一下,似乎可以实现。
该链接的底部为您提供了一个方法。
答案4
您的负载均衡器应允许您对其进行配置,以便来自特定客户端的所有请求始终发送到同一负载均衡服务器。启用此功能后,每当为客户端创建文件时,该文件都会出现在来自同一客户端的后续请求中。但是,如果客户端 A 触发为客户端 B 创建文件,则效果不太好。
您可能需要考虑使用数据库服务器。例如,如果您创建的文件存储的是会话信息,则请将该数据存储在两个 Web 服务器都指向的数据库中(如果您愿意/需要,可以在此处添加复制以保持负载分布)。如果不是会话数据,请考虑将生成文件所需的数据存储在此数据库中,并且仅在请求时通过从数据库中提取此数据来按需生成实际文件;不过,这可能不适用于您的情况。
最后,您可以考虑共享和/或复制存储。Windows 环境中的 DFS 是一种很好的复制解决方案;NFS 或 SMB 可能适用,或者 SAN;基本上 @karatedog 提到的所有内容。
另一个需要考虑的选项是文件中心数据库解决方案,例如 MongoDB,它基本上采用数据库的形式作为集中式文件存储。将文件放在那里,任一服务器都可以稍后将它们重新取出。