以下一个需要修改的 ip 对于hosts,发现不生效
[root@app]# cat /etc/hosts |grep app_db.56.com
10.11.81.13 app_db.56.com
[root@app]# ping app_db.56.com
PING uevent_db.56.com (120.31.133.142) 56(84) bytes of data.
120.31.133.142 是旧的,相应的 hosts 文件对应 ip 已修改,
10.11.81.13 app_db.56.com app_db
但ping 的时候内核仍然使用旧的ip
[root@app]# ping app_db PING app_db.56.com (10.11.81.13) 56(84) bytes of data. 64 bytes from SHNHDX81-13.opi.com (10.11.81.13): icmp_seq=1 ttl=60 time=41.3 ms 64 bytes from SHNHDX81-13.opi.com (10.11.81.13): icmp_seq=2 ttl=60 time=31.2 ms [root@app]# ping app_db.56.com PING app_db.56.com (10.11.81.13) 56(84) bytes of data. 64 bytes from SHNHDX81-13.opi.com (10.11.81.13): icmp_seq=1 ttl=60 time=31.9 ms 64 bytes from SHNHDX81-13.opi.com (10.11.81.13): icmp_seq=2 ttl=60 time=31.2 ms
注意到ping 的 那一行和 ttl 返回的行不一样。
检查host.conf 文件
[root@ZHONGSH26-131-DX-DB etc]# vim /etc/host.conf multi on
使用的是 multi on ,将其修改为
order hosts,bind
还是没神马效果,指向的还是旧的 hostname :
[root@app]# ping app2.56.com PING app2.56.com (10.11.81.123) 56(84) bytes of data. ^C --- app2.56.com ping statistics --- 24 packets transmitted, 0 received, 100% packet loss, time 23447ms [root@app]# ping 2.56.com PING app2.56.com (10.11.81.13) 56(84) bytes of data. 64 bytes from app2.56.com (10.11.81.13): icmp_seq=1 ttl=60 time=31.3 ms 64 bytes from app2.56.com (10.11.81.13): icmp_seq=2 ttl=60 time=31.2 ms ^C --- app2.56.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1736ms rtt min/avg/max/mdev = 31.250/31.292/31.335/0.181 ms [root@ZHONGSH26-131-DX-DB etc]# cat /etc/hosts |grep app2 10.11.81.14 app2.56.com 2.56.com
怀疑是系统内核的问题,但是我任意加一个新的 ip 和对应的 hosts,是没有问题。就是将其修改过后就是不生效。
混了这几年,还是有盲区啊,这情况还是头次遇到,得想办法查出来。通过strace 来跟踪一下到底是调用了哪些文件。
[root@app]# strace -f -F -o /root/ping.txt /bin/ping app_db.56.com
预计发了两次数据包之后,我 Ctrl C 中断。看了一下那个 ping.txt 文件,果然有发现:
21292 socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4 21292 connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = 0 21292 sendto(4, "\2\0\0\0\r\0\0\0\6\0\0\0hosts\0", 18, MSG_NOSIGNAL, NULL, 0) = 18
为什么要用这个socket 呢? google 之,发现是一个dns 本地缓存服务。继续跟进,ps 发现是起来的:
[root@app]# ps -ef |grep nscd nscd 3027 1 0 17:29 ? 00:00:00 /usr/sbin/nscd
配置文件就是 /etc/nscd.conf ,我看了一下,主要有这么一堆:
enable-cache passwd yes positive-time-to-live passwd 600 negative-time-to-live passwd 20 suggested-size passwd 211 check-files passwd yes persistent passwd yes shared passwd yes max-db-size passwd 33554432 auto-propagate passwd yes enable-cache group yes positive-time-to-live group 3600 negative-time-to-live group 60 suggested-size group 211 check-files group yes persistent group yes shared group yes max-db-size group 33554432 auto-propagate group yes enable-cache hosts yes positive-time-to-live hosts 3600 negative-time-to-live hosts 20 suggested-size hosts 211 check-files hosts yes persistent hosts yes shared hosts yes max-db-size hosts 33554432 enable-cache services yes positive-time-to-live services 28800 negative-time-to-live services 20 suggested-size services 211 check-files services yes persistent services yes shared services yes max-db-size services 33554432
我看是貌似全部加上了,这个服务对于我们全部基于hosts 的应用来讲,相当的无用,反而会带来一些
麻烦。顺便也打算研究一下这个服务。我先是把注释的部分拿掉,看hosts 修改是否能够及时生效:
# ping app_db.56.com PING app_db.56.com (10.11.81.14) 56(84) bytes of data. 64 bytes from app_db.56.com (10.11.81.14): icmp_seq=1 ttl=60 time=31.3 ms
再改一下,生效:
# ping app_db.56.com PING app_db.56.com (10.11.81.13) 56(84) bytes of data. 64 bytes from app_db.56.com (10.11.81.13): icmp_seq=1 ttl=60 time=31.3 ms 64 bytes from app_db.56.com (10.11.81.13): icmp_seq=2 ttl=60 time=31.4 ms
附一个网上的说明:
dns缓存在服务器上的作用
在需要通过域名与外界进行数据交互的时候,dns缓存就派上用场了,它可以减少域名解析的时间,提高效率.例如以下情况:
使用爬虫采集网络上的页面数据,
使用auth2.0协议从其他平台(如微博或QQ)获取用户数据,
使用第三方支付接口,
使用短信通道下发短信等.
使用爬虫采集网络上的页面数据,
使用auth2.0协议从其他平台(如微博或QQ)获取用户数据,
使用第三方支付接口,
使用短信通道下发短信等.
dns缓存到底能提升多少性能呢?
首先要看网络和dns服务器的能力,dns解析越慢,dns缓存的优势就越大.比如我们在北京用的dns服务器202.106.0.20和google的dns服务器8.8.8.8速度会差不少.
如果dns服务器比较稳定,那它对效率的影响就是一个常数.这个常数有多大呢?
我简单试了一下.在局域网内进行压力测试,压一个nginx下的静态页面,使用202.106.0.20这个dns服务器,不用dns缓存.平均一分钟可以访问27万次.压一个简单的php页面,平均一分钟可以访问22万次.加上nscd服务后,静态页面平均一分钟可以访问120万次,要快4倍多.php页面平均一分钟可以访问50万次,快一倍多.
如果是做搜索引擎或是一些代理服务类的项目,比如短信通道,数据推送服务,这个性能提升还是比较可观的.但在一般的项目中,一台服务器每分钟发22万次请求的情况是很少见的,所以这个性能提升也微呼其微.
但在追求极限的道路上,每一小步都至关重要噢~
如果dns服务器比较稳定,那它对效率的影响就是一个常数.这个常数有多大呢?
我简单试了一下.在局域网内进行压力测试,压一个nginx下的静态页面,使用202.106.0.20这个dns服务器,不用dns缓存.平均一分钟可以访问27万次.压一个简单的php页面,平均一分钟可以访问22万次.加上nscd服务后,静态页面平均一分钟可以访问120万次,要快4倍多.php页面平均一分钟可以访问50万次,快一倍多.
如果是做搜索引擎或是一些代理服务类的项目,比如短信通道,数据推送服务,这个性能提升还是比较可观的.但在一般的项目中,一台服务器每分钟发22万次请求的情况是很少见的,所以这个性能提升也微呼其微.
但在追求极限的道路上,每一小步都至关重要噢~
没有评论:
发表评论