gns配置失效本质是命名服务链断裂,需依次验证:gns进程监听私网ip而非127.0.0.1;dhcp转发通路(udp 67)畅通;dns forwarders可达且解析正常;gns vip与scan vip无ip冲突;/etc/hosts中存在gns vip静态解析。

GNS配置失效不是“配错了DNS”,而是整个命名服务链断了——GNS本身不解析,只转发;转发不出去,SCAN VIP就分不到、监听器就绑不上、客户端连都连不进。
确认GNS进程是否真在监听私网IP
GNS默认监听1535端口,但必须绑定到专用私网卡(如10.10.10.115),不能是127.0.0.1或*:1535。否则客户端请求直接被丢弃,srvctl和crsctl命令会静默失败。
- 运行
crsctl stat res -t | grep gns:状态必须为ONLINE;若为OFFLINE或INTERMEDIATE,先别改配置,查日志:$GRID_HOME/log/<hostname>/gnsd/gnsd.log</hostname>,搜"Failed to bind"或"No suitable interface" - 执行
netstat -tlnp | grep :1535:输出中必须含实际私网IP(如10.10.10.115:1535),不含127.0.0.1:1535或*:1535 - 若
gnsctl status返回UNKNOWN,而crsctl stat res -t | grep gns显示ONLINE,说明OCR里GNS资源注册异常,不是进程问题
验证DHCP转发是否通(GNS不分配IP,只转发DISCOVER)
GNS收到DHCP发现包后原样转发给后端DHCP服务器。如果DHCP没开、ACL拦截、作用域耗尽或防火墙挡了UDP 67,GNS就会返回NXDOMAIN或超时,SCAN VIP无法动态分配。
- 在RAC节点执行探测:
echo -n -e "\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | nc -u -w1 <dhcp-server-ip> 67</dhcp-server-ip> - 检查DHCP服务器是否监听UDP 67,且允许来自GNS所在子网(通常是私网段,如
10.10.10.0/24)的请求 - 查防火墙:
iptables -L -n | grep 67或firewall-cmd --list-ports | grep 67,确保UDP 67对GNS主机开放
检查DNS转发链路是否卡在上游
GNS对非集群域名(如www.example.com)会转发给FORWARDERS指定的DNS;但集群内域名(如rac-scan)依赖OCR缓存或自身处理。转发链路不通,会导致GNS看似正常,实则无法解析SCAN名。
- 查看
$GRID_HOME/network/admin/gns.ora,确认FORWARDERS指向可用DNS(如192.168.31.1),且该DNS能被grid用户访问:su - grid -c "nslookup www.baidu.com 192.168.31.1" - 手动验证转发:
nslookup rac-scan $(cat $GRID_HOME/network/admin/gns.ora | grep FORWARDERS | awk '{print $3}'),应返回SCAN VIP - 若本地DNS不可靠,可临时改成公网DNS(如
8.8.8.8)最小化验证,排除上游干扰
排查GNS VIP与SCAN VIP是否冲突
SCAN VIP由GNS动态分配,GNS VIP是GNS服务自身监听地址,两者不能复用同一个IP。否则srvctl add scan会拒绝注册,或SCAN名称解析随机返回GNS自身地址,导致客户端连接被重定向到GNS监听器而非SCAN监听器。
- GNS VIP必须独立于所有SCAN VIP、节点VIP、public IP,且不能在DHCP范围内——GNS不支持从DHCP获取自身地址
- SCAN VIP数量固定为3个(即使只有2个节点),由GNS按CRS状态分配;但节点间心跳中断而CRS未降级时,SCAN VIP可能“卡”在故障节点上
- 验证方式:
nslookup scan-cluster.example.com查三次,应返回三个不同IP;再用ping -c1测试每个IP是否响应,不响应的说明对应节点上的SCAN VIP实际未激活
最常被忽略的一点:GNS VIP必须在/etc/hosts中有静态解析(哪怕只用于初始启动),否则gnsctl start会静默失败报“GNS is not running”——这不是服务没启,是grid用户根本找不到它。











