【问题标题】:Faking DNS resolution on a per hit basis以每次命中为基础伪造 DNS 解析
【发布时间】:2011-04-22 01:57:40
【问题描述】:

我正在编写一个应用程序,其唯一目的是确定我们的一个核心应用程序是否已启动并在生产中运行。此应用程序是 WCF 应用程序。该应用程序在负载均衡器后面的两个不同的盒子上启动并运行。每个框上的站点都配置为侦听以下 DNS 名称的流量:app.company.com。 DNS 将 app.company.com 解析到我们的负载均衡器,然后负载均衡器将请求以循环方式传递给两个盒子之一。在确定我们的核心应用程序是否已启动时,仅通过请求访问负载均衡器是不可接受的,因为负载均衡器可能会将我们轮询到活动服务器,即使其中一个服务器已关闭并且我们的应用程序需要能够以确定其中一个框是否已关闭。是的,负载均衡器已经在一定程度上检查了服务器是否已启动,但它并未涵盖所有场景。

我遇到的问题是我无法将流量直接发送到每个框(通过 IP 或主机名),因为主机标头 (app.company.com) 必须在请求中,或者目标服务器或 WCF 将拒绝它。如果我使用 app.company.com 而不是主机名或 IP 地址,我将访问负载均衡器,如果我修改机器上的 hosts 文件,它将仅适用于一个盒子。

有没有办法强制在 .Net 或 Windows 中进行 DNS 解析,以将 app.company.com 解析为我选择的 IP 地址,这种方式可以针对每个请求进行微调,并且不会影响整个系统的 DNS?否则,我可能会考虑手工制作一个请求,以便我可以将正确的主机标头嵌入到请求中,而不是实际到达相同 DNS 名称的目标。

谢谢

【问题讨论】:

    标签: .net wcf dns


    【解决方案1】:

    它是基于每次命中分配 DNS 的负载均衡器(如您所说,以循环方式),因此您不能从客户端过载。您也许可以配置负载均衡器,使来自特定 IP 的请求不会得到负载均衡,但如果您需要通过 DNS 检查两个负载均衡的应用程序,这并没有多大帮助。

    因此,您需要重新考虑如何解决这个问题。

    一种策略是让负载平衡的应用程序报告它们正在运行,而不是单独的应用程序签入。

    或者让每个应用定期将时间戳文件更新到服务器上,以便您的应用可以通过 IP 地址分别访问这些框并检查时间戳文件是否存在。

    【讨论】:

    • 负载均衡器是 DNS 查找的目标。我正在寻找一种以本地化方式更改目标的方法。我可以为一个盒子做这件事,但如果不动态修改主机文件,我就不能为两个盒子做这件事。我必须检查的具体事项要求我以与客户命中相同的方式通过服务。仅仅检查应用程序的其他部分是否已启动并不能满足我的需求。例如,在 WCF 中,如果我有一个配置文件错误,尽管应用程序的其他方面可能会完美响应,但在模拟真实请求时可能会出错
    【解决方案2】:

    我找到了解决这个问题的好方法。我最终做的是在同一个 Web 应用程序中创建第二个服务,然后我更改了每台机器上的主机文件,以包含将 localhost 指向 app.company.com 的行。

    127.0.0.1     app.company.com
    

    然后我将这个新服务配置为指向“app.company.com”。

    这允许我通过第二个服务直接通过主机名或 IP 地址访问服务器,第二个服务通过主机名与被测服务通信。

    这完全符合我们的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多