在多台服务器上部署 PHP 的最佳实践

在多台服务器上部署 PHP 的最佳实践

我目前正在我的服务器上部署一些 PHP Zend 应用程序,这就是我目前所得到的。

第一层-负载均衡器+Http缓存。

第二层 - Web 服务器(这里将有更多的 Web 服务器,这就是负载均衡器的原因)。

第三层 - MySql(将具有复制、从主、可能按客户或客户组进行分片)。

问题是这样的,目前我在 Web 服务器上运行 nginx + php-fpm,所有 php 代码都保留在用户各自的主文件夹中。随着时间的推移,我想增加服务器、php-fpm 和 nginx 实例的数量。

我应该把 php 放在哪里,因为我无法在服务器之间复制它,否则更新会破坏一致性;)

我在想也许 NFS 可以保存所有的 php 代码并且服务器只需指向它。

这里正确的方法是什么?

我对服务器架构还不太熟悉。

感谢你的帮助。

[]的 Rodrigo

答案1

您确实不应该将其放在 NFS 上。这会使您的 NFS 服务器成为单点故障。如果您的 NFS 无法访问(可能是崩溃了,也可能是网络出了问题...),那么您的整个站点都将处于离线状态。

相反,将 PHP 存储在某个中心位置 - 任何地方。无论在哪里都无所谓。然后,当您需要将文件推送到新服务器时,只需将其复制到新服务器即可。

您必须确保您的用户不会直接在 Web 服务器上更新 PHP。他们应该在中心位置进行更新。

例如,假设您的 Web 服务器为web1web2,并且您的 PHP 文件保存在/home/foo/php和 中/home/bar/php。这是您当前的权威位置,可能需要更改。
设置类似/var/code/foo/php和 的内容/var/code/bar/php,并告诉您的用户在那里进行更新。当他们进行更新时,运行一个脚本,将文件复制到/home/foo/php每个 Web 服务器上的 和 /home/bar/php`。

您现在遇到的困难部分在于,您将数据存储在用户主目录中,并且将继续遇到。
您应该考虑迁移到合适的版本控制系统,如 Mercurial、Git 或 SVN。将所有数据存储在同一位置,然后在任何您想要的位置签出它们。

例如:
使用服务器(我们称之为dev1)并安装 SVN。在 SVN 中创建一个新项目(我们称之为php_project1)。告诉您的用户签出svn://dev1/php_project1/userN,并编辑和提交文件到 SVN。
然后在您的 Web 服务器上,您可以执行以下操作:

cd /home/user1/php
svn checkout svn://dev1/php_project1/user1

任何时候您需要更新您的网络服务器,只需svn update在主目录中运行即可。

我可以讲的内容还有很多。欢迎来管理网络农场。

答案2

  • 第一层-仅负载均衡器
  • 第二层 - 静态/图像/视频 Web 服务器 (nginx);通用 Web 服务器 (nginx+php-fpm);脚本服务器 (nginx+php-fpm 或 cpp;运行“重型”脚本);memcached 服务器
  • 第三层 - 分片主从 MySQL 服务器

和监控(Zabbix)和邮件服务器。平巴使用 MySQL 的 PHP 实时监控/统计服务器。

我在想也许 NFS 可以保存所有的 php 代码并且服务器只需指向它。

坏主意,使用版本控制系统(git,svn,mercurial,...)和部署脚本

相关内容