多活主备选择性DNS解析(一个域名对应多个IP)

本文探讨了在多活主备环境下,通过DNS解析控制用户访问目标的问题。针对DNS解析的随机性和主备切换时的挑战,提出了两种方案:1) 控制DNS解析结果,包括内置DNS服务器和通过nginx状态影响浏览器解析,但面临浏览器缓存和服务器状态无法直接影响DNS解析的限制。2) 备机跳转解决方案,包括前端脚本、nginx层重定向和反向代理,但面临重定向死锁和域名反向转换等问题。结论指出,nginx反向代理在简单架构下可行,而端口屏蔽结合备站点访问端口切换可实现主备切换。
摘要由CSDN通过智能技术生成

多活主备选择性DNS

问题背景

实现多活主备状态下,用户通过域名访问网站,避免用户访问到备站点;

总结一下:

  • 同时存在多个nginx容器活跃,需要用户每次通过域名访问,都能访问到特定的nginx容器;
  • 主备站点角色可能随着主备状态互换,即原来是主站点的,可能后来是备站点;
  • DNS服务器为第三方提供,无法深度定制;
  • 备机需要能够通过ip单独访问;

在这里插入图片描述

知识背景

DNS解析存在多级缓存(此处仅列举到DNS服务器层;后续流程不涉及)

在这里插入图片描述

DNS一对多域名的解析随机性

当一个域名对应多个IP时,DNS解析具有随机性;常用此做服务器的负载均衡;

在这里插入图片描述

DNS 域名解析负载均衡缺点:
  • 目前的DNS是多级解析的,每一级DNS都可能缓存A记录,当某台服务器下线之后,即使修改了A记录,要使其生效也需要较长的时间,这段时间,DNS任然会将域名解析到已下线的服务器上,最终导致用户访问失败
  1. 不能够按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以其的负载均衡效果并不是太好。

可能方案

为了实现问题,总结下来,只可能有2种解决方案:

  • 在DNS解析层面,控制DNS解析结果
  • 在DNS解析到备机后,提供备机跳转解决方案

方案一、dns解析层面控制DNS解析结果

1.1 通过内置DNS服务器控制IP解析(伪造DNS)

DNS服务器在实际使用场景中,均为客户提供的第三方DNS服务器,无法控制第三方DNS服务器解析的规则;且即使成功控制,由于存在浏览器缓存、本地缓存等多种不可控因素,不可避免还是会存在解析到备机IP,此方案不可行;

1.2、让备机nginx的状态能够影响DNS服务器解析

目前DNS服务器解析不会判断服务器状态。无法通过主备机的状态改变影响DNS服务器解析;
再者。由于存在浏览器缓存、本地缓存等多种不可控因素。不可避免还是会存在解析到备机IP;此方案不可行

2022.5.3更新DNS服务器确实没法获取各个主机的状态,但是,浏览器却可以根据握手情况选择最优的服务器。

验证:新开一个域名对应2个IP地址(ip1,ip1),测试浏览器端访问结果。如果访问到ip1的服务器,则将ip1服务器nginx容器kill掉,亲测浏览器会解析到ip2;

如下图:
在这里插入图片描述
由于客户端先前DNS解析到131,故kill掉131后,刷新浏览器,在与131服务器建链失败后(推测是收到了[RST ACK]头),尝试与80(正常服务器)进行通讯,建立client hello;

故,不能通过nginx状态影响DNS服务器解析,但是可以通过nginx的状态影响浏览器DNS解析.

然而,我们的需求是通过nginx状态影响主备机的解析,无法直接kill掉备机,因为主备机都需要对外提供服务;所以需要进一步研究如何精确的控制nginx返回状态,在不停掉服务的情况下,让浏览器选择我们想让他选择的主机;

这种方案需要进一步验证;

要采用这种方案,思路应该是这样。

1、我需要找到一个控制点,在浏览器通过域名解析到达备机时的这个控制点的时候,能够让浏览器"知道"这个备机不可用,需要换一台服务器试试
2、由于备机要求能够通过ip访问,故我需要做访问控制,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值