在预算内对 Apache 进行负载平衡?

Ind*_*ial 13 high-availability load-balancing redundancy apache-2.2

我试图理解负载平衡的概念,以确保可用性和冗余,以便在出现问题时让用户满意,而不是为了向数百万用户提供极快的速度而进行负载平衡。

我们的预算有限,并试图坚持使用有大量可用知识的东西,因此在某些著名的搜索引擎收购我们之前,在 Ubuntu VPS 上运行 Apache 似乎是一种策略(包括星期六的讽刺,请注意)。

至少对我来说,这是一个完整的可用不同解决方案的丛林。Apache 自己的 mod_proxy 和 HAproxy 是我们通过快速谷歌搜索找到的两个,但是负载平衡的经验为零,我不知道什么适合我们的情况,或者我们在选择解决方案时会注意什么来解决我们的问题可用性问题。

对我们来说最好的选择是什么?我们应该怎么做才能在不超出预算的情况下获得高可用性?

小智 6

HAproxy 是一个很好的解决方案。配置相当简单。

您需要另一个 VPS 实例来位于至少 2 个其他 VPS 的前面。因此,对于负载平衡/故障转移,您至少需要 3 个 VPS

还需要考虑的一些事情是:

  1. SSL 终止。如果您使用 HTTPS://,该连接应在负载均衡器处终止,在负载均衡器后面,它应通过未加密的连接传递所有流量。

  2. 文件存储。如果用户上传图片,它会去哪里?它只是坐在一台机器上吗?您需要某种方式在机器之间即时共享文件 - 您可以使用 Amazon 的 S3 服务来存储所有静态文件,或者您可以使用另一个 VPS 作为文件服务器,但我会推荐 S3,因为它冗余且非常便宜。

  3. 会话信息。负载均衡器配置中的每台机器都需要能够访问用户的会话信息,因为您永远不知道它们会命中哪台机器。

  4. db - 你有单独的数据库服务器吗?如果你现在只有一台机器,你将如何确保你的新机器可以访问数据库服务器——如果它是一个单独的 VPS 数据库服务器,那有多冗余。拥有高可用性 Web 前端和一个数据库服务器的单点故障不一定有意义,现在您还需要考虑数据库复制和从属提升。

所以我一直在你的鞋子里,这就是网站每天点击几百次才能真正操作的麻烦。它很快变得复杂。希望能给你一些启发:)

  • 如果您只是在前面放置一个负载平衡 VPS,那么您仍然会出现单点故障! (2认同)

cor*_*ump 6

我使用的解决方案可以通过 VPS 轻松实现,如下所示:

  • DNS 被循环(sp?)到 6 个不同的有效 IP 地址。
  • 我有 3 个具有相同配置的负载平衡器,并使用corosync/pacemaker平均分配 6 个 ip 地址(因此每台机器获得 2 个地址)。
  • 每个负载均衡器都有一个nginx + varnish配置。Nginx 处理接收连接并进行重写和一些静态服务,并将其传递回执行负载平衡和缓存的 Varnish。

根据我的偏见,这个拱门有以下优点:

  1. corosync/pacemaker 将重新分配 IP 地址,以防其中一个 LB 出现故障。
  2. nginx 可用于直接从文件系统或 NFS 提供 SSL、某些类型的文件,而无需使用缓存(大视频、音频或大文件)。
  3. Varnish 是一个非常好的负载均衡器,支持权重、后端健康检查,并且作为反向代理做得非常出色。
  4. 如果需要更多 LB 来处理流量,只需向集群添加更多机器,IP 地址将在所有机器之间重新平衡。您甚至可以自动完成(添加和删除负载平衡器)。这就是为什么我在 3 台机器上使用 6 ips,以留出一些增长空间。

在您的情况下,物理分离的 VPS 是一个好主意,但会使 IP 共享更加困难。目标是拥有一个抗故障的冗余系统,以及一些用于负载平衡/HA 的配置将它搞砸,添加一个单点故障(就像一个单一的负载平衡器来接收所有流量)。

我也知道你问过 apache,但那些日子我们有更适合这项工作的特定工具(如 nginx 和 varnish)。让 apache 在后端运行应用程序并使用其他工具为其提供服务(并不是说 apache 不能很好地进行负载平衡或反向代理,这只是将工作的不同部分卸载到更多服务的问题,以便每个部分都可以做得很好它的份额)。