在多台服务器上进行负载平衡

在多台服务器上进行负载平衡

首先,我对这个主题很陌生,标题可能是错误的,但这是我想要实现的目标:

目前,我有一个 Web 服务器作为所有客户端连接的来源,但正如您所猜测的,这是一个非常基本的设置,没有冗余,并且将我的来源和所有数据公开。

我想要做的是,假设我在 A 国有一台 Web 服务器,它是我的来源,并且拥有所有内容。我在 A、B 和 C 国有 3 台 nginx(免费版)服务器,它们缓存我的来源内容,并对请求应用一些简单的规则。

源站 IP :1.1.1.1 Nginx A IP :1.1.1.2 Nginx B IP :1.1.1.3 Nginx C IP :1.1.1.4

负载均衡器 IP:1.1.1.10

我想要实现的是,如果客户端想要访问来自 A 国的内容,他应该被转发到 A 国的 Nginx,其他国家也是如此。

另外,我希望进行健康检查,这样如果 C 国的 Nginx 出现故障,流量就会分成 Nginx A 和 B。

我的理解是,您可以将 Nginx 设置为负载均衡器(1.1.1.10),它将其他 3 个 Nginx 作为上游,并将根据您设置的规则(GEOIP 或其他)获取内容,但我的问题是,我需要一个高 BW 服务器来执行这种负载平衡,因为实际的数据包是通过这个 IP(1.1.1.10)发送的,我说得对吗?

但我真正想要的是,如果来自 B 国的客户访问此 URL:http://1.1.1.10/app/image.jpg他应该被转至http://1.1.1.3/app/image.jpg

此示例采用的是 http 协议,但当然更希望使用 https 协议。例如: https://www.example.com指向 1.1.1.10 https://srvB.example.com指向 1.1.1.3 所以https://www.example.com/app/image.jpg来自 B 国的将被重定向至https://srvB.example.com/app/image.jpg

有没有免费的解决方案?

我知道有基于云的负载均衡器,如 cloudflare,可以做到这一点,但我试图将成本保持在尽可能低的水平,而且当您有大量的每日/每月 BW 时,它们中的大多数都会变得非常昂贵。

当我阅读有关我的问题时,我也偶然发现了正向和反向代理,但我不知道它们如何帮助我,如果这是我的问题的解决方案,有人可以解释一下吗?

答案1

为了实现这样的系统,您需要有进行任播路由的可能性,其中根据流量源的位置将相同的 IP 地址路由到不同的目标。

维基百科文章更详细地描述了这个概念。

要实现任播路由,您需要运营自己的网络基础设施,以便正确配置 BGP。对于最终用户来说,唯一合理的解决方案是像 Cloudflare 这样的 CDN 提供商。

一种可能性是设置一个重定向服务器,通过 HTTP 重定向将访问者发送到特定国家/地区的服务器。但是,这会增加性能损失和应用程序复杂性,并且可能在现实中行不通。内容重复也是 Google 面临的一个问题。

原理是,您有一个位于 的网络服务器www.example.com,它将us.example.com为来自美国的访问者返回 301 重定向到 。

然后它将us.example.com在美国的网络服务器上运行。

类似地,de.example.com对于来自德国的访问者,将返回重定向,并且该域名的服务器位于德国。

us.example.com如果和上的内容de.example.com相同,就会出现重复内容问题。Google 会因为重复内容对其中一个或两个网站进行惩罚。

此设置的其他问题:

  • 当来自德国的游客来访时会发生什么us.example.com
  • 您将如何在网站上设置 URL 结构?所有内容是否都指向www.example.com,然后每个请求都会被重定向?

反向代理在这里没用。在反向代理设置中,所有访问者都连接到反向代理服务器,然后反向代理服务器将请求转发到原始服务器。这意味着对于美国的访问者,在德国使用反向代理,流量会跨越大西洋两次:

  1. 从访客到德国的反向代理。
  2. 从德国到美国的上游服务器。

相关内容