共计 910 个字符,预计需要花费 3 分钟才能阅读完成。
项目中通过 http 的方式调用了其他引擎的数据。昨天同事反应,调用数据出现问题。出现问题时,现象如下:
[linuxidc.com@linuxidc logs]$curl “http://demo.linuxidc.net:2088/bin/search?append=k”
[linuxidc.com@linuxidc 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)
这让我想起了之前安装的 vipserver。vipserver 是阿里自己开发的一个 dns 域名解析软件。查看了 vipserver 的日志,发现它的确把域名解析到了很多实体机 ip 上。
为什么解析到实体机 ip 后就不能正常调用服务了呢?和对方 pe 沟通后得知,实体机监听的是 2087 端口,而 vip 监听的是 2088 端口。因此,在向实体机的 2088 端口发起连接请求时失败。
另外还发现一个问题,就是同时安装 vipserver 的几台服务器,部分能正常解析到 vip,部分解析到了实体机 ip。开始很纳闷,后来发现是 nscd 搞的鬼。使用以下命令清除 dns 缓存后,所有的机器都解析到了实体机 ip 了。
sudo /usr/sbin/nscd -i hosts
由于 vipserver 解析的 ip 有问题,暂时关闭了 vipserver。待对方 pe 完成 vipserver 设置后,再启用。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-07/133181.htm