通过http的方式调用了其他引擎的数据。调用数据出现问题。出现问题时,现象如下:
[hailong.xhl@s006130 logs]$curl "http://demo.bo56.com:2088/bin/search?append=k" [hailong.xhl@s006130 logs]$curl: (7) couldn't connect to host
继续跟踪,发现连接的是一个实体机ip,而非vip。
connect(3, {sa_family=AF_INET, sin_port=htons(2088), sin_addr=inet_addr("10.234.12.108")}, 16) = -1 EINPROGRESS (Operation now in progress) poll([{fd=3, events=POLLOUT}], 1, 300000) = 1 ([{fd=3, revents=POLLERR|POLLHUP}]) getsockopt(3, SOL_SOCKET, SO_ERROR, [8589934703], [4]) = 0 close(3)
这让我想起了之前安装的一个域名解析软件。查看了日志,发现它的确把域名解析到了很多实体机ip上。
为什么解析到实体机ip后就不能正常调用服务了呢?和对方pe沟通后得知,实体机监听的是2087端口,而vip监听的是2088端口。因此,在向实体机的2088端口发起连接请求时失败。
另外还发现一个问题,就是同时安装软件的几台服务器,部分能正常解析到vip,部分解析到了实体机ip。开始很纳闷,后来发现是nscd搞的鬼。使用以下命令清除dns缓存后,所有的机器都解析到了实体机ip了。
sudo /usr/sbin/nscd -i hosts
由于软件解析的ip有问题,暂时关闭了软件。
技术交流
原文链接:一次DNS域名解析问题排查记录,转载请注明来源!