一种高可靠的SDN 南向数据对账系统设计方案
2021-12-14唐乙双
唐乙双,胡 洋,向 伟
(中国电子科技集团公司第三十研究所,四川 成都 610041)
0 引言
在传统的互联网(Internet Protocol,IP)网络体系架构中,作为核心设备的路由器包含路由决策和数据转发等功能。随着网络规模的急剧膨胀,其结构及其所承载的功能变得繁复不堪并且有越来越复杂的趋势[1]。相对于互联网通信协议第四版(Internet Protocol version 4,IPv4)网络,软件定义网络(Software Defined Network,SDN)技术的核心思想是实现网络控制面和数据转发面分离的架构,从而显著减少了传统网络中路由器所承载的诸多大而全且复杂的功能。作为现今网络通信技术领域的热点技术,SDN 被认为代表着未来网络通信技术的演进发展方向。松耦合的逻辑控制和数据转发、网络状态的集中控制、底层网络设备对上层应用透明、动态可编程[2]是其最重要也是SDN 最显著的特点。
控制与转发分离是SDN 网络架构的基本特征之一。SDN 控制器通过网络配置交换机,SDN 交换机通过网络发送设备信息到控制器。网络的稳定性问题及SDN 交换机具体实现的差异性,会导致SDN 控制器与SDN 交换机之间出现数据不一致的问题,甚至会出现SDN 交换机配置出错但是控制器却一无所知的情况。如何保证控制器与交换机之间的数据一致性是构建高可靠、高自愈SDN 网络的关键。针对控制器与交换机之间数据一致性问题,在目前大多数控制器开源框架,如FloodLight、OpenDaylight 等,均专注于核心业务,极少考虑到实际应用中由于各种原因导致的控制器与网络设备间数据不同步的问题。商用的控制器产品虽然具备维护配置数据一致性的相关功能,但大部分仅支持手动配置维护,自动化程度较低,且在进行数据查询时通常才采用一次性拉取方式。该方式在交换机需要同步海量数据时,显得有些力不从心。
因此,在高安全可靠的SDN 控制器的设计中,本文提出一种基于数据快照的南向数据对账技术,通过该技术,控制器通过定时数据快照比对的方式,基于优先级、数据管理权限等完成交换机与控制器之间的数据对账,发现并纠正出现的差错。此外,针对控制器与交换机的数据对账需求,本文通过借鉴用于存储网络中软故障恢复的快照技术[3],从数据建模、数据拉取、数据比对3 个方面出发,设计一种基于数据快照的高可靠南向对账系统。利用该系统,控制器可以避免直接从海量数据中提取有用信息,而是使用定时数据快照比对的方式完成交换机与控制器之间的数据对账,发现并纠正出现的差错,极大提高了数据对账的效率。
1 系统设计
1.1 系统框架设计
基于数据快照的南向数据对账系统在设计上应与控制器整体框架保持一致,并将整个设计融入到SDN 控制器整体框架中,细化自动化配置数据一致性功能的业务逻辑,由此得到系统的总体架构如图1 所示。
图1 系统结构
图1 展示的系统结构是根据软件工程中分层框架设计原则设计的。基于数据快照的南向数据对账系统的总体架构分为北向接口层、控制层以及南向接口层。
北向接口层为网络管理员提供自动对账和日志管理接口。其中,自动对账接口为网络管理员提供对账管理的控制接口;日志管理接口主要负责向网络管理员展示数据对账服务的运维状态和输出结果。
控制层主要根据网络管理员设置的抽样比例周期性地调用数据对账服务对一定数量的网络设备进行配置一致性维护。
控制层提供的数据对账服务是整个数据对账系统的逻辑主体,主要负责根据抽样比例自动地选取控制器所管控的网络设备进行配置数据一致性的维护工作。在数据对账服务中,数据修复与数据比对模块是实现数据自动对账功能的基础,对账管理、对账设备选取与对账权重维护模块则负责制定数据对账服务的依据。
南向接口层主要为数据对账服务提供设备的维护和管理功能。其中设备通信模块除作为数据对账服务实现设备对账管理的渠道外,也是控制器其他功能模块赖以控制管理网络设备的基础,这里本文仅需要利用控制器已有的设备通信模块的完成网络设备参数的查询和设置,无需进行特殊改造。数据拉取模块负责周期性获取网络设备的实时配置参数,是实现数据对账服务完成数据比对的依据。
在南向数据对账系统的3 层结构中,控制层与南向接口层是实现数据对账系统的核心部分,下文将展开具体介绍。
1.2 南向接口层功能设计
南向接口层是数据对账服务实现配置数据一致性的通道,数据对账系统不仅需要利用设备通信单模块来实现设备的参数查询和配置,还需要通过数据拉取模块来获取实时的网络设备配置数据。
1.2.1 设备通信模块
设备通信模块是控制器对底层网络设备进行集中管控的桥梁,该模块提供了各种南向协议如OpenFlow、网络配置(Network Configuration,NETCONF)等。每个被管控的网络设备通信在设备通信模块内部都存在一个唯一的映射,每个映射对象都维护着一个与对应设备建立的南向协议会话,该会话负责控制器与网络设备间的数据交互。本文所设计的数据对账服务主要利用NETCONF[4]协议完成与网络设备的信息交互。
1.2.2 数据拉取模块
数据拉取模块负责为数据比对提供数据源。数据拉取模块负责利用NETCONF 协议进行基于YANG 的数据建模,是针对NETCONF 访问的数据建模语言,它可以描述各种操作、数据、以及通知进行建模,具有良好的可读性和可扩展性。根据需要,通过YANG 语言对控制器内所要对账的数据进行建模,包括流表与业务配置。控制器数据库在设计上分为Config datastore 与Running datastore[5]。Config datastore 用于保存控制器各功能模块成功向网络设备下发的配置数据,Running datastore 用于从设备拉取回来的数据保存,用于作为数据比对时配置获取的数据源。需要注意的是,设备的表项内部会携带状态数据,比如统计、状态等,这些数据会在建模时与配置数据一起定义,在数据拉取的时候状态数据会被一同拉取回来,但是比对的时候不需要考虑状态数据,状态数据的拉取可用于应用层面需要状态同步的情形。
数据拉取模块在进行数据拉取前需要对业务数据进行分类,每一类数据是一个datastore,比如Openflow 流表是一类,interface 配置是一类,路由表是一类,标签交换路径(Label Switched Path,LSP)是一类等等。业务数据分类后,在设计业务数据的时候,需要为每一条业务数据加Index 标签定义,用于全局唯一标识该数据表项。比如流表的标签是标准定义的,路由的标签或者LSP 的标签可以自己定义。
交换机内的表项数据有时候规模非常大,比如流表可能达到上百KB 的级别,这么多表项如果一次同步拉取,一方面将影响控制器的性能,另一方面也会影响设备的管理性能。为此,本文将数据在分类的基础上再分块(Data Block),数据块的大小可调节,默认一个块的数据是2 000 条。数据分块之后,控制器向交换机拉取数据的时候,每次最多拉取一个块的数据。由于数据存在标签,控制器知道上次拉取的位置,所以下次就从新的标签处开始拉取,具体流程如图2 所示。
图2 数据拉取流程
1.3 控制层功能设计
控制层是南向数据对账系统的逻辑主体,包括对账管理、对账设备选取、对账权重维护、数据比对与数据修复5 个功能模块。
1.3.1 对账管理模块
对账管理模块根据网络管理员设定的时间周期定时地抽样选取网络设备进行数据比对工作。对账管理模块在初始化时会激活该模块的守护进程,该进程将周期性地调用对账设备选取模块提供的服务,并根据选取结果完成指定设备的数据比对工作。待数据比对工作执行完毕后,对账管理模块将会调用北向接口层的日志管理接口记录比对结果。
1.3.2 对账设备选取模块
考虑到网络规模较大,网络节点较多时,一次性遍历所有设备将会占用大量的网络和计算资源,极大降低了控制器性能,因此需要增加对账设备选取模块来提高数据对账的效率。对账设备选取模块通过调用对账权重维护模块抽样选出对账权重大的网络设备,并将选出的网络设备交给数据比对模块,完成这些设备的数据对账工作。对于数据比对模块所返回的对账结果,对账设备选取模块除了将比对结果传递对账管理模块外,还需要将结果信息作为下次对账权重维护模块进行对账权重调整的依据。一般而言,数据对账的工作量级会随着抽样比例的增大而增加,网络管理员可以根据控制器性能对账灵活调整对账管理任务的工作量级。
1.3.3 对账权重维护模块
该模块主要负责为控制器在管的所有网络设备设定对账权重,使对账设备选取模块可以快速且具有针对性地选出将要进行数据对账的网络设备。对账权重维护模块开始运行时会查询所有网络设备的设备ID 并为每个设备交换机分配一个初始权重,这个权重会根据随着选取情况及后续对账结果进行动态调整。对于上次选出且对账成功的设备,在本次次选取时应降低其对应的权重值;对于在上次选出且对账结果异常的设备,对账权重维护模块则应该提高异常设备的对账权重,确保其能够在下一次数据对账任务中被再次选中。另外,对账权重也与上次选中进行数据对账的时间差成正比,假设第i次设备对账权重W(si),第i-1 次设备对账权重为W(si-1)。W(si)具体计算公式为:
式中:θ表示调节系数;Δt表示本次计算距设备上次选中的时间差;ri-1表示上次设备对账结果,一共有3 种取值,ri-1=1 时表示对账成功,ri-1=-1 时表示对账失败,其他情况下ri-1=0。
由上述公式计算出的对账权重来进行设备选择,权重越高表示设备优先级越高。
1.3.4 数据修复模块
数据比对完成后,对于存在异常配置的网络设备,数据比对模块会通知数据修复模块进行配置修复。数据修复模块在接到命令后会根据比对结果生成对应的策略,对网络设备内缺少的数据,需要生成相应策略补全对应的设备参数,对于多出来的数据,同样需要生成对应策略,以便删除掉这些配置。最后利用设备通信模块完成对网络设备配置数据的修复,并将设备侧返回的执行结果加以解析和整理,返回处理结果给数据比对模块。
1.3.5 数据比对模块
数据比对模块是整个南向数据对账系统的核心模块,主要负责对控制器与其所管控的网络设备进行数据一致性检查。数据比对模块执行时,需要根据设备ID 从Running Datastore 和Config Datastore 中提取对账设备的运行数据和配置数据,并将二者数据进行比对,然后将比对结果反馈给对账设备选取模块,用以作为对账设备模块进行下一次设备选取的依据。在进行数据比对时,为了提高比对效率和速度,本文提出了一种基于差分快照的数据比对方法,下面将展开具体介绍。
2 基于数据快照的数据比对方法
数据比对有两种选择,一种是基于数据库内抽象数据的比对,另外一种基于业务类型与条目的比对。由于网络设备内数据在顺序的分布上可能和控制器不一致,所以选择基于第二种比对方法,即基于业务数据类型的条目比对。在对业务数据进行条目比对时,难点是比对数据量大、任务重。考虑到控制器的性能问题,必须将比对任务离散化,即每次数据比对只是比对一部分数据,与数据拉取类似,通过数据表项的索引来进行多次的数据比对。
在进行单条数据比对时,考虑到如果对记录数据的所有字段逐一比较来实现,需要对整个数据库的所有记录信息进行比对,导致控制器开销较大。考虑到数据指纹技术可以通过提取记录信息的特征来对原始信息进行唯一的标识,由此来提高海量信息的检索效率。因此,本文完全可以将原始数据用数据指纹生成单条表项的数据快照的方式来替代,解决海量数据比对的效率问题。
有了基于数据指纹的数据快照,无需比较记录的所有字段,只需比较该记录的数据是否发生变化。本文中的数据指纹由单条数据表项的“主键”+“摘要信息”的方式构成,“主键”采用单条数据表项的“Index 标签”表示,“摘要信息”采用信息-摘要算法(Message-Digest algorithm 5,MD5)算法[6]对整条项记录计算出的“摘要”。
基于数据快照的数据比对的具体流程如下文所述:
输入:f1、f2(Config Datastore、Running Datastore数据快照),f(f1的MD5 临时表)
输出:增量文件
开始
按块读入方式将MD5 临时表f 读入内存。
根据哈希函数h,计算内存中f 每条记录t1的值h(t1.Key),并建立相应的哈希表。
按块读入新快照f2。
对f2中的每条记录t2,计算其记录摘要即MD5值,将记录的Key 值和MD5 值暂存到链表变量list中,同时根据哈希函数h计算h(t2,K),并与(2)中建立的哈希表进行Key 值和MD5 值的匹配。
重复步骤(4),直到f2中的所有记录都匹配完毕。
对哈希表中剩余的记录,即未被匹配的记录,作为被删除的记录输出到增量文件中。
结束
数据快照的数据比对的流程中,初始化时,创建表f1(Config datastore 数据快照),表f2(Running Datastore 的数据快照),临时表f,这张表包含两个字段,分别保存控制器Config datastore 每一条数据的Key 值和记录摘要(即MD5 值),并在表f 中记录Key 值和MD5 值,由此建立了Config datastore Key 值和MD5 值一一对应的Hash 表。对通过数据拉取模块获取的实时更新的Running Datastore 的每一条记录计算其数据指纹信息,并将生成的Key 值和MD5值与临时表f中的Key值和MD5值进行匹配,最后将匹配失败的记录输出到增量文件中。
3 结语
本文通过分析SDN 网络中控制器与网络设备配置数据一致性的高可靠性与实时性需求,设计了一种基于数据快照的南向数据对账系统方案。该方案在遵循控制器基本框架的基础上,巧妙地利用为NETCONF 协议服务的YANG 语言构建数据模型,提出了基于分片分块的数据巡检拉取方法,避免了因一次同步造成的控制器性能下降问题。并在数据比对过程中提出了一种采用数据快照来替代整条数据记录的方式,生成数据快照由记录的数据指纹(“主键+记录摘要”)构成,“记录摘要”采用在信息摘要中广泛应用的MD5 算法对整条记录计算生成,利用记录的数据指纹来比较和替代记录的全部字段比较,极大提高了数据比对效率。该机制为解决大规模的SDN 网络环境的数据配置同步问题提供了一种解决思路,对于新一代高可靠SDN 控制系统的设计开发有借鉴意义。