是否有类似于DNS的标准工具,但是用于将名称映射到主机名/端口号组合?

时间:2012-02-05 01:30:26

标签: dns

我有许多服务在各种机器上运行,需要通过任意端口进行通信。现在通过将配置文件推送到包含服务名称到主机名/端口组合的映射的每台机器来实现端口发现。

由于所有相同的原因,DNS比在每台机器上手动维护/etc/hosts更好,我希望有一个集中式系统来注册和查找这些主机名/端口组合。

是的,构建这个系统的简单版本并不需要很长时间(它只是一个键值存储),但理想情况下,该服务将是快速,冗余,自动更新并具有故障转移功能,显然需要花一点时间从头开始构建。

我无法想象我是第一个需要这样一个工具的人,但到目前为止,我的谷歌已经让我失望了。有没有为此目的建造的东西?或者我应该设置Kyoto TycoonZooKeeper并自己编写一些缓存/查找/故障转移逻辑?

3 个答案:

答案 0 :(得分:3)

DNS支持专为此设计的SRV记录(服务位置。)

SRV记录具有以下形式(维基百科提供):

_service._proto.name TTL class SRV priority weight port target
  • service:所需服务的符号名称。
  • proto:所需服务的传输协议;这通常是TCP或UDP。
  • name:此记录有效的域名。
  • TTL:标准DNS生存时间字段。
  • class:标准DNS类字段(始终为IN)。
  • priority:目标主机的优先级,值越小意味着更优先。
  • weight:具有相同优先级的记录的相对权重。
  • port:要在其上找到服务的TCP或UDP端口。
  • target:提供服务的机器的规范主机名。

大多数现代DNS服务器都支持SRV记录。

答案 1 :(得分:1)

Avahi通告每台机器提供的服务(按端口)。 (又名Apple的Bonjour)

不确定它是否正是您正在寻找的,但绝对是这样的。 这个概念是每台机器都会宣布它在每个端口上运行的服务。

但这仅限于局域网实施,我不确定是否符合您的要求。

要为此答案添加更多内容,以下是Avahi广告网页的示例服务文件:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h Web Server</name>
  <service>
    <type>_http._tcp</type>
    <port>80</port>
  </service>
</service-group>

答案 2 :(得分:0)

我个人认为zookeeper非常适合这个用例。短暂的节点意味着注册清理不是问题,使您可以在服务器端使用动态端口分配,而监视将有助于重新平衡客户端 - >服务器映射。也就是说,使用zookeeper进行服务器端注册并使用DNS SRV记录进行客户端查找(使用zookeeper到dns桥)对大多数用例都适用。