BIND 转发超时的问题

2016-05-14 10:15:10 +08:00
 jamiesun

给好几个客户做了 BIND 转发服务,其中一个老是出各种幺蛾子,今天又碰上。

客户多个出口断开,但不是所有,但全网 DNS 服务全断了, DNS 服务器本身访问内外网络正常,配置如下:

options { 
    recursion yes;
    blackhole {  };
    forward only;
    allow-query { any; };
    forwarders { a.a.a.a;b.b.b.b; };
}

......

zone "taobao.com" { 
type forward;
forwarders { a.a.a.a;b.b.b.b; }; 
};

.....

BIND 的选择算法之前还真没仔细分析过,当其中一个转发目标不可用时,另一个转发目标被启用,但是有个超时时间,我搜索到下面的文章:

http://blog.csdn.net/midsum/article/details/21477975

“ 直到客户遇到了这样的问题。该客户有两个转发服务器 A 和 B ,现在是 A 正常, B 超时并且一直超时,也就是说, B 在每一次被重试之后,都被重新设定为 20000 ,之后都会转发给 A , 直到 B 乘以 0.98 的数次之后又小于 A ,才又被重试。但是,根据客户的计算, 20000 的值在 150 多次之后将会减小到 A 值相同的值(即: 20000 * 0.98^150 < A->srtt ),而 B 因为超时,每次往 B 的转发都会长达 30 秒钟(默认设定重试时间为 30 秒)。而当访问量很大时, 150 次的查询只需要几秒钟(该客户好像是每分钟上万次的查询)。这样就造成了这么一种感觉,即几秒钟的反应之后,接着是 30 秒钟的超时,然后又是几秒, 30 秒....,整体上看来,就是绝大多数时间里, DNS 都是不可用的状态。”

我的客户也正好是碰到这个问题,断开的出口恢复后, DNS 转发也立即恢复了,但是预期的多个转发备份功能失效了。本来客户同时有两个转发服务器,但出口断了,全部都是一样的问题,

那么如何更好的解决这个问题,避免全网投诉。

4319 次点击
所在节点    DNS
15 条回复
jamiesun
2016-05-14 10:19:58 +08:00
我现在想的是备机的网络隔离,但是某些转发 DNS 是专用的,只能通过某些出口访问,不使用的话就失去加速效果。
bobopu
2016-05-14 11:15:32 +08:00
以前好像也遇到过这问题,当时不知道是 bind 超时算法问题,后来把转发的第二个 ip 指向内网后好了。试下 unbound 有没有此问题?
jamiesun
2016-05-14 11:42:21 +08:00
@bobopu 谢谢,我现在想明白了不少,给客户做的这个服务确实做得不够周到,覆盖几万用户的服务,后端对 DNS 转发服务是必须做一个可用性检测的,而不能仅仅依赖 BIND 本身的算法机制。

我现在计划做一个定时检测模块,对所有转发服务地址定时检测可用性,也是通过域名解析实现,一旦发现某个 DNS 转发服务地址不可用,立即从全局配置中剔除(并用其他可用公共 DNS 替换),标记状态不可用,并刷新配置;当检测到服务恢复时,再重新配置并刷新,标记状态可用。

另外再做一些关键域名的解析检测,用个算法来判断当前 DNS 服务器的综合健康指数。
bobopu
2016-05-14 12:46:43 +08:00
@jamiesun 厉害。有些公共 DNS 是会限制解析频率,就我所知阿里 DNS 就存在解析限制。另外,觉得这几个新版本的 bind 增加了不少东西,但中文版的 bind 手册又太旧,没这方面新增内容的中文资料也是挺困扰。
jimzhong
2016-05-14 13:45:14 +08:00
曾经做过 DNS 转发,觉得 BIND 配置太麻烦,就用 Python 写了一个,可以用 dnslib ,自己写 LRUCache 。一个上游服务器 2s 内不回复就转发给下一个。
samueldeng
2016-05-14 15:11:39 +08:00
我记得我之前弄 bind9 的时候,默认是配置了 dnssec ,那玩意儿开启后,速度简直不能忍。
qcloud
2016-05-15 09:49:58 +08:00
@samueldeng 开启 dnssec 怎么了?
jamiesun
2016-05-15 13:03:35 +08:00
@jimzhong python 做的性能怎么样?

bind 性能还是不错的,我还是用 bind9 , bind10 早出来了,有很多模块使用 python 开发,但是这玩意是真复杂,没有那么多精力去研究。

我是在 bind9 上封装了一层管理界面,配置还是文件配置。有个 isc 的配置解析模块。
samueldeng
2016-05-15 13:54:37 +08:00
@qcloud dnssec 后,查询速度奇慢~
qcloud
2016-05-15 14:24:59 +08:00
@samueldeng 我去~~~ 前几天 DNS 服务商推出了 DNSSEC ,我还迫不及待的测试,难道真像你说的很慢吗 。。。。
jimzhong
2016-05-15 16:52:14 +08:00
@jamiesun 目前用户数量还不多,每秒 20 个查询轻松应对。 CPU 占用很低。
samueldeng
2016-05-15 23:37:39 +08:00
@qcloud 喔,是这样的,我的上游不支持 dnssec ,于是就递归相上查询,导致速度奇慢。坐标国内。不知道歪国的提供商如何?
hosiet
2016-05-17 09:26:38 +08:00
bclerdx
2016-06-23 15:40:05 +08:00
@hosiet 为什么?
hosiet
2016-06-23 19:21:23 +08:00
@bclerdx ISC 网站上 bind 10 项目主页写了,直接读一读吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/278567

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX