给好几个客户做了 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 转发也立即恢复了,但是预期的多个转发备份功能失效了。本来客户同时有两个转发服务器,但出口断了,全部都是一样的问题,
那么如何更好的解决这个问题,避免全网投诉。
1
jamiesun OP 我现在想的是备机的网络隔离,但是某些转发 DNS 是专用的,只能通过某些出口访问,不使用的话就失去加速效果。
|
2
bobopu 2016-05-14 11:15:32 +08:00 via iPhone
以前好像也遇到过这问题,当时不知道是 bind 超时算法问题,后来把转发的第二个 ip 指向内网后好了。试下 unbound 有没有此问题?
|
3
jamiesun OP @bobopu 谢谢,我现在想明白了不少,给客户做的这个服务确实做得不够周到,覆盖几万用户的服务,后端对 DNS 转发服务是必须做一个可用性检测的,而不能仅仅依赖 BIND 本身的算法机制。
我现在计划做一个定时检测模块,对所有转发服务地址定时检测可用性,也是通过域名解析实现,一旦发现某个 DNS 转发服务地址不可用,立即从全局配置中剔除(并用其他可用公共 DNS 替换),标记状态不可用,并刷新配置;当检测到服务恢复时,再重新配置并刷新,标记状态可用。 另外再做一些关键域名的解析检测,用个算法来判断当前 DNS 服务器的综合健康指数。 |
4
bobopu 2016-05-14 12:46:43 +08:00
@jamiesun 厉害。有些公共 DNS 是会限制解析频率,就我所知阿里 DNS 就存在解析限制。另外,觉得这几个新版本的 bind 增加了不少东西,但中文版的 bind 手册又太旧,没这方面新增内容的中文资料也是挺困扰。
|
5
jimzhong 2016-05-14 13:45:14 +08:00
曾经做过 DNS 转发,觉得 BIND 配置太麻烦,就用 Python 写了一个,可以用 dnslib ,自己写 LRUCache 。一个上游服务器 2s 内不回复就转发给下一个。
|
6
samueldeng 2016-05-14 15:11:39 +08:00
我记得我之前弄 bind9 的时候,默认是配置了 dnssec ,那玩意儿开启后,速度简直不能忍。
|
7
qcloud 2016-05-15 09:49:58 +08:00
@samueldeng 开启 dnssec 怎么了?
|
8
jamiesun OP @jimzhong python 做的性能怎么样?
bind 性能还是不错的,我还是用 bind9 , bind10 早出来了,有很多模块使用 python 开发,但是这玩意是真复杂,没有那么多精力去研究。 我是在 bind9 上封装了一层管理界面,配置还是文件配置。有个 isc 的配置解析模块。 |
9
samueldeng 2016-05-15 13:54:37 +08:00
@qcloud dnssec 后,查询速度奇慢~
|
10
qcloud 2016-05-15 14:24:59 +08:00
@samueldeng 我去~~~ 前几天 DNS 服务商推出了 DNSSEC ,我还迫不及待的测试,难道真像你说的很慢吗 。。。。
|
12
samueldeng 2016-05-15 23:37:39 +08:00
@qcloud 喔,是这样的,我的上游不支持 dnssec ,于是就递归相上查询,导致速度奇慢。坐标国内。不知道歪国的提供商如何?
|
13
hosiet 2016-05-17 09:26:38 +08:00 via Android
|