1

这里有点复杂。我在过去的几个月里完成了一个更大的基于 Web 的项目,并且由于我试图保持低预算(并自己学习一些东西)我没有触及我以前从未接触过的问题:使用 NGINX 进行负载平衡,以及未来的可扩展性。

设置如下: 1 台 Web 服务器 1 台数据库服务器 1 台文件服务器(也用于存储备份)

在 fastCGI 上使用 PHP 5.4<

现在,所有这些服务器都应该是“可扩展的”——从某种意义上说,如果可用磁盘空间越来越低,我可以添加一个新的文件服务器,或者如果我需要处理比预期更多的请求,我可以添加一个新的 Web 服务器。

另一件事是:我想在一个域上做所有事情,这样前端就不会真正注意到对不同后端服务器的访问(一些后端服务器基本上是通过子域调用的 - 例如:文件服务器,通过 'http:// file.myserver.com/...' 仅在文件服务器之间发生负载平衡)

  1. 我是否需要一个额外的、单独的服务器来进行负载平衡?或者我可以只使用其中一个 Web 服务器吗?如是:
    • 这样的负载平衡服务器需要多少功率(CPU / RAM)?它是否必须与网络服务器相同,或者拥有一个“更轻”的服务器就足够了?
    • “负载平衡”服务器是否也必须具有可扩展性?如果请求太多,我需要多个吗?
  2. 整个负载平衡到底是如何工作的?我的意思是说:
    • 我已经看到许多条目指出,负载平衡系统上存在会话处理/同步等问题。我可以找到 2 个可能适合我需求的解决方案:要么始终将用户定向到同一台机器,要么将数据存储在数据库中。但是对于第二个,我基本上必须重建 PHP 已经拥有的 $_SESSION 功能的一部分,对吗?(我怎么知道哪个用户得到了哪个会话,cookie 真的足够了吗?)
    • 除了不同步的会话,我会遇到什么问题?
  3. 编写可扩展的代码——这是我经常阅读的一句话。但是以 PHP 为例,它的真正含义是什么?通常,一个用户的整个计算只发生在一台服务器上(NGINX 将用户重定向到的服务器) - 那么 PHP 本身如何可扩展,因为它实际上并没有被 NGINX 重定向?
  4. 是否可以使用不同的“负载平衡”池?我的意思是,所有文件服务器都在一个“池”中,所有 Web 服务器都在一个“池”中,基本上,如果您在文件服务器上请求一个有太多事情要做的图像,它会重定向到一个不太繁忙的文件服务器
  5. SSL - 我只需要一个用于平衡加载服务器的证书,对吧?由于数据总是通过负载平衡服务器返回 - 或者它究竟是如何工作的?

我知道这是一个很大的问题 - 基本上,我真的只是在寻找一些建议/有点帮助,我对整个事情有点迷茫。我可以阅读部分回答上述问题的片段,但真正“做”它完全是另一回事。所以我已经知道不会有一个明确的、确定的答案,但也许是一些经验。

最终目标是在未来易于扩展,并且已经提前计划(甚至购买负载均衡器服务器之类的东西)。

4

1 回答 1

1

您可以使用其中一台 Web 服务器进行负载平衡。但是在单独的机器上设置平衡会更可靠。如果您的 Web 服务器响应不是很快并且您收到很多请求,那么负载均衡器会将请求设置在队列中。对于大队列,您需要足够数量的 RAM。

您通常不需要扩展负载均衡器。

或者,您可以为您的域创建两个或多个 A(地址)记录,每个记录指向不同的 Web 服务器地址。它会给你一个没有平衡服务器的“ DNS 负载平衡” 。考虑这个选项。

于 2012-12-11T11:08:03.317 回答