linux下域名解析函数,Linux下域名解析的优化

缘起

Linux系统下域名解析的配置文件是/etc/resolv.conf,这个大家都知道。估计一般的系统管理员、运维人员都知道在这里面配置上两个或更多的nameserver,以便一个挂掉后还能正常解析域名。但真的情况是这样吗?

我从某次故障说起吧,有一次,线上报大量的dns解析失败,上去看,发现是一台nameserver挂掉了,幸好/etc/resolv.conf中的另外一台没有挂,所以,还不是百分百的解析失败。从逻辑上来讲,这些失败的请求应该会去尝试另外一个(好的)nameserver的,但是重试的场景和策略是什么呢?不得而知。所以我就关注了下/etc/resolv.conf文件的配置问题。

下策

优化方案之一,就是在/etc/resolv.conf中做优化设置。优化前内容如下:

nameserver 10.0.0.1

nameserver 10.0.0.2

nameserver 10.0.0.3

优化之后,文件内容变为:

options timeout:1 attempts:1 rotate

nameserver 10.0.0.1

nameserver 10.0.0.2

nameserver 10.0.0.3

这里大概讲下新加的几个选项的含义:

nameserver:dns服务器的ip地址。最多能设三个。

timeout:查询一个nameserver的超时时间,单位是秒。系统缺省是5,最大可以设为30。这他娘不是坑爹吗?那个应用的dns请求会允许这么长的超时时间?早tm超时出错返回了吧。所以我们这里改成最小值:1

attempts:这个是查询的整个都尝试一遍的次数。缺省是2,我觉得在有3台nameserver的前提下,都查询一遍就完全够了(毕竟三台中有一台能正常查出结果的概率是相当大的吧,尤其是nameserver都有监控的说)

rotate:这个参数的含义是随机选取一个作为首选查询的dns server。系统缺省是从上到下的,所以你该了解到为什么缺省情况下第一个nameserver的负载比第三个的大多了吧。

之所以这只是下策,是因为这种解决方案如果碰到有一台nameserver(假如是10.0.0.1)挂掉的情况下,客户端解析请求如果又恰好分到这台nameserver的时候,应用会解析超时失败的概率太高了。

中策

中策就是做nameserver的高可用,用lvs来做,做两个vip:10.0.0.4和10.0.0.5,后端real server还是指向这三台真实的nameserver:10.0.0.1、10.0.0.2和10.0.0.3,这样real server的健康状况就由lvs来维护了,这样当客户端来访问vip时,只要后端的3台不都挂掉,就一定能保证返回正确的结果。

具体的配置我就不贴了,直接用keepalived来做即可。

这个解决方案其实也挺完美的,尤其是当有现成的lvs director的时候。看了最后一策,就知道为什么这个只是中策了。

上策

这个方案是我仔细考虑后推荐的方案,尤其适用于没有现成的lvs director的环境里。这个方案的主要特点是:

本机起dnsmasq,监听本地的udp 53口,用来监听来自于本地的解析请求。

在dnsmasq里,将上层服务器定义为10.0.0.1、10.0.0.2和10.0.0.3。

这个方案的优点在于:

本地虽然多起一个dnsmasq服务,但是仅监听127.0.0.1,所以基本不影响性能

dnsmasq会自己维护上游服务器的健康状况,不会把解析请求发到挂掉的上游服务器上

这个方案能够自动做dns server的故障切换,而且不引入任何外部的依赖(dnsmasq是本机跑的),几乎不影响性能,甚至于还有可能提升性能,毕竟,dnsmasq也是会做一级缓存的。所以,我认为其为上策!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值