Scale PHP-DNS调优

原创
2015/02/20 22:52
阅读数 153

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前缀,会根据客户位置选择“最接近”和“最好”的服务器,可以把它看成是在网络层负载均衡。




 



    

    

    

    

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部
返回顶部
顶部