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映射的改变,目前还是得靠重启应用来解决。
Linux内网环境DNS修改域名指向,JAVA应用程序能否实时切换的问题总结的更多相关文章
- Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务
如何在离线环境或纯内网环境的Linux机器上安装部署Docker服务或其他服务.本次我们以Docker服务和Ansible服务为例. 获取指定服务的所有rpm包 保证要获取rpm包的机器能够上网. 本 ...
- Linux内网渗透
Linux虽然没有域环境,但是当我们拿到一台Linux 系统权限,难道只进行一下提权,捕获一下敏感信息就结束了吗?显然不只是这样的.本片文章将从拿到一个Linux shell开始,介绍Linux内网渗 ...
- 内网环境下为Elasticsearch 5.0.2 添加head服务
背景: 本项目的服务器是内网环境,没有网络,因此需要在离线的环境中,安装head服务. 需要用到的安装包有: node的安装包 elasticsearch的head插件源码 说明:此次只讲述为elas ...
- 内网环境搭建NTP服务器
说在前面:ntp和ntpdate区别 ①两个服务都是centos自带的(centos7中不自带ntp).ntp的安装包名是ntp:ntpdate的安装包是ntpdate.他们并非由一个安装包提供. ② ...
- Centos7.2内网环境安装MySQL5.7.24
1.配置本地yum源 内网环境,首先需要配置本地yum源,以解决MySQL的依赖安装,具体参考该文:点击打开 2.查看服务器环境 uname -a 3.去官网下载MySQL安装包 MySQL官网网址: ...
- linux 内网时间同步配置
在工作中,内网环境机器的时间会有所差异,在某些测试环境下需要一毫秒都不允许出现误差,但又不想同步外网时间,那我们可以选择一台机器作为时间服务器来供其他机器进行时间同步,例如每隔1分钟同步一次时间. 一 ...
- dnspod-sr内网轻量级DNS首选方案 - 运维生存时间
dnspod-sr内网轻量级DNS首选方案 - 运维生存时间 undefined
- 内网环境上部署k8s+docker集群:集群ftp的yum源配置
接触docker已经有一年了,想把做的时候的一些知识分享给大家. 因为公司机房是内网环境无法连接外网,所以这里所有的部署都是基于内网环境进行的. 首先,需要通过ftp服务制作本地的yum源,可以从ht ...
- 内网环境使用ansible安装software 需要外网时,如何绑定代理呢
内网环境使用ansible安装software 需要外网时,如何绑定代理呢? 方法一: 在ansible 的脚本里,yum install 的地方,添加语句: environment: https_p ...
随机推荐
- 着色Test
1 2 3 4 5 6 7 8 9 10 def test: print "just a test" print "just a test" ...
- BZOJ1565 植物大战僵尸
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...
- java 解决JFrame不能设置背景色的问题 分类: Java Game 2014-08-15 09:48 119人阅读 评论(0) 收藏
这段时间比较多,于是写一写JAVA的一些IT技术文章.如有JAVA高手请加QQ:314783246,互相讨论. 在Java的GUI设计中,Frame和JFrame两者之间有很大差别,上次刚学时编一个窗 ...
- JavaScript之工厂方式 构造函数方式 原型方式讲解
一.工厂方式可以为一个对象,创建多个实例. var oCar = new Object; oCar.color = "red"; oCar.doors=4; oCar.mpg=23 ...
- SQL中自定义拆分为新表的函数
/*按照符号分割字符串*/ create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) returns @t table(c ...
- 移动端页面调试工具——UC浏览器开发者版
在移动页面的开发中,我们很难像PC端那样很方便的调试,网上也有各种各样的调试方式.但在工作中,我主要还是用chorme自带的模拟器来模拟各种移动设备,但是用久了之后发现毕竟是模拟的,与真机调试还是会有 ...
- HDU1435,好开心,稳定婚姻
费了三天,终于解决了各种BUG,PASS,好开心,这才是ACM真正的快乐,就在AC的那刻, 网上基本没甚程序,开始被各种变量名搞晕,无语!!! 有几个题目没说的东西:认为序号是1-N, 然后先排序,弄 ...
- SQL分页查询总结{转}
开发过程中经常遇到分页的需求,今天在此总结一下吧.简单说来方法有两种,一种在源上控制,一种在端上控制.源上控制把分页逻辑放在SQL层:端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridVie ...
- ibatis中iterate的用法(conjunction="or" ",")
例子一 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap < ...
- ASP.NET和JSP相似方法总结(持续中。。)
一.HTTP请求处理 1.获取GET请求数据 ASP.NET:Request.QueryString[name] JSP:request.getParameter(String name); 2.解决 ...