1. DNS服务器涉及到许多地理上分散的服务器和任播网络
2. 绝大多数大型站点都使用第三方DNS服务商
• Reddit: Akamai10
• Twitter: Dynect11
• Amazon: UltraDNS12 and Dynect • LinkedIn: UltraDNS
3. DNS服务商选择
• 服务器的地理分布
• 选播网络
• 大范围的ip段 (处理网络错误)
4. 使用DNS做负载均衡
传统的DNS负载均衡为域名创建多条A记录(每条对应一个主机),并把所有的记录返回给客户端,让客户决定使用哪个IP地址,但一般的客户端只会使用第一个IP地址来访问网站。
解决方案:
1)使用轮询方式,但轮询并不会判断服务器状态,只会减少出错机率。
2)使用智能DNS服务商,判断服务器状态。即使从DNS池中移除服务器的IP, 受TTL影响错误的IP仍然会在客户端缓存一段时间。
5. DNS解析
最后一个,最容易被忽视的部分,DNS扩展的一部分,即内部的域名解析。
举个例子:PHP应用程序调用外部API并解析该API主机的域名。
存在的问题:
1)DNS解析受第三方DNS服务商影响(速度、网络可用)。/etc/resolv.conf中允许设置的最小超时时间为1S, 默认为5S。
2)大部分LINUX发行版本中并不带有DNS缓存功能。每次域名解析都需要请求域名解析服务器。
解析方案:
搭建DNS缓存
6. DNS缓存工具
1)nscd(nameserver cache deamon),只能运行在本地主机,不能提供网络服务。易安装、零配置。
2)dnsmasq,可以为网络内的主机提供DNS缓存服务,也可以做为内部网络DNS服务器(配置主机名/网址《=》IP映射关系)。
(1)安装
yum install dnsmasq.x86_64
(2) 配置
vi /etc/dnsmasq.conf
cache-size=1000 #DNS缓存大小
listen-address=198.51.100.10 #监听地址
local-ttl=60 #本地主机DNS缓存失效时间,/etc/hosts 或 /etc/dnsmasq.hosts
no-dhcp-interface=eth0 #禁用除DNS服务外的其他服务(如DHCP, TFTP)
no-dhcp-interface=eth1
addn-hosts=/etc/dnsmasq.hosts #附加本地hosts文件,同/etc/hosts
#其他主机配置
vi /etc/resolv.conf
nanameserver 198.51.100.10
options rotate timeout:1 #轮询使用DNS服务器,如果查询DNS服务超过一秒则使用下一台DNS服务。(范1-30, 默认5
查看运行状态
tcpdump -nnp dst port 53
-nn选项确保tcpdump本身不解析IP地址或协议的名称。
-p选项禁用混杂模式,最大限度地减少不利影响正在运行的服务。
dst port 53只想看发送DNS的请求
PS:
选播网络
选播是一种网络技术,它允许多个路由器使用同一IP前缀,会根据客户位置选择“最接近”和“最好”的服务器,可以把它看成是在网络层负载均衡。