为了满足大规模数据中心网络配置自动分发、运维效率提升、混合云网络实时连接的需求,UCloud团队开发并推出了物理网络调度器(以下简称调度器)。它是网络运维自动化建设的基础应用系统,为网络运维人员提供简单易用的网络设备配置工具,将他们从繁琐的交换机命令编写中解放出来,具有足够的准确性、稳定性和安全性。
基于该系统,数据中心建设数万IDC的建网周期从原来的2-3天缩短到2-3小时,上线成功率也从之前的80%提高到99%。截至目前,该系统已成功服务3000多台交换机,维护100多条运营商专线。其网络接入吞吐量高达200G,DCI(数据中心互联)吞吐量接近2T,可支持用户控制台网络中混合云服务的实时连接(物理布线除外)。
分析难度
传统的网络部署主要通过手动配置来实现。当网络达到一定规模时,使用人工堆叠效率低下,大量的配置命令容易导致更高的在线错误率。结合公司现状,在分析了业界开源的配置分发方案后,我们决定用NAPALM (Python module)方案搭建一套基于Python的业务配置分发系统。这个系统的内部代号是玄武(中国的玄武)。
虽然凝固汽油弹模块底层的配置分发系统(如Ansible、Paramiko、Salt)是通用的,但目前只有主流厂商支持相应的库,部分二线品牌厂商支持不完善,需要自己开发。指望发送厂商提供丰富、标准的配置分发API是不现实的。我们需要结合我们的业务开发一个适合UCloud的配置分发系统。
通过分析,我们发现如果我们想开发一个基于业务的网络编导,我们必须解决以下障碍:
1.同一个底层,不同设备厂商提供的配置命令不同。比如创建一条同样要求的静态路由,锐捷的命令是“IP路由0.0.0.0 0 1.1.1.1”,而华为的命令是“IP路由-静态0 . 0 . 0 . 0 0 . 0 1 . 1 . 1”;
2.同一个设备型号,由于软件版本不同,实现同一个功能的命令组合也不同。比如华为的CE6851-48S6Q-HI设备也实现了隧道创建功能,当版本
3.不同厂商的设备为实现相同的需求有不同的配置模式。如果将交换机的物理端口分配给某个聚合端口配置需求,华为只需要将物理端口绑定到抽象的聚合端口,就可以继承聚合端口下的所有属性,而H3C需要在物理端口下重新配置聚合端口的属性。
4.……
这些大大小小各种人都能解决的问题,让自动化变得困难。为了实现网络配置的自动化,首先要把这些问题抽象成具体的场景,然后通过分类来避免差异。
Orchestrator架构和业务模型构建
经过内部的多次讨论和归纳,我们发现真正的业务是在特定的场景下调用网络的,而这些场景确实能够满足特定的需求。比如一个业务的需求是打通托管路由到公有云,那么网络实际上实现了静态路由的交付,静态路由的交付就变成了一个配置场景。
这里需要注意的是,场景并不关心设备制造商,所以会出现两个问题:1。配置命令的差异;2.配置模式的差异。我们需要抽象这两层。经过测试和抽象,我们设计了商业模式的网络配置分发系统:
图1:1:UCloud基于场景的网络配置分发系统架构图
第一步:构建原子命令类。由厂商,设备型号,型号版本,版本补丁构成一个原子命令的类,该类原子命令为一个录入模板。第二步:原子命令录入。先录入功能,再录入功能对应的原始设备命令。第三步:创建模板。将一个或者多个原子命令拖拽构建成能对应业务需求的模板。第四步:创建API。为模板建立对应的KEY值,使其能够为灵活的以API的方式被业务调用。
以一个具体的API创建过程为例。首先输入设备的软硬件版本,将软硬件组合成一个单元,根据原子命令规范抽象出一层组组,每组为一个原子命令输入标准,然后根据命令功能关联一个或多个原子命令。
具体组成图如下:
图2:命令功能-原子命令-版本组-软硬件设备对应表
图3:API-场景-模板-命令函数对应表
场景涉及的命令函数创建完成后,前端布局创建模板,结合实际属性自动生成字段,这样就基本完成了K-V的API模型。但是,此时的创建只能与特定的设备类型场景相关联,如果其他场景有其他设备,则API不会生效。因此,需要将与组组相关联的多个场景添加到大场景组中,并以大API的形式暴露出来,这样API就可以兼容多个厂商的配置命令。
设计和优化实践
考虑到现有网络的特殊性,调度器必须具有较高的准确性、稳定性和安全性。为了满足以上特点,整个系统在架构设计和代码开发过程中也做了一系列调优实践。
1.基于Kafka的命令执行队列设计
调度人员需要根据一定的业务应用场景(以下简称场景),向公司所有正在使用的机房下发交换机配置命令。以IDC机房为空之间的维度,以配置命令的执行顺序为时间维度。每个场景的执行必须控制在时间顺序上,考虑空和时间之间的维度。
为了保证配置指令的准确执行,我们采用了基于Kafka的命令执行队列设计。Kafka消息队列的主题分类特性和消息队列的生产消费特性可以很好地兼顾指令发布队列模块对时序控制的需求。话题分类特性可以用来处理IDC机房的空维度,而消息队列的生产和消费特性对应的是指令执行的时间维度。
在实际应用过程中,通过分析业务场景,将交换机配置指令按照IDC机房产生到对应的Kafka主题,同一IDC机房的配置指令会以交换机为单位,按照执行的顺序产生到对应的主题。
图4:基于Kafka的命令执行队列设计
利用Kafka的两个特点,结合系统的业务场景分析逻辑,最终实现了交换机配置指令的时间空维度控制,保证指令的准确交付。到目前为止,系统一直在线运行,没有出现配置指令被误发的情况。
2.集群、主/备用和主/主设计的应用
作为网络运维自动化建设的基础系统,后期将向更多部门开放部分或全部功能,因此调度器服务的稳定性尤为重要。系统考虑了使用集群等高可用技术的各个环节,制定了以下稳定性提升设计方案:
1.Zookeeper集群(基本操作);
2.Kafka集群(基本操作);
3.Kafka消费集群:在每个IDC机房部署Kafka消费集群,保证配置指令消息的稳定消费和执行;
4.MySQL数据库1主2备:数据库读写分开,主数据库只接受写操作,从数据库只接受读操作,降低了主数据库的负载,提高了数据库服务的稳定性;
5.webserver master:提供两台web后台服务器,通过Nginx代理实现负载均衡,结合数据库双备用设计,实现API请求和数据库读操作的均衡分配。
通过集群化、主备和主从的设计,编排器提供的Web服务变得更加稳定,配置指令消息队列更加可靠。自系统上线以来,没有因web服务器或消息队列停机而导致服务不可用。
3.许可设计
当系统涉及到现网交换机的变更操作时,每个业务场景的实施都会对现网产生影响,适当的权限管理也很重要。系统从两个层面限制操作员的权限,并启用后端令牌认证:
1.API权限:涉及业务场景的数据库增加、删除、修改、查询、分发(回滚),由1对1 API权限划分管理;
2.菜单权限:涉及菜单级别的UI界面操作,对前端操作页面的菜单项权限进行划分和管理;
3.令牌认证:当后端调用API时,将执行令牌认证。Token与运营商一一对应,责任在人。
图5:令牌认证过程
通过授权认证,可以规范用户的操作习惯,强化用户的安全意识,最终提高整个系统的安全性。
4.发出指令后实时反馈。
在传统的手动配置模式下,每个网络运维工程师都必须登录到相应的交换机下发配置指令,同时观察交换机的回波信息以确认指令执行结果。为了重现这一过程,提供更加友好的信息提示效果,系统集成了指令执行结果实时显示的功能,并提供执行结果的详细信息查询,供网络运维工程师参考和决策。
具体来说,编排器的前端接口提供了两种方式来显示业务场景执行过程中的执行结果信息:
1.执行状态:每条指令的执行状态分为六种:下发成功、下发失败、即将回滚、回滚成功、回滚失败、登录失败,在业务场景下发过程中通过不同边框颜色实时显示。
图6:指令执行状态描述
图7:指令执行状态显示界面
2.指令执行的回显信息:大部分指令执行完毕后,会有回显信息提示开关,系统会自动捕捉开关的回显信息,反馈到前端,为操作人员提供参考。
图8:指令执行回显信息的显示
这种图形颜色和回声信息的显示,可以实时反馈配置指令的执行效果,为网络运维工程师提供参考,在提高自动化水平的同时,改善运行反馈体验。
5.原子命令库的建立
公司使用的开关主要有三大品牌:HW、H3C和锐捷。各大品牌交换机的配置说明差异很大。同时,每个品牌下的开关可以分为几个型号,不同型号之间的一些说明是不一样的。
为了兼容公司使用的所有交换机,需要对所有交换机型号进行统一管理,同时根据不同的交换机型号输入配置指令,做好分类管理。基于上述背景和需求,系统构建了一个原子命令库,包括以下子库:
A.交换机设备库:以厂商、型号、版本、补丁为分类字段,梳理公司所有在用交换机;
b、交换设备组库:在交换设备库的基础上进行分组,将配置指令相同的设备划分到同一组中;
C.原子命令库:原子命令基于交换设备组录入,从原子命令的功能维度分类;
D.原子命令函数模板库:用于输入切换命令的函数模板;
E.原子命令参数模板库:用于输入开关命令的各种参数模板。
通过建立原子命令库,可以统一管理所有使用中的交换机及其适用的配置指令。在交换机组的设计中,可以将配置指令相同的交换机分组到同一组中,同一组中的设备共享原子命令,大大减少了输入原子命令的工作量。此外,通过建立原子命令函数和参数模板库,可以规范原子命令输入方式,为业务场景布局打下良好基础。
6.API开放和二次开发
系统提供原子粒度的交换机操作API,不仅支持现有网络运维,还可以作为外部调用组件支持相关二次系统开发。同时,通过提供统一的、精细分类的API入口,可以实现对现网交换机操作的集中管理,提高现网的安全性。目前已为系统(UCloud服务器自动交付系统)和UXR项目提供底层调用API,支持系统开发和相关业务开发。
最后
经过调试测试,我们已经将该系统应用到多个业务场景中,并且都具有良好的性能。通过网络自动部署系统,我们将数据中心建设业务中数万个IDC的建网周期从原来的几天缩短到了几个小时。此外,在线成功率从80%提高到99%。当混合云服务开放时,虚拟网络的业务逻辑也可以通过用户的控制台操作实时打开(物理布线除外)。
—结束—
在即将于12/21日举行的“UCloud用户大会暨TIC上海站”上,UCloud将与与会者探讨云主机IO加速的产品设计理念、技术细节、未来发展等话题。欢迎点击下方二维码或阅读原文报名。我们期待您的光临!