IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 hosts 解析一个名字到多个 IP

    Xupeng发表于 2013-05-15 20:49:00
    love 0

    之前一直以为 hosts 不支持把一个名字解析到多个 IP,因此凡是有解析到多个 IP 需求的场景,全部都使用了 DNS,偶然看 host.conf 的 man page,发现并不是这样,有些场景下仍然是可以使用 hosts 的。

    使用 hosts 解析时,resolver 顺序读取 hosts 文件,返回第一条匹配记录对应的 IP,这也是我之前对 hosts 的理解,比如对于这样的 hosts 文件:

    1
    2
    
    1.1.1.1 host1
    1.1.1.2 host1

    ping host1 会看到 1.1.1.1 这个 IP,但如果在 /etc/host.conf 中设置 multi on,虽然 ping host1 仍然只能看到 1.1.1.1 这个 IP,但 resolver 会返回 hosts 中对应于 host1 条目的所有 IP,以 Python 为例:

    1
    2
    
    >>> socket.gethostbyname_ex('host1')
    ('host1', [], ['1.1.1.1', '1.1.1.2'])

    获取到的 IP 列表顺序和 hosts 中定义的顺序一样,且是固定的,这与 Round-robin DNS 的行为仍有区别,但在有些场景下使用 hosts + 推送 + nscd 名字缓存可以获得相对于 DNS 更好的总体性能和稳定性,比如 doubanservice 客户端获取服务器列表或许就可以改为使用 hosts 替换 DNS,获得更好的性能,同时也规避了比如 tinydns 对一个名字最多只返回 8 个 IP 地址的问题。



沪ICP备19023445号-2号
友情链接