我目前正在我的服务器上部署一些 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 服务器为web1
和web2
,并且您的 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,...)和部署脚本