如果您想重新规划实例的网络,需要通过修改私有网络或者子网来完成。这些操作将会导致客户端访问实例的网络链路产生变更,变更范围包括使用可视化工具(Kibana、Cerebro 等)的公/私网域名访问实例的网络链路,使用 SDK 或者 HTTP/HTTPS 方式通过公/私网域名访问实例的网络链路。
修改云搜索服务实例的网络,会对访问实例的网络链路产生变更,届时您的公网、私网域名访问需要解析到新的IP。由于浏览器、应用程序、操作系统和 DNS 服务器等均可能对 DNS 解析的结果进行缓存,导致新的 IP 无法及时感知到。这将对您使用可视化工具(Kibana、Cerebro 等)访问实例和应用程序的在线读写,产生数分钟甚至小时级别的中断。
为了降低因为修改实例的网络导致服务不可用的时长,本文提出了不同场景的优化方案,您需要根据真实的云场景和客户端进行针对性优化。
说明
本文提供的优化方案均无法保证修改网络期间对服务的零影响,只能降低服务不可用的时间。
在公有云场景下,您的所有服务资源均在火山引擎内部,推荐您使用私有域名访问云搜索服务实例,这样可以使用火山引擎内部的 DNS 服务器进行高效域名解析。同时,在修改实例网络过程中,内部的 DNS 服务器可以控制 DNS 服务器的缓存时间,让您的客户端更快感知域名下的新 IP 地址,降低服务不可用时间。
使用火山引擎 VPC 中的服务资源通过域名访问云搜索服务实例。在 VPC 内,推荐您使用实例的私有域名访问,它会使用 火山私网解析 PrivateZone服务,提供高效的DNS解析。
在多云场景下,您的火山引擎云资源与自建 IDC/第三方云服务之间一般通过专线、VPN、云企业网或中转路由器进行连接。
自建 IDC/第三方云服务的应用程序通过域名访问云搜索实例。该场景下,推荐您将实例的私网域名的 DNS 解析请求转发到 VPC 内的 DNS 服务器,这样就可以使用到火山私网解析 PrivateZone服务。PrivateZone 服务提供该转发能力,具体配置请参见在 VPC 和自建 IDC/第三方云服务之间实现 DNS 解析。
针对公有云和混合云场景,我们均推荐您使用云搜索服务实例的私有域名进行访问,并通过火山引擎内部 DNS 服务器进行域名解析。在修改网络过程中,它可以有效控制 DNS 服务器的缓存失效时间,让您的客户端更快感知域名下的新 IP 地址,降低服务不可用时间。
如果您的应用程序和服务部署在自建 IDC 和第三方云服务内,或者您需要在本地进行调试,并且访问火山云搜索服务等火山引擎产品都是通过公网域名的方式。
在这种场景下,推荐您配置火山引擎公共DNS解析(PublicDNS),它可以提升您的互联网访问速度,并帮助您避免 DNS 欺骗、DNS 劫持等问题。在修改网络过程中,它也可以有效控制 DNS 服务器的缓存失效时间,让您的客户端更快感知域名下的新 IP 地址,降低服务不可用时间。
由于您应用程序的部署机器环境存在多样性,为此提供了各个操作系统和网络设备的配置方式。详细内容,请参见接入公共解析 PublicDNS。
为了降低服务不可用的时长,您可以对可视化端(Kibana、Cerebro 等)、在线应用程序端进行优化配置。
浏览器可能会对 DNS 进行缓存,不同的浏览器策略可能不同。
当您在使用 Kibana、Cerebro 等可视化端时,如果遇到访问失败或者访问超时的情况,可以尝试多次刷新。如果没有效果,可以尝试以下解决方法
此处以 Chrome 浏览器为例。执行下述步骤后,即可清除 Chrome 浏览器的 DNS 缓存。
chrome://net-internals/#dns
。您的应用程序端会使用多种语言来实现,一些语言内部会对 DNS 进行缓存。
以 Java 为例,JVM 默认会对 DNS 做缓存,有以下两种情况:
JavaSecurity
机制,JVM 默认对 DNS 缓存时间是 30 秒。sun.net.inetaddr.ttl
来自定义缓存时间,单位秒,有以下两种指定缓存时间的方法。
-Dsun.net.inetaddr.ttl=10
。System.setProperty("sun.net.inetaddr.ttl", "10")
。JavaSecurity
机制,JVM 默认会永久缓存 DNS 记录,这样会导致程序一直无法感知到域名指向的新 IP。networkaddress.cache.ttl
的取值来指定缓存时间,单位秒。java.security.Security.setProperty("networkaddress.cache.ttl", "10");
说明