为服务器场使用单个IP地址

我正在构build一个应用程序,其中有XX个可以在单个实例上运行的客户。 应用程序通过添加更多节点来扩展(从而支持XX更多客户)。 我想要一种方法来使用一个IP地址,这样我可以让客户设置CNAME来使用他们自己的自定义URL。

我也希望能够将客户迁移到不同的节点,这意味着CNAME需要指向不同的IP地址。

我的想法是我可以指向每个人一个IP地址,然后让该应用程序路由客户请求到不同的服务器节点。 这就像负载平衡器(从我的研究中)所做的一样,但是对于我想要做的所有事情来说,这看起来有些过火。

我宁愿在.NET中使用这种方法,但是可以使用任何技术来实现目标。

您没有提到在任何地方使用HTTP,但是您将问题标记为“web-applications”和“web-farm”,所以我假设这是您的应用程序使用的; 如果这是你的情况,那么这看起来像一个反向代理存在的确切types的作业。

您设置了N台内部服务器,每台服务器都运行在自己的内部IP地址上,并且您可以在每台服务器上configurationIIS(或任何您使用的Web服务器),以处理服务器将要回答的网站名称。

然后你给你的反向代理一个内部IP地址,可以与内部服务器和外部公共IP地址通信。

然后,您将所有公共DNS名称指向反向代理的外部地址。

最后,configuration您的反向代理,以便将给定网站名称的请求转发给实际托pipe它的内部Web服务器。

Etvoilà。

我知道ISA Server 2006和ForeFront TMG 2010都可以轻松做到这一点,当然你也可以使用任何你想要的反向代理软件。

当然,您可以使用一组负载均衡的反向代理来实现高可用性和负载平衡。

你可以在.NET中做到这一点,但我认为你仍然会有某种DNStypes的服务。

我的build议是有一个内部DNSparsing您的内部农场机器的IP。

在IIS7中设置你的绑定,以响应所有客户创build的url,并在每个IP地址的前端都有一个公共DNS服务器别名。

一旦您的前端服务器被击中,从HTTPvariables中检索使用的主机名,然后使用您的内部DNS来查找实际服务所在的IP。

一旦你知道了IP,那么只是将所有通信转发给该IP的情况。

这看起来像是一个IIS服务器场的作业。 请注意,从.NET方面,你将不得不编写应用程序正确处理状态和其他function。 如果/当负载平衡或故障切换启动时,您的客户将有奇怪的问题。

您肯定希望Windows Server / IIS为您处理群集问题,主要是因为Microsoft已经在使应用程序级群集正常工作方面做了大量工作。

我会使用HAProxy负载均衡器来完成这项任务。 这是一个Linux解决scheme,但它可以轻松地平衡HTTP或TCP请求。