基于位置的 Nginx 负载平衡

基于位置的 Nginx 负载平衡

免责声明:我对负载平衡完全陌生,并且使用 nginx 的经验很少。

我将在几个月后推出一个网站,我想确保它保持正常运行并响应迅速。我相信负载平衡是解决此问题的方法。

不过,我觉得我可以一举两得。我的目标客户将遍布北美甚至英国,所以我想购买两三台服务器,将它们按地理分布,然后对它们进行负载平衡。

我不想做简单的基于循环的平衡;我认为将用户引导到距离最近的服务器以获得更快的响应时间会更有利除非它坏了或者它的负载非常重。

我看到有一种东西叫ip_hash指令,但这听起来只能确保用户被发送到同一台服务器,而不一定是最近的服务器。有办法实现我想要的效果吗?

答案1

将多个服务器添加到上游块可以实现多个服务器之间的负载平衡,但通常服务器位于同一位置。

当用户访问您的网站时,他们会查找您网站域名的 IP 地址。IP 地址对应于互联网上的单个位置,因此网关服务器必然位于单个位置。这意味着,如果服务器不位于同一位置,实际上会适得其反,因为所有网站数据传输都将通过运行 nginx 的网关服务器。

要实现地理负载平衡,您需要多个域或子域。每个域/子域对应一个地理区域(尽管一个地理区域可以有多个域)。您更新域/子域的 A 记录以指向正确的服务器,并正常配置它们。

最后,您可以根据 IP 地址设置重定向到适当的子域以获取最近的服务器。

请注意,如果您按国家/地区执行此操作,它将获得合理的接近值,但不一定是最近的服务器。

您可能会在每台服务器上运行 nginx,其配置根据其处理的 IP 地址块而有所不同。

用户将能够看到他们已被重定向到另一个网站(域/子域)来处理他们的请求。这就是 google.com 所做的,根据您访问的位置,它将重定向到特定国家/地区的 TLD。

请注意,这不是一个简单的配置。如果您希望在服务器故障时提供故障保护,则必须在每个位置拥有多台服务器。您还将拥有许多配置略有不同的服务器,您必须管理这些服务器。在 nginx 中设置地理重定向可能也不一定最容易,但您可以在应用程序服务器中进行重定向。

答案2

如果你需要监控真实服务器的状态,那么可以使用keepalived。keepalived可以检测你设置的页面,当某台服务器宕机后,会更换另一台服务器继续提供服务。

相关内容