一个域如何路由到不断变化的服务器池?

我相信这是一个简单的解决scheme,我只是不太熟悉DNS如何工作,或者甚至与这个问题有关。

如果我在亚马逊ec2上运行一个Web服务,分布在许多实例中,我怎样才能使它成为一个单一的域名可以用来访问整个服务器池,这将不时变化?

由于这些实例可能存在一秒,但是下一个(反之亦然),我需要一种方法来随机select群集的活动成员进行路由。 更新必须是即时的。 这甚至有可能,与DNScaching和所有?

有几种方法可以达到这个目的。

在你的情况下,我build议只需要有一个相对较短的TTL的多个DNSlogging。 分布不是最优的,客户端可能不会select最低延迟的节点。 但是,这非常简单:您只需添加DNSlogging即可。 这是一个广泛使用和testing的技术。

如果您需要从池中删除服务器,只需删除它的DNSlogging,大多数客户端将在TTL过期后停止使用它。 新服务器也是如此:添加它们,在TTL过期之后,客户端将开始使用它们。

谷歌例如,使用这作为他们的平衡技术的一部分:

$ dig A google.com ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 297 IN A 74.125.77.99 google.com. 297 IN A 74.125.77.104 google.com. 297 IN A 74.125.77.147 

Google通过一旦您访问他们的网站,将其扩展到一个基于您所在国家/地区(您的语言)托pipe的版本,但这是您通常不需要的级别。

更新必须是即时的。 这甚至有可能,与DNScaching和所有?

不,这不适用于DNS。 DNSlogging提供了一个生存时间(TTL),它指定了高速caching可以使用该logging的时间, 而不用回授权DNS服务器。 由于各种原因,DNS TTL不能有效地less于10分钟。 DNS round robing 不是负载平衡的解决scheme,至less不需要服务正常运行时间。 见杰夫·阿特伍德这个老问题 。

可以使用将DNS Round Robin与主动监控服务器相结合的第三方DNS服务 ,并自动从DNS中删除死亡服务器。 这不是一个好的解决scheme,但对于重要性较低的站点来说可能够好,而使用fx DNSMadeEasy或EdgeDirector进行设置也是微不足道的。

处理Web服务器可用性的行业标准方法是在Web服务器之前的第4层或第7层负载平衡器 。

在亚马逊ec2上的networking服务,分布在许多实例中,我怎样才能让一个域名可以用来访问整个服务器池

亚马逊为此提供了一个即插即用的服务,称为Amazon Elastic Load Balancing 。 基本上它是来自Amazon的托pipe服务,它在您的EC2 Web服务器前build立了第7层(HTTP)或第4层(TCP)负载平衡器。

另一个常见的select是使用L7负载均衡器(例如nginx,HAProxy,Apsis Pound,Apache 2.2,Zeus Load Balancer或其他)(有几个)来设置EC2实例。 但是如果你走这条路,你将需要自己pipe理OS +负载均衡软件,并考虑如何使EC2负载均衡器实例本身具有足够的可用性。