- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 5:详解 BIND 视图技术及优化
上一个实践使用多个 A 记录的方式,实现了最基本的负载均衡设置。在中国目前的网络环境下,多个运营商并存,运营商之间存在一定的互联互通问题。如果把来自不同运营商或者地域的所有用户通过简单的 A 记录分配到同一个机房,那么就存在部分用户访问延时大或者丢包的问题。
BIND 视图工作原理
那么这个问题怎么解决呢?在 BIND 里面提供了视图(DNS View)技术来解决这个问题。DNS 视图技术,就是对同一个资源记录根据 DNS 的请求来源 IP 地址不同分配给解析器不同的解析结果。也就是说,可以使用 BIND 视图技术实现以下功能。
- 对于来自山东省的中国电信的 DNS 请求,可以把用户引导到部署在山东省中国电信机房的服务器上。
- 对于无法匹配到某个具体运营商或者国外的用户,可以把用户引导到指定的一组默认服务器上。
所有以上的功能,都是为了实现用户的就近访问,也就是让用户访问到对他来说网络质量最好的服务器上。
下面来看一个具体的配置。
首先用 acl/SD_CTC 来列举需要匹配的来源 IP:
acl "SD_CTC" { 58.56.0.0/15; 58.58.0.0/16; 58.59.0.0/17; 60.235.0.0/16; 122.4.0.0/14; 123.168.0.0/14; 222.173.0.0/16; 222.174.0.0/15; };
然后再用 view/SD_CTC 来调用 acl/SD_CTC 的内容:
view "view_SD_CTC" { match-clients { #使用 match-clients 指令,指定匹配来自这些 IP 的用户 SD_CTC; #引用 acl/SD_CTC 的内容 }; include "public.def"; #指定这些 IP 来源的用户,使用如下的 zone 文件提供服务 zone "via.woyodns.com" { type master; file "zone/via.any.zone"; }; zone "web.woyodns.com" { type master; file "zone/web.any.zone"; }; zone "cdn.woyodns.com" { type master; file "zone/cdn.hbjmCTC.zone"; }; };
最后再用 named.conf 来使其关联起来生效:
include "acl/SD_CTC"; include "acl/SD_CNC"; include "acl/SD_OTHER"; include "view/SD_CTC"; include "view/SD_CNC"; include "view/SD_OTHER ";
总结起来就是使用 acl 指令圈定一批来源 IP 地址,使用 view 的 match-clients 匹配该 acl,为其分配 zone 文件用于解析,使用 named.conf 加载 acl 和 view 使其生效。
BIND 视图优化技巧
读者可以看到,这里面核心的内容是 acl/SD_CTC 里面的 IP 地址,也就是 IP 库。这些数据哪来的呢?
可以使用如下方法:
- 使用纯真 IP 数据库进行分析。
- 使用 BIND 自带的 log 进行分析。分析日志的可行性主要是基于目前国内的开放 DNS 服务器,数量不多,通过对 log 的多次分析即可逐步精确地匹配。
使用如下指令配置后,BIND 的请求数据会记录在/var/query.log:
channel query_log { file "/var/query.log" versions 5 size 20m; severity info; print-time yes; print-category yes; }; category queries{ query_log; };
其中一条日志如下:
04-Jan-2016 11:35:29.478 queries: client 210.51.28.230#52147 (www99.xufeng.info): query: www99.xufeng.info IN A +E (192.243.119.145)
其中 210.51.28.230 是某台开放域名服务器的地址,通过使用 http://www.cnnic.cn/ 即可查询出该 IP 地址的运营商和地区等情况,然后将相关信息添加到对应的 acl 中。
注意
BIND 视图技术所依据的来源 IP 地址,并不是访问网站等的终端用户的来源地址,而是这些终端用户配置的本地 DNS 服务器。如果山东省联通用户配置了上海市电信提供的 DNS 服务器,则可能会被调度到电信站点,出现偏差。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论