为 LAMP 应用程序设置负载平衡集群时应该了解什么?

为 LAMP 应用程序设置负载平衡集群时应该了解什么?

我应该说,“如何设置负载平衡集群”。我不是一个优秀的系统管理员……我使用 apt-get 和 yum 安装到云中的一些堆栈,但没有什么特别的。

现在我遇到了一个问题,Drupal 网站已经超出了其硬件的能力。防火墙后面有两台服务器,应用服务器在高峰时段达到 90% 以上,而 db/solr 服务器在高峰时段很少超过 10%(通常为 3-4)。这些都是托管物理硬件。DB 的读取量非常大。

无论如何,从财务角度来看,将它们迁移到云端都是有意义的,即使配置没有改变。

因此,我所想象的是一个运行 mod_proxy 的负载平衡器,平衡 2 个应用程序服务器之间的请求(我希望有一个能够神奇地增长的东西),这些应用程序服务器与 nfs 同步并与一个 DB 服务器通信。

目前应用服务器是 DELL PowerEdge 2950 MKIII,32GB RAM,2.5ghz x 4。Db 相同,但 RAM 减半。两者都有 15000 rpm raid 1 设置。

所以实际上,这似乎是可行的。前面的负载平衡器似乎根本不需要任何东西,也许是 1GB 的图像?

我看到某处说,如果用户在会话中途切换服务器,则 cookie 可能会出现问题,有人可以解释一下吗?

任何一般性建议、可以进一步学习的地方等等。请记住,我真的只是想解决这个问题,而不是成为一名专家。

谢谢

答案1

听起来你需要在你的组合中添加另一个 Web 服务器。你有足够的 DB 开销,这很好。这种事情是相当可行的。你已经掌握了关键点。

  • 多个网络服务器。
  • 数据通过某个地方的 NAS 的 NFS 提供,或者最坏的情况下由其中一个 Web 服务器本身提供,并由所有 Web 服务器安装。
  • 配置负载平衡器(mod_proxy 不错,但 nginx 可能更好)以确保传入会话“粘”到某个特定的 Web 服务器。

会话故障转移超出了我的 Drupal 知识范围,但这可能是可行的。是的,如果您的某个 Web 服务器由于某种原因重新启动,这些用户将不得不重新建立。对于与上述类似的应用程序,当我们需要进行计划重新启动时,我们会将负载平衡器(硬件负载平衡器,F5 BigIP)配置为不允许新会话,并观察所有现有会话是否过期,然后再重新启动 Web 服务器。

答案2

据我所知,cookie 默认存储在数据库中,因此它们会自动在用户之间共享。只需通过 NFS 共享您的 webroot,几乎所有事情都可以正常工作(如果您在会话中途切换,某些上传模块可能会出现问题)。

也许我没有理解你的帖子的重点,但是当你的 Drupal 服务器的负载远远超过它的数据库时,就一定是其他方面出了问题。

  • 尝试启用 drupal 的内置缓存系统
  • 安装 PHP 操作码缓存器(APC、eaccelerator、xcache)
  • 尝试使用众多缓存模块之一,如果可能的话,将整个页面推送到磁盘

我靠做这类事情谋生;如果你无法解决,请告诉我。

答案3

最终,故障转移/负载平衡必须在客户端上可行 - 虽然有一些很好的理由在链的更远处提供此功能(并且它在中间的网络级别是隐含的),但这总是意味着循环 DNS。当然,对于几个 Web 服务器来说,使用单独的负载平衡器是过度的。

我对 Drupal 不是很熟悉 - 但如果内容全部存储在数据库中,那么您需要做的就是在 DB 框上设置一个 Web 服务器,并为该站点设置循环 DNS 记录,有利于仅限 Web 服务器的框。

快速浏览一下 Drupal 安装说明,其中没有提到具有可写目录,所以看起来我的假设是正确的。

除了将负载分散到可用容量的地方之外,你还可以消除堆栈中的一个单点故障——Web 服务器。另一方面,添加负载均衡器意味着你正在添加其他SPOF 到你的堆栈。

相关内容