SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution

一、起因与原因分析过程

  前端同学告诉我,说服务器崩了。

  请求数据接口,接口有响应,但报的json提示指向:数据库异常错误。

  遂登陆云主机查看日志,核心记录显示如下:

2018-11-09 22:15:53.824 ERROR 26088 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Caused by: java.net.UnknownHostException: abc.cn: Temporary failure in name resolution【名称解析的临时失败】
	at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_151]
	at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_151]
	at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_151]
	at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_151]
	at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_151]
	at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_151]
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
	... 67 common frames omitted

2018-11-09 22:15:53.825  WARN 26088 --- [           main] o.h.e.j.e.i.JdbcEnvironmentInitiator     : HHH000342: Could not obtain connection to query metadata : Communications link failure

Caused by: java.net.UnknownHostException: abc.cn
	at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[na:1.8.0_151]
	at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_151]
	at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_151]
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ~[mysql-connector-java-5.1.47.jar!/:5.1.47]
	... 66 common frames omitted

2018-11-09 22:15:56.741  WARN 26088 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08S01
2018-11-09 22:15:56.742 ERROR 26088 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2018-11-09 22:15:56.750  WARN 26088 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory‘ defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
2018-11-09 22:15:56.764  INFO 26088 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-11-09 22:15:56.877  INFO 26088 --- [           main] ConditionEvaluationReportLoggingListener :

  第一次遇到这问题,有点懵,直接把所有的SpringBoot和tomcat相关进程kill了;重启SpringBoot项目(jar包);查看日志,项目启动失败。Excuse Me?

  搜索该问题UnknownHostException: abc.cn: Temporary failure in name resolution,事情有了转机:怀疑确实是域名解析出了问题,DNS失败。

  做出假(huai)设(yi):我的云主机所属云服务器提供商的服务器集群所处内网不能直接访问/解析外网的域名,导致DNS失败。

  验证假设:

    本地电脑Ping域名:ping abc.com ,成功响应IP地址 x.y.z.q【外网解析域名正常】

    在云主机Ping域名abc.com,未成功响应,如下图。【云主机内网解析域名失败】

    验证成功。

  那么,如何解决: 云主机在云服务器提供商的内部不能解析域名(abc.com),从而DNS解析失败,导致不能连接数据库所致 的问题?

二、解决方案

  原理:类似于平时我们在本地电脑fq或者破解某些软件的验证关时,更改windows的host文件,让主机的网络请求DNS优先解析本地的[IP 域名]解析配置。

  扩展子问题1:DNS概念

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

  扩展子问题2:DNS整套解析系统的原理?(忘了?就请去复习)

  解决方法:

    方法1:新增配置云主机

        step1.HOST 本地DNS解析【仅此方法,已被亲测有效】  

vi /etc/hosts

        step2.添加<IP,域名>解析。例如: 

223.231.234.33 www.baidu.com

    方法2:  网卡配置文件DNS服务地址【特点:重启服务器不会被抹掉配置】

vi /etc/sysconfig/network-scripts/ifcfg-eth0

        添加DNS服务器地址。例如:

DSN1=‘114.114.114.114‘

       【备注】免费公共的DNS有:(详见:DNS服务器地址

Google DNS 8.8.8.8,8.8.4.4
Public DNS+ 119.29.29.29
阿里 DNS 223.6.6.6,223.5.5.5
百度 DNS 180.76.76.76
360 DNS 电信:101.226.4.6 联通:123.125.81.6 移动:101.226.4.6 铁通:101.226.4.6
OpenDNS 208.67.220.220
114DNS 114.114.114.114,114.114.115.115 (有广告插入嫌疑)

    方法3:系统默认DNS配置【特点:重启服务器会被抹掉配置,非永久性】

vi /etc/resolv.conf

      添加DNS服务器解析规则。例如:

nameserver 114.114.114.114

    【小结】系统解析的优先级:方法1>方法2>方法3

    方法4:项目不使用域名,直接使用IP地址【特点:治标不治本,不一定适用所有工程情况】

三、结果分析

1、Spring Boot的初始化肯定是先于Tomcat的,所以应该是Spring Boot的初始化过程中出现了阻塞导致应用启动过慢的问题。

2、Caused by: java.net.UnknownHostException: abc.cn:未知域名异常

3、Linux nano操作

    保存 :Ctrl+O  

    退出:Ctrl+X

4、疑问:为什么之前项目部署就可以,且没有出问题呢?根本原因说明还没找到

四、参考文献

  [1] LINUX DNS解析的3种修改方法~ 【推荐】

  [2] DNS服务器地址 【推荐】

  [3] Temporary failure in name resolution - DNS引发的问题和思考 【推荐:解题思路清晰】

  [4] /etc/resolv.conf文件详解

  [5] nano编辑器使用教程

原文地址:https://www.cnblogs.com/johnnyzen/p/9937745.html

时间: 2024-08-04 22:57:13

SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution的相关文章

腾讯云服务器 - 安装redis3.2.9以及集群

redis大家都知道,服务器上必不可少的,那么在生产环境下安装的步骤和虚拟机里也是差不多的 官网上最新稳定版是3.2.9,而4.0的更新比较大,但是比几个还是beta版嘛 下载并且上传压缩包至云服务器,解压缩: tar -zxvf redis-3.2.9.tar.gz 安装gcc编译环境,如果已经安装过了,那么就是 nothing to do yum install gcc-c++ 进入redis目录并且编译: 至此redis3.2.9安装成功,我们来启动一下,这个是前台启动,启动后你不能做任何

阿里云服务器Linux CentOS安装配置(八)nginx安装、配置、域名绑定

阿里云服务器Linux CentOS安装配置(八)nginx安装.配置.域名绑定 1.安装nginx yum -y install nginx 2.启动nginx service nginx start 3.访问(nginx默认是80端口) curl 127.0.0.1 4.域名子绑定 编辑文件/etc/nginx/conf.d/default.conf,在底部加入下面代码,完成前几章所述4个端口的子域名绑定 server{ listen 80; server_name tomcat.bingz

三台服务器上离线安装redis哨兵集群,一主二从三哨兵

三台服务器上离线安装redis哨兵集群,一主二从三哨兵 系统安装好gcc环境,(不然编译redis会报错).依旧不知道怎么离线安装gcc环境的可查看CentOS下离线安装gcc环境,图文详细 下载 点击官网地址下载Linux版的redis http://download.redis.io/releases/redis-5.0.4.tar.gz 上传 put D:\AppStore\redis\redis-5.0.4.tar.gz /root 安装 tar xzf redis-5.0.4.tar.

springboot项目部署云服务器

java -jar demo-0.0.1-SNAPSHOT.jar 常驻进程 nohup java -jar demo-0.0.1-SNAPSHOT.jar & nohup的意思不挂服务,常驻的意思,除非云服务器重启,那就没法了:最后一个&表示执行命令后要生成日志文件nohup.out 这样就不担心关闭xshell,只要云服务器不关闭,总能访问的. 查看进程 ps aux|grep getCimiss-surf.jar 将会看到此jar的进程信息 data 5796 0.0 0.0 112

U2000解决备份:服务器不可达、FTP/TFTP/SFTP IP地址与网管地址不一致

只需要将一下几点设置到位这些问题基本解决: 设置->网元软件管理->FTP设置 如果你的U2000服务器和OLT都在一个内网,那么就IP1和IP2就都输入U2000服务器的内网IP,否则按上图填写,IP2设置成公网IP. 原文地址:https://www.cnblogs.com/yunpai/p/12239554.html

用阿里云三个ECS服务器搭建一个小模拟Hadoop集群(三个不同账号的阿里云,相同区域或不同区域)步骤整理

检查hosts和网卡配置 把三台小服务器先做内网互通 内网互通参照阿里云安全通道配置 1.准备至少三个虚拟机 2.相互通信,生成密钥并发送 生成密钥(ssh-keygen -t rsa) 发送密钥ssh-copy-id [email protected] (需要先修改.etc\hosts 文件) 登录测试 ssh [email protected] 3.安装JDK和Hadoop jdk安装 上传jdk到vm1并解压(tar -zvxf jdk-7u67-linux-x64.tar.gz) 配置环

如何在阿里云上构建一个合适的Kubernetes集群

摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集群的优势. 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集

阿里云ECS部署Redis主备哨兵集群遇到的问题

一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www.cnblogs.com/ibethfy/p/9965902.html 二.遇到的问题 1.bind公网IP地址时,会出现异常:[Cannot assign requested address] 首先理解bind的含义:https://blog.csdn.net/cw_hello1/article/

基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡

概述: 最近对K8S非常感兴趣,同时对容器的管理等方面非常出色,是一款非常开源,强大的容器管理方案,最后经过1个月的本地实验,最终决定在腾讯云平台搭建属于我们的K8S集群管理平台~ 采购之后已经在本地部署了不下百次模拟线上生成环境,尽可能还原本地搭建过程,于是修改了安装脚本以及镜像文件. 基础环境 主机 地址 Type k8s-host1 192.168.100.121 master node k8s-host2 192.168.100.122 master node k8s-host3 192