3DNS多链路接入解决方案

1. 前言在原Chinanet 分为北方China Netcom 和南方China Telecom之后。由于南北网络之间的互联问题。出现了从南方用户访问北方网站或北方用户访问南方用户访问速度较慢的问题

1. 前言

在原Chinanet 分为北方China Netcom 和南方China Telecom之后。由于南北网络之间的互联问题。出现了从南方用户访问北方网站或北方用户访问南方用户访问速度较慢的问题。其出现的根本原因为南北网络的互通互联接点拥塞,造成用户丢包、延迟较大,从而导致访问缓慢,甚至对于一些应用根本无法访问。

2、需求描述

对于一个运行关键业务的电子商务网站来说,保持用户的访问速度和访问的成功率非常重要。需要一套系统来解决南方和北方用户的访问问题。

以下是一张实测数据表

表中可以看出,对于同一个站点,一个用户分别从两条线路进行访问,得出的访问速度差异是非常大的。最大的差值在广东电信分别访问站点的两条线路,其速度差异接近20倍。

3、系统设计

,

通常用户系统原有结构设计图

在系统原有系统结构中,采用单条接入线路,一个或多个DNS 服务器,这些服务器对于同一个域名均解析为同一个地址。

1.1 3DNS多链路设计结构图:

非冗余结构:

,

在非冗余结构下,系统中需要增加一侧接入路由器、两台3DNS 设备和一台BIGIP 设备作为多线路接入设备。

冗余结构:

在冗余结构中,则采用两台3DNS 和两台BIGIP 实现了系统的全冗余,同时,在BIGIP 下端,可采用防火墙和核心交换机冗余保证系统的进一步可靠性。

1.2网络拓扑结构说明

在原系统接入中,增加一条线路,并采用相应的接入路由器,将两台3DNS 服务器分别接在两台接入路由器上,负责用户的DNS 访问请求。引导用户使用最快的链路进行访问站

,

点。同时,3DNS 负责检查两条线路的健康状态,一旦检测到线路的中断,则停止相应线路的地址解析。

在接入路由器之后,采用了F5 BIGIP作为多链路接入设备,在BIGIP 上配置多个IP 对应每条线路分配的IP 网段。这些IP 同时对应后端的一台或多台服务器。实现服务器组的对外统一服务。

根据每个系统的需求,可以采用非冗余结构或者冗余结构。

1.3系统逻辑结构

3DNS 上采用DataCenter 、VS 、和WideIP 来标识系统中的各元素,系统逻辑结构图如下:

其中:

3DNS 配置:

VS:表示各线路真实对外提供服务的IP 地址,在本系统中,VS 为BIGIP 上虚拟的后端服务器地址。

WideIP:表示外部用户访问的统一域名,每个WideIP 均与相应的两个或多个VS 相对应,对于每一个 LocalDNS 的请求,3DNS 均会选择一个或多个相应的VS 地址返回。WideIP 主要负责A 记录的解析。

,

DataCenter:用于标识线路或数据中心,位于同一条线路侧的所有VS 、3DNS 均位于同一个DataCenter 。

NameSurfer/BIND:在3DNS 内部用于解析非动态域名,提供标准DNS 服务器的所有功能。包括SOA 、NS 、MX 和A 记录的解析。

BIGIP 配置:

VS:表示对应于各线路的服务地址,该地址为虚拟地址

Pool:用于对后端的服务器分组,在同一组内可以是一个或多个服务器组成的负载均衡组。BIGIP 将对VS 的访问根据预先定义的算法分配到Pool 中的每个Node 节点上。

Node:标识每一台真实的服务器地址和提供服务的端口。

1.4同一组服务器对外多地址服务原理

由于采用了多条链路接入,则此时必将面临将系统中的一台或多台服务器同时对多条链路提供服务的问题。在系统设计中,我们采用了F5 BIGIP来实现了多出口接入。 如图:

,

在BIGIP 实现多链路接入的时候,采用了BIGIP 上的AutoLastHop 技术。对于每条线路,在BIGIP 上均配置一个与线路分配网段对应的IP 地址,这些IP 地址均映射到后端的一台或同一组服务器。当用户访问不同地址的时候,BIGIP 上将建立每个请求与来源设备Mac 地址的对应关系表。即将每个用户的请求连接和上端的路由器MAC 地址进行对应,在服务器数据返回的时候,则根据该对应表将返回的数据包发送到相应的路由器,避免了数据往返通路不同的问题。

1.5 3DNS分配算法及运行机制

3-DNS 控制器采用了完善的负载平衡算法和业界最先进的流量分配方法:

循环

全球可用性

LDNS 持续性

应用可用性

地理分布

虚拟服务器容量

最少连接

,

Pkt/sec(数据包/每秒)

KB/sec(千字节/每秒)

往返时间

中继段(hop )

数据包完整率

用户定义服务质量(QoS )

动态比率

LDNS 循环

比率

随机

在3DNS 的每个WideIP 中,可以选择三种算法,这三种算法按照预定的优先级进行排列。在通常情况下,选择RTT 动态计算方法作为系统的优选算法,即所有的LocalDNS 请求均被3DNS 计算其就近性,以保证绝大部分用户访问的最优化性。而Topology 算法则作为RTT 动态计算的补充算法,在RTT 计算方式没有结果的时候,将用户请求定义到其本网的线路上。Global Availability 算法作为系统的默认算法,将所有无法计算结果并且不在Topology 范围之内的LocalDNS 请求,定义到系统的默认线路上。

1.1.1 RTT算法运行机制:

通过3DNS 的RTT 就近性算法会自动运算生成一个ldns 就近分布表,通过这个动态的表,每个客户上来都会提供一个最快速的链路进行访问,由于站点有ISP1和ISP2的两条广域网线路。在3DNS 上会针对站点服务器(以www.f5.com.cn 为例) 解析ISP1和ISP2的两个不同的公网地址。

对应于www.f5.com.cn 域名,在3DNS 上配置wideip :www.f5.com.cn ,对应两个Virtual Server:VS1:202.106.83.177,VS2:219.17.66.100。分别属于ISP1和ISP2两条线路分配的IP 地址段。在3DNS 内部,同时定义两个DataCenter 分别与ISP1和ISP2相对应。

用户的访问流程如下:

,

访问网银的用户在发起DNS 请求时

(1)首先向其所在运营商的Local DNS发起www.f5.com.cn 域名的DNS 请求。步骤2

(2)运营商的Local DNS服务器通过递归算法查找到工行的主、辅DNS 服务器。步骤3和4。

(3)接受到请求的3DNS 首先查询在本地是否有该LocalDNS 的就近性表项,如果存在,则直接给LocalDNS 返回速度最快的服务器地址。如果不存在,则通知另外一台3DNS 发起对该LocalDNS 的查询。步骤5。

(4)两台3DNS 分别对LocalDNS 进行Probe 。例如ISP1侧3DNS 查询该LocalDNS 的RTT 时间为150ms ,而ISP2侧3DNS 查询同一LocalDNS 的RTT 时间为300ms ,则此时在两台3DNS 内都形成了该LocalDNS 的对应就近性表记录。

(5)接受到LocalDNS 请求得3DNS 根据系统的就近性表返回相应的DataCenter 内的WEB 服务器地址。步骤6。

(6)在用户LocalDNS 获得地址后,将该地址返回给用户。步骤7

(7)用户向www.f5.com.cn 网站发起访问。步骤8。

通过以上流程可以看出,通过动态计算方式,可以最为准确的估算出用户LocalDNS 与两条线路之间的速度。通过3DNS 之间的信息交互,在两台3DNS 上形成就近性表,并根据该表返回用户的最佳访问地址。

,

3DNS 可以选择多种测试方法判断对local DNS的RTT 时间, 包括:

DNS_Dot: 向local DNS发起一个包含”.”的测试, 也就是向目标LocalDNS 请求root 清单,该解析一般默认配置的DNS 服务器均提供支持。

DNS_REV: 向local DNS发起LocalDNS 本机IP 的PTR 请求

UDP:发起一个UDP 的包, 看是否回应

TCP:发起一个TCP 的包看是否回应

ICMP:发起一个ICMP 的ping 包, 看是否回应

在以上各检测方式中,无论目标系统返回那种类型的数据包,3DNS 均可认为是有效数据包而记录数据包往返时间,最终形成就近性表。

针对一个local DNS 的RTT 结果:

ldns {

address 61.136.178.229

cur_target_state 419446729

ttl 2419199

probe_protocol tcp

path {

datacenter "CNC"

cur_rtt 189850

cur_hops 0

cur_completion_rate 10000

cur_last_hops 0

path {

datacenter "TEL"

cur_rtt 57209

cur_hops 0

cur_completion_rate 10000

,

cur_last_hops 0

通常情况下,我们选择RTT 动态算法作为优选算法,只要是3DNS 能检测到的地址,一律按照动态算法分配,保证系统最大的灵活性。

在实际的运行环境中,可能存在某些LocalDNS 无法检测的情况,所以我们可以采用地理分布算法作为动态RTT 算法的有效补充。

1.1.2 地理分布算法

在3DNS 上,可以根据用户的LocalDNS 地址来决定给用户返回那个地址。在3DNS 上可配置多个自定义区域,并将这些区域与链路相对应。当用户的LocalDNS 发起请求连接3DNS 的时候,3DNS 将根据LocalDNS 所位于的区域返回给LocalDNS 适当的链路侧服务器地址,引导用户从正确的线路进行访问。

在该算法下,需要收集各运营商的IP 地址网段表。将网段进行整理后输入到3DNS 内形成自定义区域表。

一个典型的topology 表结构如下:

topology { // 4 Items

server ldns score

dc."CNC" 202.106.0.0/16 100

dc."TEL" 219.172.0.0/16 100

dc."CNC" 200.100.0.0/16 100

这样,就将所有从表中ldns 网段内的LocalDNS 请求有限定一到相应的表中对应的链路上。

通常,我们采用地理分布算法作为第二算法。当动态检测机制无法检到LocalDNS 就进性的时候,将启动静态算法,将在地址范围列表之内的用户定义到正确的线路上去。

标签: