gpt4 book ai didi

nginx - 如何使用Digital Ocean DNS和Nginx设置全局负载平衡?

转载 作者:行者123 更新时间:2023-12-02 17:14:54 25 4
gpt4 key购买 nike

UPDATE: See the answer I've provided below for the solution I eventually got set up on AWS.



我目前正在尝试在Digital Ocean上为我的应用程序服务器实现全局负载平衡层的方法,但我还需要进行一些整合。

目标

通过将所有连接路由到SFO,NYC,LON和最终新加坡的最近的服务器“集群”,为我的用户提供高可用性的服务。

另外,我最终希望通过编写一个可以监视,扩展和修复系统上任何服务器的守护程序来自动进行维护。或者,我将组合各种服务以实现相同的自动化目标。首先,我需要弄清楚如何手动进行。

堆栈
  • Ubuntu 14.04
  • Nginx 1.4.6
  • node.js
  • 来自Compose.io(以前称为MongoHQ)的MongoDB

  • 全局域名细分

    安装完所有内容后,我的域将如下所示:
    **GLOBAL**
    global-balancing-1.myapp.com
    global-balancing-2.myapp.com
    global-balancing-3.myapp.com

    **NYC**
    nyc-load-balancing-1.myapp.com
    nyc-load-balancing-2.myapp.com
    nyc-load-balancing-3.myapp.com

    nyc-app-1.myapp.com
    nyc-app-2.myapp.com
    nyc-app-3.myapp.com

    nyc-api-1.myapp.com
    nyc-api-2.myapp.com
    nyc-api-3.myapp.com

    **SFO**
    sfo-load-balancing-1.myapp.com
    sfo-load-balancing-2.myapp.com
    sfo-load-balancing-3.myapp.com

    sfo-app-1.myapp.com
    sfo-app-2.myapp.com
    sfo-app-3.myapp.com

    sfo-api-1.myapp.com
    sfo-api-2.myapp.com
    sfo-api-3.myapp.com

    **LON**
    lon-load-balancing-1.myapp.com
    lon-load-balancing-2.myapp.com
    lon-load-balancing-3.myapp.com

    lon-app-1.myapp.com
    lon-app-2.myapp.com
    lon-app-3.myapp.com

    lon-api-1.myapp.com
    lon-api-2.myapp.com
    lon-api-3.myapp.com

    然后,如果在给定区域,任何给定区域中的任何给定层上有任何压力,我都可以旋转一个新的小滴来提供帮助: nyc-app-4.myapp.comlon-load-balancing-5.myapp.com等。

    当前工作方法
  • 最少global-balancing服务器的三重奏接收所有流量。
    这些服务器是“DNS Round-Robin”平衡的,如下图所示
    (坦白地说令人困惑)文章:How To Configure DNS Round-Robin LoadBalancing
  • 使用Nginx GeoIPModule
    MaxMind GeoIP Data
    任何给定请求的来源都取决于$geoip_city_continent_code
  • 然后global-balancing层将请求路由到最小
    适当的load-balancing层上的已连接服务器
    群集:nyc-load-balancing-1sfo-load-balancing-3lon-load-balancing-2等。此层也是(最低)三重奏
    飞沫。
  • 然后,区域load-balancing层将请求路由到
    应用或api层中连接最少的服务器:nyc-app-2sfo-api-1lon-api-3等…

  • Nginx功夫的详细信息可以在本教程中找到:
    Villiage Idiot: Setting up Nginx with GSLB/Reverse Proxy on AWS。有关Nginx负载平衡的更多常规信息可用
    here

    here

    问题

    我应将global-balancing服务器放在哪里?

    我将它们全部放在一个地方,或者将其分布到全局各地,这让我感到奇怪。举例来说,我把它们都放在纽约了。然后有人从法国来打我。该请求将从法国发送到NYC,然后再路由回LON。或者,如果我在SFO,NYC和LON中分别放置一个,那么来自多伦多(Parkdale,代表)的用户是否仍可能发送最终转到LON的请求,而该请求只能路由回NYC?

    是否将后续请求路由到同一IP?

    例如,如果来自多伦多的用户发送了 global-balancing图层确定应去纽约的请求,那么来自该来源的下一个请求是否直接去了NYC,还是仍然幸运的是它将碰到最近的 global-balancing服务器(在这种情况下为NYC)。

    session 如何?

    我已将Nginx配置为使用 ip_hash;指令,以便它将用户定向到相同的 appapi端点(在我的情况下为节点进程),但是全局平衡会对这有何影响?

    是否有任何DNS示例?

    我并不是完全的DNS专家(我目前正在试图弄清为什么我的CNAME记录无法解析的原因),但是当我提供一个可靠的示例时,我可以快速学习。有没有人经过此过程并且可以提供成功建立DNS记录的示例?

    SSL / TLS呢?

    因为这是唯一面向公众的网关,所以我需要为每台服务器还是三台 global-balancing服务器提供证书吗?

    如果您读了整本书,那么就给自己杯形蛋糕以奖励。在此先感谢您的帮助。

    最佳答案

    The Goal: Offer highly-available service to my users by routing all connections to the closest 'cluster' of servers in SFO, NYC, LON, and eventually Singapore.

    The global-balancing layer then routes the request to theleastconnected server...


    如果我正确地阅读了您的配置,则实际上是从全局平衡器代理到每个区域的平衡器。这不符合您将用户路由到最近区域的目标。
    我知道如何获得您想要的三种方法:
  • 30x重定向您的全局平衡器会收到HTTP请求,然后根据IP地址将其重定向到它认为该请求来自的区域内或附近的服务器组。这听起来像您要设置的内容。此方法对某些应用程序有副作用,并且还会增加用户获取数据所需的时间,因为这会增加大量开销。仅当重定向到的资源很大并且本地区域群集将能够更有效地提供服务时,这才有意义。
  • 任意广播(利用BGP路由)这就是像Akamai这样的大公司在其CDN中使用的方式。基本上,Internet上有多个具有完全相同的可路由IP地址的服务器。假设我在多个区域中都有服务器,它们的IP地址为192.0.2.1。如果我在美国并尝试连接到192.0.2.1,并且在欧洲有人尝试连接到192.0.2.1,则很可能会将我们路由到最近的服务器。这使用Internet自己的路由为流量找到最佳路径(基于网络条件)。不幸的是,您不能只使用此方法。您需要自己的AS号和物理硬件。如果您找到了一个VPS提供程序,可让您拥有其Anycast块的一大块,请告诉我!
  • Geo-DNS 有些DNS提供程序提供的服务通常被称为“Geo-DNS”。他们在任播地址上托管了一堆DNS服务器,可以将流量路由到您最近的服务器。如果客户端查询欧洲DNS服务器,则它应返回欧洲区域服务器的地址,而不是其他区域的地址。 Geo DNS服务有很多变体。其他人仅维护一个geo-IP数据库,然后将服务器返回他们认为更近的区域,就像重定向方法一样,但是在发出HTTP请求之前将其返回给DNS。对于价格和易用性而言,这通常是个不错的选择。

  • Do subsequent requests get routed to the same IP?


    许多负载平衡器具有“粘性”选项,该选项表示来自同一网络地址的请求应路由到同一终端服务器(前提是终端服务器仍在运行中)。

    What about sessions?


    这就是为什么您想要那种粘性。在 session 数据方面,您将必须找到一种使所有服务器保持最新状态的方法。实际上,这并不总是可以保证的。处理方式取决于您的应用程序。您是否可以保留Redis实例或其他实例,以便您的所有服务器可靠地受到来自世界各地的攻击?您是否真的需要每个区域的 session 数据?还是可以让您的主应用程序服务器在一个位置处理 session 数据?

    Any DNS Examples?


    为此发布单独的问题。每个人的“成功设置”看起来都不同。

    What about SSL/TLS?


    如果您要代理数据,则只有全局平衡器需要处理HTTPS。如果要重定向,则所有服务器都需要处理它。

    关于nginx - 如何使用Digital Ocean DNS和Nginx设置全局负载平衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25678049/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com