Linux内网环境DNS修改域名指向,JAVA应用程序能否实时切换的问题总结

公司内网环境中许多调用资源(数据库、web接口等)都是通过内网DNS服务来进行域名-IP的映射。

但经常出现DNS映射修改完毕后,应用中连接的资源迟迟没有变更。

以前一直笼统的认为是linux的dns缓存导致,今天做了一次完整的分析,结果如下:

1、Linux系统的本地DNS的缓存

CentOS系统本身并不包含DNS的缓存机制,除非安装并启动了nscd服务(name server cache daemon)。

nscd服务启动后会默认为本地的所有dns解析做一层缓存,过期时间默认为3600秒,重启应用程序也不会重置nscd的缓存,除非用/etc/init.d/nscd reload,强制刷新nscd缓存。

开启nscd服务可以大大降低应用程序请求DNS服务的频率,同时一定程度上可以对DNS服务的故障有一定容错。但缺点非常明显,DNS服务的映射改变无法实时的被应用程序感知,每次修改映射后都必须在所有客户端机器reload nscd。

以上结论通过DNS服务日志得到验证。

2、JVM虚拟机的本地DNS缓存

实现在java.net.InetAddress的一个简单的DNS缓存机制,以前被误认为是Linux的DNS缓存,jdk6/7中默认为缓存30秒。

缓存范围为JVM虚拟机进程,也就是说同一个JVM进程中,30秒内只会为一个域名请求DNS服务器一次,可以大大降低应用程序对DNS解析的网络损耗和对DNS服务产生的压力。

以上结论通过JAVA测试程序和DNS服务日志得到验证。

3、长连接的处理(数据库链接、redis连接、zookeeper、activeMQ连接等)

根据1、2两点结论,当内网DNS服务某一个域名映射修改后,应用程序最多在30秒内就会响应该变化。但实际确不是如此,原因就是很多资源是“长连接”方式。

比如数据库连接池这种就是典型的长连接,为了保证连接池效率,我们也不能把单个连接的有效期设的太短。这就导致了这类长连接无法快速响应DNS服务器的映射改变。

解决办法只有一个:DNS服务器的映射变更后,需要对应用程序做重启,以便让长连接按照新的DNS映射来进行建立。

以上结论通过JAVA测试程序和DNS服务日志得到验证。

饶了一圈,最后还是回到原点:

为了保证应用程序里的这些长连接资源能够及时响应DNS映射的改变,目前还是得靠重启应用来解决。

时间: 2024-11-08 18:56:58

Linux内网环境DNS修改域名指向,JAVA应用程序能否实时切换的问题总结的相关文章

linux内网机器访问外网代理设置

1.检查机器 在操作中发现访问外网的机器本身不能使用yum 安装软件,故需要配置yum安装源.如果可以的,这步可忽略. [[email protected] test]# lsb_release -a LSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.

如何在离线或内网环境中设置Rancher 2.0

有时候,我们无法使用像GKE或AKE这样的托管服务,甚至处于离线或与外网隔离的状态,而无法直接访问互联网.然而,即使在这种情况下,仍然是有方法使用Rancher管理集群的. 本文中,我们将向你介绍如何在离线或内网环境中运行Rancher 2.0. 私有镜像库 因为所有与Rancher相关的服务都在容器中运行,因此首先你需要的是在环境中存储容器.在本文的示例中,我们将使用Docker Registry(Docker镜像仓库).如果你已经有了镜像仓库,可以跳过这些步骤. 注意:在Rancher 2.

linux 内网时间同步配置

在工作中,内网环境机器的时间会有所差异,在某些测试环境下需要一毫秒都不允许出现误差,但又不想同步外网时间,那我们可以选择一台机器作为时间服务器来供其他机器进行时间同步,例如每隔1分钟同步一次时间. 一.环境 系统:Centos 6.5 ntp_client IP:192.168.0.117 ntp_server IP:192.168.0.124 二.安装ntp服务 [email protected] ~]# yum install ntp -y [[email protected] ~]# ch

用VMware Workstation 11的LAN区段功能构造内网环境

原来用host only模式构造内网环境,只是虚拟机访问不了外网,但其实主机还是能连上这个网段,不能很好的模拟真实环境. 后来有人和我说了一种方法,把这个复选框钩去掉,就可以让主机访问不了这个网段 但是这个方法有个缺点,当需要内网划分多个子网时,就要创建多个host only的虚拟网卡,就要在系统里生成多个虚拟网卡,老版本的VMware总共支持10个虚拟网卡,新版本VMware11支持20个,扣除VMnet0.VMnet1.VMnet8,就分别只能构造7个或17个自定义网络 而采用LAN区段方式

内网环境上部署k8s+docker集群:集群ftp的yum源配置

接触docker已经有一年了,想把做的时候的一些知识分享给大家. 因为公司机房是内网环境无法连接外网,所以这里所有的部署都是基于内网环境进行的. 首先,需要通过ftp服务制作本地的yum源,可以从http://mirrors.163.com/centos/ 上找到对应版本的centos系统,下载该系统的base和extra包到本地. 将下载完成的文件放到服务器的/var/ftp/pub/media/x86_64目录下./var/ftp为ftp服务器的根目录.这里请谨记,ftp一般在系统安装的时候

内网环境使用ansible安装software 需要外网时,如何绑定代理呢

内网环境使用ansible安装software 需要外网时,如何绑定代理呢? 方法一: 在ansible 的脚本里,yum install 的地方,添加语句: environment: https_proxy: "http://hubproxy.sh.cn.ao.ericsson.se:8080" 方法二: 在yum 的配置文件/etc/yum.conf中加入下面几句. proxy=http://hubproxy.sh.cn.ao.ericsson.se:8080" 原文地址

内网简易DNS系统

内网DNS系统 功能:解析内网域名和DNS-Cache 软件:dnsmasq 一.安装yum  -y install dnsmasq二.服务器配置1.vi /etc/resolv.conf 使本地查询域名时使用dnsmasq服务器nameserver 127.0.0.1 2.vi /etc/dnsmasq.confresolv-file=/etc/dnsmasq.resolvconf 指定上层读取的DNS服务器文件no-hosts                            指定不读取

记录一次坎坷的linux内网渗透过程瞎折腾的坑

写在前面 每个人都有自己的思路和技巧,以前遇到一些linux的环境.这次找来一个站点来进行内网,写下自己的想法 目标环境 1.linux  2.6.32-358  cpu 架构(x86_64)AND发行版 Red Hat Enterprise Linux Server release 6.4 2.DMZ+防火墙+行为监控,外网开放8080 8084 ... 3.服务器有utibadn用户的权限一枚 Shell具体怎么拿到的就不说了,记录下自己比较思路坎坷的一次内网渗透以作回顾: 外网nmap得到

内网环境中公网域名解析成内网地址的问题

防火墙默认开启dns的alg功能,是不会把域名服务器回应的服务器公网地址反回给客户端的,只返回内网地址.  NAT设备对来自外网的DNS相应报文进行DNS ALG处理时,由于载荷中只包含域名和应用服务器的外网IP地址(不包含传输协议类型和端口号),当接口上存在多条NAT服务器配置且使用相同的外网地址而内网地址不同时,DNS ALG仅使用IP地址来匹配内部服务器可能会得到错误的匹配结果.因此需要借助DNS mapping的配置,指定域名与应用服务器的外网IP地址.端口和协议的映射关系,由域名获取应