张晓晖 甘玉萍
(中国移动通信集团上海有限公司 上海 200134)
随着移动分组域网络规模的扩大、2G/3G融合、资费降低和数据业务的不断丰富,客户使用数据业务的热情越来越高,数据流量呈现快速增长的趋势。为了向客户提供不间断的优质业务,必须不断地提高“保持业务连续性”和“业务快速有效迁移”的能力。这需要从网络规划、建设、维护、优化等环节完善网络的“双路由、双节点”架构,特别需要从业务流程上考虑完善双路由的冗余保障。
运营商需要建立高效稳定安全的移动数据网络,这是“以客户为中心”的服务理念(外部压力)和日益增长的数据业务流量(内部要求)的必然需要。本文探讨了动态DNS的原理和基于VMware Workstation的模拟实现,并根据DNS在移动分组域网络中的重要作用,从业务流程的角度出发,引入动态DNS服务迁移技术,从而提升移动分组域网络的业务冗余能力。
DNS(Domain Name System)域名服务器主要用来提供域名与IP 地址相互映射的网络服务。使用最多的是DNS的正向解析,即将域名转换成IP地址;将IP地址转换成域名的功能称作反向解析。传统的域名解析是一对一的、静态的,一个域名只能对应一个IP地址,一旦该IP地址所属的服务器出现故障,则无法完成相应服务。
因此出现了DNS负载均衡技术,就是在DNS服务器中为同一个域名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将顺序返回不同的IP地址,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
DNS负载均衡技术只是顺序地告诉客户端一个服务器组中一台机器的IP地址,所以其面临的最大的问题是不能动态的区分服务器的负载差异,也不能反映服务器当前的运行状态。因此当提供同一服务的一组服务器中的一台机器出现故障不可用时, DNS服务器并不知道.所以会继续将这台故障服务器的地址提供给客户端,由此造成服务故障。
正是由于上述原因,业界提出DNS动态负载均衡技术,可以确保业务在某些情况下不中断,通过定时监测服务器的状态,并通过DNS将不同的源IP地址请求指向最佳服务器来实现请求分配,有效避免传统DNS负载均衡的弊端,这种技术称之为DNS动态负载均衡dlbDNS,即dynamic load balance DNS。
动态DNS负载均衡结构的具体目标是识别最具可用性的服务器,然后将连接分配到这个服务器。动态DNS服务器需要随时获悉一组服务器中各设备的运行状态,建立一张可用设备的IP地址列表,列表中同一应用的服务器共享同一个域名,当其中某台服务器无法响应时,DNS服务器将在列表中去除该地址,这样用户通过DNS服务器解析到的应用服务器始终是可用的。同时,动态DNS服务器还需要获得客户端的IP地址,根据这个地址从IP地址列表中选择出最临近的服务器,实现智能的负载均衡功能。
构建动态DNS服务器的测试环境,需要搭建一个局域网,其中包括两台服务器、一台DNS服务器和一台客户端,然而在生产环境中要同时拥有这么多服务器有一定困难,也不是每台服务器都允许随意设置。因此利用VMware Workstation,可以在同一台PC上建立多台虚拟机并将之构建成网络。
VMware Workstation允许操作系统和应用程序在一台虚拟机内部运行,即在一台电脑上模拟出若干台PC,每台PC都可以单独运行操作系统而互不干扰,达到一台电脑可“同时”运行几个不同操作系统的目的,还可以将这几个操作系统连成一个网络。
利用桌面PC,基本配置如下:
Pentium(R)4 CPU 2.80GHz;
1.12GB内存;
120G硬盘;
Windows XP操作系统。
使用安装好Red Hat Linux和Windows XP的虚拟机,在VMware Workstation中创建“Team”,将虚拟机Red Hat Linux、Red Hat Linux-1、Red Hat Linux-2和Windows XP添加到新建的Team中,组建实验环境,Team settings和对应的网络拓扑如图1所示。
动态DNS服务器的实现,可以通过设置DNS负载均衡(即在DNS服务器中为同一个域名配置多个IP地址)、智能DNS策略解析功能(即通过view功能实现让每个来源不同的网络在查询DNS时,返回不同结果)和通过均衡算法程序判断服务器可用性来实现。实现动态DNS服务的流程如图2所示。
图1 Team settings和对应的网络拓扑
图2 动态DNS服务的流程图
移动分组域网络包括GPRS、EDGE和TD PS域网络,由于2/3G融合,具有统一的网络架构,主要实体包括GPRS支持节点(SGSN和GGSN)、GPRS网络、本地DNS等。通常情况下,若干SGSN和GGSN共同组成一个局域网。在GPRS网络中,DNS主要作用之一是进行外部网络APN(接入点名称)与相关GGSN地址之间的转换,即映射APN至GGSN IP地址,负责完成SGSN选路到指定的GGSN,提供移动终端(MS)与各种类型的数据网络之间的分组传递业务。具体流程如图3所示。
当SGSN收到移动台“激活PDP上下文请求”消息时,SGSN把完整的APN发往DNS,并从中获得与之相对应的GGSN IP地址,随后向GGSN发送“创建PDP上下文请求”消息,建立与该GGSN之间的隧道。GGSN确认可建立到MS指定APN的连接,向SGSN回复应答消息。SGSN向MS回复“激活PDP上下文接受”的消息,从而建立起MS与GGSN之间的路由,可以进行分组数据传送。
目前的业务流程仅会返回一个GGSN的IP地址,因此可能会由于GGSN故障导致业务中断。但启用动态DNS技术后,DNS服务器可以随时获得各GGSN的运行状态,建立一张动态的可用GGSN IP列表,识别最具可用性的GGSN。当其中某台GGSN无法响应时,DNS服务器将在列表中剔除该地址。通过ping监测GGSN状态并自动实现服务器地址更新的主要实现代码和配置文件如下所示:
#!/bin/sh
#load DNS process
/usr/local/sbin/named
while [ $m_GGSN1_no_ping -le 3 -a $m_GGSN2_no_ping -le 3 ]
do
ping -c 3 192.168.0.3 > ping.log
grep "100% packet loss" ping.log
if [ $? -eq 0 ]
then echo "* Alarm GGSN1 *"
图3 移动分组域网络中的DNS功能示意图
else echo "* GGSN1 is running *"
fi
......
done
if [[ $m_GGSN1_no_ping -eq 4 && $m_GGSN2_no_ping -lt 4 ]]
then echo "! Emergency GGSN1 !"
num=$(awk '$8=="/usr/local/sbin/named"{print $2 }' ps.log)
kill -9 $num
sed '/192.168.0.3/d' /var/named/$(awk'{OFS="-";print $1,$7,$3,$4,$5}' temp.log) >/var/named/test.zone
/usr/local/sbin/named
fi
......
if [[ $m_GGSN1_no_ping -eq 4 &&$m_GGSN2_no_ping -eq 4 ]]
then echo "No Service is available."
fi
通过该程序,可以有效监控GGSN状态,并确保网络故障对用户的影响降到最低。问题的关键是如何判断GGSN的健康状态并作出最佳选择,ping仅仅是众多监测方法中的一个。比较合理的监测方法,需要综合网络、负载、处理能力等各方面情况,利用周期性发送ping、GTP检测、建立SGSN模拟器、内部网管指标等手段,通过合理的负载均衡算法,比如循环算法、最小连接算法、散列(Hash)算法,实现对GGSN的检查。
通过动态DNS的服务迁移技术,可以实现GGSN的最优选择、业务冗余和容灾备份,大大减少故障时间,实现业务应用的自动迁移和系统的正常切换,确保业务应用系统能够实现全天候的正常运行。
目前,用户满意度已成为电信运营商成功与否的重要因素,虽然自动方式实现难度较人工方式大,但通过对复杂的系统环境中的各种故障作出正确分析判断,根据事先定义的策略,触发相应切换流程,从而建立高度客户化和智能化的自动容灾切换系统,必将成为日后运营商维护工作的重中之重。
[1] Paul Albitz著, 雷迎春等译. DNS与BIND. 北京:中国电力出版社,2001
[2] 李涛. 信息系统容灾抗毁原理与应用. 北京:人民邮电出版社,2007
[3] 金涛. 动态DNS实现智能负载均衡. 电脑知识与技术(学术交流),2007(5):219~221
[4] 3GPP TS 09.60 General Packet Radio Service (GPRS); GPRS Tunnelling Protocol GPT) Across the Gn and Gp Interface. http://www.3gpp.org/ftp/Specs/html-info/09-series.htm.