3DNS多链路接入解决方案

1. 前言

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

  2. 需求描述

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

  以下是一张实测数据表

测试项目

网通北京ADSL用户访问 122日凌晨1

广东电信用户访问,宽带用户,带宽未知,122 16:30

网通北京ADSL用户访问,12216:00

上海ADSL宽带用户访问,122 20:00

DNS Result

202.xxx.xxx.209

219.xxx.xxx.11

202.xxx.xxx.209

219.xxx.xxx.11

 

网通

电信

网通

电信

网通

电信

网通

电信

Number of hits:

72

69

4

76

52

47

19

35

Requests per Second

1.20

1.15

0.07

1.27

0.87

0.78

0.32

0.58

Socket Connects

73

70

5

77

53

48

20

36

Total Bytes Sent (in KB)

14.19

13.47

0.96

14.96

13.61

12.23

3.87

7.03

Bytes Sent Rate (in KB/s)

0.24

0.22

0.02

0.25

0.23

0.20

0.06

0.12

Total Bytes Recv (in KB)

4148.24

4001.90

256.58

4388.54

3019.94

2703.26

21.73

39.83

Bytes Recv Rate (in KB/s)

69.12

66.68

4.28

73.12

50.32

45.05

0.36

0.66

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

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

  3. 系统设计

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

 

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

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

  非冗余结构:


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

  冗余结构:

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

  3.2 网络拓扑结构说明

  在原系统接入中,增加一条线路,并采用相应的接入路由器,将两台3DNS服务器分别接在两台接入路由器上,负责用户的DNS访问请求。引导用户使用最快的链路进行访问站点。同时,3DNS负责检查两条线路的健康状态,一旦检测到线路的中断,则停止相应线路的地址解析。

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

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

  3.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:标识每一台真实的服务器地址和提供服务的端口。

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

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

  如图:


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

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


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

  - 循环
  - 全球可用性
  - LDNS持续性
  - 应用可用性
  - 地理分布
  - 虚拟服务器容量
  - 最少连接
  - Pkt/sec(数据包/每秒)
  - KB/sec(千字节/每秒)
  - 往返时间
  - 中继段(hop)
  - 数据包完整率
  - 用户定义服务质量(QoS)
  - 动态比率
  - LDNS循环
  - 比率
  - 随机

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

  3.5.1 RTT算法运行机制:

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

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

  用户的访问流程如下:

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

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

  (2) 运营商的Loca 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可以选择多种测试方法判断对loca DNS的RTT时间, 包括:
  l DNS_Dot: 向loca DNS发起一个包含"."的测试, 也就是向目标LocalDNS请求root清单,该解析一般默认配置的DNS服务器均提供支持。

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

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

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

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

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

  针对一个loca DNS 的RTT结果:
  ldns {
  address          61.136.178.229
  cur_target_state 419446729
  tt              2419199
  probe_protoco   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算法的有效补充。

  3.5.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就进性的时候,将启动静态算法,将在地址范围列表之内的用户定义到正确的线路上去。

  如果用户的LocalDNS即不可被动态RTT计算所检测,又不在本机对应的地理分布表中。此时就需要采用全球可用性算法引导用户到默认的线路上。

3.5.3 全球可用性算法

  全球可用性算法主要用于灾难备份系统。通过3DNS的健康检查算法,可判断各站点或线路的健康状态。并在配置的时候,将同一域名所对应的IP地址进行排序,在系统正常的时候,仅会有排名第一的服务器对外提供服务。只有在排名第一的服务器无法对外提供服务的时候,由排名第二的服务器接管服务。如果有多线路或者多站点则依次类推。

  通常,我们采用全球可用性算法作为第三选择算法。在动态计算和地理分布均没有命中的时候,将所有的用户定义到默认的线路上。

  3.6 链路健康检查机制

  两台3DNS分别检查本地端的服务器地址和对端线路的服务器地址。这些服务器地址实际上为BIGIP上配置的内部服务器的对外服务地址。


  当一条线路出现故障的时候,两台3DNS服务器均无法检测到对端线路的地址。所以在每台3DNS服务器上均只解析本侧线路对应的服务器地址。


  但在此时故障线路的3DNS服务器无法接受请求,根据DNS的冗余机制。所有的用户请求均会发送到正常线路侧的3DNS,所以此时所有的用户均将通过正常的线路进行访问。

  3.7 系统切换时间

  在采用DNS实现链路切换时,系统的切换时间主要取决于每个域名的TTL时间设置。在3DNS系统里,每个域名如www.f5.com.cn均可设置对应的TTL生存时间。在用户的LocalDNS得到域名解析纪录后,将在本地在TTL设定时间内将该域名解析对应纪录进行Cache,在Cache期间所有到该LocalDNS上进行域名解析的用户均将获得该纪录。在TTL时间timeout之后,如果有用户到LocalDNS上请求解析,则此LocalDNS将重新发起一次请求到3DNS上获得相应纪录。

  因此,当单条线路出现故障时,3DNS将在系统定义的检查间隔(该时间可自行定义)内检查到线路的故障,并只解析正常的线路侧地址。但此时在LocalDNS上可能还有未过时的Cache纪录。在TTL时间timeout之后,该LocalDNS重新发起请求的时候就将从3DNS上获得正确的解析,从而引导用户通过正常的线路进行访问。系统检测间隔加上TTL时间之和则为系统切换的最长时间。通常,系统检测间隔设置为60秒,而TTL时间设置为600秒,所以系统切换的整体时间为11分钟。

  3.8 服务器负载均衡

  BIG/IP利用虚拟IP地址(VIP由IP地址和TCP/UDP应用的端口组成,它是一个地址)来为用户的一个或多个目标服务器(称为节点:目标服务器的IP地址和TCP/UDP应用的端口组成,它可以是internet的私网地址)提供服务。因此,它能够为大量的基于TCP/IP的网络应用提供服务器负载均衡服务。BIG/IP连续地对目标服务器进行L4到L7合理性检查,当用户通过VIP请求目标服务器服务时,BIG/IP根椐目标服务器之间性能和网络健康情况,选择性能最佳的服务器响应用户的请求。如果能够充分利用所有的服务器资源,将所有流量均衡的分配到各个服务器,我们就可以有效地避免"不平衡"现象的发生。

  BIGIP是一台对流量和内容进行管理分配的设备。它提供12种灵活的算法将数据流有效地转发到它所连接的服务器群。而面对用户,只是一台虚拟服务器。用户此时只须记住一台服务器,即虚拟服务器。但他们的数据流却被BIGIP灵活地均衡到所有的服务器。

  这12种算法包括:

     轮询(RoundRobin):顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7层的故障,BIG/IP就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

    比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7层的故障,BIG/IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

    优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG/IP用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG/IP才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

    最少的连接方式(LeastConnection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7层的故障,BIG/IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

    最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7层的故障,BIG/IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

    观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7层的故障,BIG/IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

    预测模式(Predictive):BIG/IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被big/ip进行检测)

    动态性能分配(DynamicRatio-APM):BIG/IP收集到的应用程序和应用服务器的各项性能参数如CPU、内存和磁盘的占用情况,动态调整流量分配。动态性能分配可通过标准SNMP或服务器端插件完成。

    动态服务器补充(DynamicServerAct.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。

     服务质量(QoS):按不同的优先级对数据流进行分配。

    服务类型(ToS):按不同的服务类型(在TypeofField中标识)对数据流进行分配。

    规则模式:针对不同的数据流设置导向规则,用户可自行编辑流量分配规则,BIG/IP利用这些规则对通过的数据流实施导向控制。

  当出现流量"峰值"时,如果能调配所有服务器的资源同时提供服务,所谓的"峰值堵塞"压力就会由于系统性能的大大提高而明显减弱。由于BIGIP优秀的负载均衡能力,所有流量会被均衡的转发到各个服务器,即组织所有服务器提供服务。这时,系统性能等于所有服务器性能的总和,远大于流量"峰值"。这样,即缓解了"峰值堵塞"的压力,又降低了为调整系统性能而增加的投资。

  4. 3DNS与现有系统的融合

  考虑到DNS系统变动的复杂性,3DNS在与现有系统DNS服务器配合的时候可以采用两种方式。最佳的方式是将站点的所有域名解析均放置到3DNS上进行解析,优点是可以充分利用3DNS的动态用户引导和强大的图形化管理界面,缺点是需要变动上级注册授权域DNS服务器地址。另外一种方式是将需要进行动态指向的域名分配到3DNS上进行解析,优点是对现有系统的变动较小,缺点是系统中存在多级、多台DNS服务器,不利于统一管理。两种方式分别对应不同的配置方式。

  对于一个域名中的所有记录,我们可以分为动态和静态记录两种,其中静态记录是相对不变的DNS解析记录,如SOA、MX、NS等记录类型;而动态记录则为需要用户通过两条链路进行访问的域名记录,通常情况下为A记录。

  4.1 改变上级注册授权域DNS服务器地址

  在每个域名注册的时候,均需要提供主辅DNS服务器,通常采用提供域名注册提供商的DNS服务器或者自建DNS服务器。在一个完整的域名解析中,通常包含:
   SOA记录,如:
   @       86400    IN     SOA     master.f5.com.cn. (
  2004122932 10800 3600 604800 86400 )
  A记录,如:
  www.f5.com.cn  IN  A  202.106.83.177
  MX记录,如:
  @     IN  MX  5 202.106.83.178

  在3DNS中,可实现所有以上记录的解析。3DNS上配置有完整的BIND域名服务器系统,并且支持NameSurfer图形化界面管理。可以更为方便的管理静态记录。

  而对于需要做动态解析的记录,通常是系统中的A记录,在3DNS中则通过WideIP配置方式实现。每个WideIP即是一个域名,并对应多位于不同链路(DataCenter)的Virtua Server IP地址。在用户访问WideIP的时候,则3DNS将通过预先定义的算法给用户的LocalDNS返回相应的域名与IP对应记录。
  4.2 不改变上级注册授权域DNS服务器地址
  当条件限制,无法改变上级域名注册授权域DNS服务器地址的时候,则需要对系统原有授权域服务器配置进行修改,将动态记录委派到3DNS上进行解析。以www.f5.com.cn为例,配置方式如下:
  原DNS服务器系统配置:
  www.f5.com.cn  IN  A  202.106.83.177

  更改为:
  www    IN  CNAME  www.wip.f5.com.cn.
  wip    IN  NS    3dns1.wip.f5.com.cn.
  wip    IN  NS    3dns2.wip.f5.com.cn.
  3dns1.f5.com.cn IN  A    202.107.83.125
  3dns2.f5..com.cn IN  A    219.172.65.109

  同时,在3DNS上配置WideIP www.wip.f5.com.cn对应不同的服务器地址。

  这样,当用户LocalDNS在请求www.f5.com.cn时,则将再次发送一个请求到3DNS请求www.wip.f5.com.cn对应的地址,在获得www.wip.f5.com.cn对应地址后,将www.f5.com.cn域名与www.wip.f5.com.cn对应的地址进行捆绑,返回给发起DNS请求的用户,从而实现了对用户请求的引导。
  5. 系统安全性考虑

  3-DNS包含众多固有的安全特性,能够有效保护您的站点免受一般攻击,并为其提供更强大的保护。3-DNS发运时缺省设置为较高级安全模式,并提供了以下特性:

  - 可根据对通信源、目的地或端口的监视结果,利用数据包过滤功能限制或拒绝网站发出或接到的访问。
  - 3-DNS控制器采用远程命令行界面进行配置;并采用安全外壳(SSH)进行加密。
  - 3-DNS控制器非常强大,能够有效防御一般攻击:
  - Thwarts teardrop攻击
  - 保护自己和服务器免受ICMP攻击
  - 不运行SMTPd、FTPd、Telnetd或任何其它可被攻击的端口监控程序

  3DNS本身也具有强大的解析能力,在正常配置下,3DNS非递归查询可每秒钟解析35000个记录。通常的攻击很难达到3DNS的上限。
  在实际情况中,还可以通过在路由器上设置ACL访问控制列表来进一步增强系统的安全性。

  6. 成功案例
  l 多链路接入及镜像站点
  中国工商银行总行网上银行接入系统
  中国农业银行总行网上银行接入系统
  中国交通银行总行网上银行接入系统
  招商银行总行网上银行接入系统
  光大银行总行网上银行接入系统
  腾讯(QQ)网站

  l CDN
  蓝汛,ChinaCache
  Tom.com CDN
  中国网通SCDN
  华奥星空CDN

http://solution.chinabyte.com/28/1924528.shtml

你可能感兴趣的:(System技术积累)