我正在构建一个应用程序,其中有 XX 个客户可以在单个实例上运行。该应用程序通过添加更多节点进行扩展(从而支持 XX 个客户)。我想要一种使用单个 IP 地址的方法,这样我就可以让客户设置 CNAME 以使用他们自己的自定义 URL。
我还希望能够将客户迁移到不同的节点,这意味着 CNAME 需要指向不同的 IP 地址。
我的想法是,我可以将每个人都指向一个 IP 地址,然后让该应用程序将客户请求路由到不同的服务器节点。这就像负载平衡器所做的那样(根据我的研究),但对于我想要做的所有事情来说,这似乎有点过头了。
我更喜欢在 .NET 中实现这一目标,但我愿意接受任何技术来实现这一目标。
答案1
你没有在任何地方提到使用 HTTP,但你将问题标记为“web 应用程序”和“web 农场”,所以我假设这是你的应用程序使用的;如果这是你的情况,那么这看起来就像是反向代理存在。
您设置了 N 个内部服务器,每个服务器都在自己的内部 IP 地址上运行,并且在每台服务器上配置 IIS(或您正在使用的任何 Web 服务器)来处理该服务器将要响应的网站名称。
然后,您为反向代理提供一个可以与内部服务器通信的内部 IP 地址和一个外部公共 IP 地址。
然后让所有公共 DNS 名称指向反向代理的外部地址。
最后,配置反向代理,以便将对给定网站名称的请求转发到实际托管该网站的内部 Web 服务器。
瞧!
我确信 ISA Server 2006 和 ForeFront TMG 2010 都可以轻松做到这一点,但当然您可以使用任何您想要的反向代理软件。
当然,您可以使用负载平衡的反向代理阵列来实现高可用性和负载平衡。
答案2
您可以在 .NET 中执行此操作,但我认为您仍将使用某种 DNS 类型的服务。
我的建议是有一个内部 DNS 来解析内部农场机器的 IP。
在 IIS7 中设置您的绑定以响应所有客户创建的 URL,并让每个公共 DNS 服务器别名为您前端的单个 IP。
一旦您的前端服务器被命中,就从 HTTP 变量中检索使用的主机名,然后使用您的内部 DNS 查找实际服务所在的 IP。
一旦您知道了 IP,那么就只需将所有通信转发到该 IP 即可。
答案3
这看起来像是一个IIS 服务器群。请注意,从 .NET 方面,您必须编写应用程序以正确处理状态和其他功能。当负载平衡或故障转移启动时,您的客户端将遇到奇怪的问题。
您肯定希望 Windows Server/IIS 为您处理集群,主要是因为 Microsoft 已经在使应用程序级集群运行方面做了大量工作。
答案4
我会用HAProxyloadbalancer 来完成这个任务。这是一个 Linux 解决方案,但它可以轻松地对 HTTP 或 TCP 请求进行负载平衡。