如何跨负载平衡 PHP 集群同步文件

如何跨负载平衡 PHP 集群同步文件

我刚刚配置了 lighttpd 网络服务器以将 php-fcgi 请求传递给外部应用程序服务器。

应用程序服务器正在运行 PHP 5.3 和 spawn-fcgi。

问题是所有 Web 文件都需要存在于 Web 服务器和应用服务器上。如果我从应用服务器上删除 Web 文件,则会收到:“未指定输入文件”。如果我从 Web 服务器上删除 Web 文件,则会收到 404 错误。当 Web 文件同时存在于应用和 Web 服务器上时,它就可以正常工作。

这到底是怎么管理的?有没有办法跨服务器配置一组带有符号链接或类似内容的 Web 文件?通常如何解决这个问题?谢谢。

在 Web 服务器上配置 Lighttpd

#### fastcgi module
fastcgi.server             = ( ".php" =>
                           ( "app1.geodb.io" =>
                             (
                               "host" => "192.168.167.82",
                               "port" => 8080,
                               "check-local" => "disable",
                               "disable-time" => 3
                             )
                           )
                         )

答案1

我不确定 fastcgi 问题,但跨服务器同步文件的标准解决方案是rsync(它使用有趣的算法来最小化网络流量)。假设您可以将其中一台服务器指定为“主服务器”,即将其文件定义为所有其他服务器的基础,这应该足够了:

rsync -avh /var/www/example/ remotehost:/var/www/example/

请注意,结尾的斜杠是有意义的,并且此命令将不是如果在主服务器上删除了文件,则删除远程主机上的文件。如果您想要附加 --delete:

rsync -avh --delete /var/www/example/ remotehost:/var/www/example/

您需要在两端都使用 rsync,当然,您需要 ssh 访问权限,因为它使用 ssh 作为传输方式(您可以使用其他方式,但如果您没有充分的理由切换,最好还是使用 ssh)。您可能还想在 cronjob 上运行它,但如果您使用自动化流程将文件部署到“主服务器”,您也可以将其添加到该作业中。

编辑:当然,您也可以通过 NFS 或某些其他网络文件系统在所有节点上挂载 /var/www/example,但这样会失去每个节点的独立性,并有可能造成瓶颈。但如果您的 .php 文件占用大量 CPU,而文件系统 I/O 并不那么重要,您绝对可以尝试此选项。

相关内容