UPDATE:请参阅下面我提供的答案,了解我最终在 AWS 上设置的解决方案。
我目前正在尝试为 Digital Ocean 上的应用程序服务器实现全局负载平衡层的方法,但我还没有将一些内容放在一起。
The Goal
通过将所有连接路由到 SFO、NYC、LON 以及最终新加坡最近的服务器“集群”,为我的用户提供高度可用的服务。
此外,我最终希望通过编写一个可以监视、扩展和修复系统上任何服务器的守护进程来自动化维护。或者我将结合各种服务来实现相同的自动化目标。首先我需要弄清楚如何手动完成。
堆栈
- 乌班图14.04
- nginx 1.4.6
- node.js
- MongoDB 来自Compose.io http://www.compose.io(前身为 MongoHQ)
全球域名细分
一旦我安装好一切,我的域将如下所示:
**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.com
, lon-load-balancing-5.myapp.com
, etc…
当前的工作方法
(最少)三人组global-balancing
服务器接收所有流量。
这些服务器是“DNS 循环”平衡的,如下所示
(坦白说令人困惑)文章:如何配置 DNS 循环负载
平衡 https://www.digitalocean.com/community/tutorials/how-to-configure-dns-round-robin-load-balancing-for-high-availability.
使用Nginx GeoIP
模块 https://nginx.org/en/docs/http/ngx_http_geoip_module.html and
MaxMind GeoIP 数据 https://www.maxmind.com/en/geolocation_landing任何给定请求的来源都被确定为$geoip_city_continent_code
.
The global-balancing
然后将请求路由到最少的层
连接的服务器上load-balancing
适当的层
簇:nyc-load-balancing-1
, sfo-load-balancing-3
,
lon-load-balancing-2
等等。这一层也是(最小)三重奏
飞沫。
区域性load-balancing
然后将请求路由到
应用程序或 API 层中连接最少的服务器:nyc-app-2
,
sfo-api-1
, lon-api-3
, etc…
Nginx功夫的细节可以在这个教程中找到:Village Idiot:在 AWS 上使用 GSLB/反向代理设置 Nginx https://gpeev.blogspot.ca/2013/02/setting-up-nginx-with-gslbreverse-proxy.html?m=1。提供了有关 Nginx 负载平衡的更多一般信息here https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing/和here http://subprint.com/blog/nginx-load-balancer-and-reverse-proxy-for-node.js-applications-on-digital-ocean.
问题
我该把global-balancing
服务器?
让我感到奇怪的是,我要么把它们全部放在一个地方,要么将该层分散到全球各地。比如说,我把它们都放在纽约。然后来自法国的某人访问了我的域名。该请求将从法国发送至纽约,然后路由回 LON。或者,如果我在 SFO、NYC 和 LON 中分别放置一个,那么来自多伦多的用户(Parkdale,代表)是否仍然可能发送一个请求,最终发送到 LON,然后又被路由回 NYC?
后续请求是否会路由到同一 IP?
例如,如果来自多伦多的用户发送请求global-balancing
层确定应该前往纽约市,来自该来源的下一个请求是否直接前往纽约市,或者它是否仍会碰上最近的运气global-balancing
服务器(在本例中为纽约市)。
会议怎么样?
我已经将 Nginx 配置为使用ip_hash; https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash指令,因此它将引导用户到相同的app
or api
端点(在我的例子中是一个节点进程),但是全局平衡将如何影响这一点(如果有的话)?
有 DNS 示例吗?
我不完全是 DNS 专家(我目前正在尝试找出为什么我的 CNAME 记录无法解析),但如果提供可靠的示例,我可以快速学习。有人以前经历过这个过程并且可以提供成功设置的 DNS 记录的示例吗?
SSL/TLS 怎么样?
我需要为每台服务器提供证书,还是只为三台服务器提供证书global-balancing
服务器,因为这是唯一面向公众的网关?
如果您阅读了整篇文章,请奖励自己一个纸杯蛋糕。预先感谢您的任何帮助。