近几年来,互联网行业处于一个快速发展的快车道,一个又一个风口不断地涌向周边行业。共享单车的出现解决了人们出行最后一公里的问题;新零售概念的提出,无人货柜的出现,更是将线上和线下的数据打通,优化了人们的购物体验;以抖音为首的短视频应用,在一夜间爆红,成为当下社交与宣传的重要载体。
而数据中心作为支撑这些业务的基础设施,其规模也随着业务的激增逐渐扩大,单集群内超过数万台服务器的情况已不再罕见。面对如此庞大的服务器数量,在网络建设之初的交换机网络开局已成为网工的梦魇。
数据中心开局现状
聚焦于数据中心场景,我们先来回顾一下传统的交换机网络开局流程。
▲传统网络设备开局流程
Step 1:提前准备交换机的版本文件;
Step 2:根据部署的架构场景选择对应的配置模板;
Step 3:开始“搬砖”,到达现场,设备拆箱集中堆放,加电启动;
Step 4:使用U盘插到交换机,串口线连接设备,逐台进行版本升级(若需要);
Step 5:根据配置模板结合实际设备的情况进行VLAN、IP、路由以及其他基本信息的修订,然后开始刷配置(另外按照各公司要求,还会协助收集设备的SN用于资产管理);
Step 6:协调弱电同学帮忙搬到机房上架;
Step 7:基于Checklist完成连通性的测试工作。
整套流程下来,既耗人力,又耗时间。据实际项目经验来看,在不堆叠的前提下完成一台设备的升级和配置大约在10分钟,堆叠情况下由于设备需要重启,需要30分钟才能完成。
总结来看,对于支撑数万台服务器集群的数据中心网络场景,如果按照这种传统的开局模式来部署,会存在以下几点不足:
效率低下:靠手工方式进行设备的版本升级、刷脚本,效率非常低;
出错率高:重复性的工作会导致网工疲于思考,稍有不慎出现失误,需要额外的时间用于排查错误更正,产生一定的时间损耗。
对此,各厂家做了许多的探索,比如零配置上线技术。
数据中心自动化开局
随着数据中心规模的不断增大,标准化的建设方式已经成为主流。每个集群内的服务器以及网络设备的规模都是固定的,对应到网络设备的配置策略也是一致的(当然IP等基础信息会略有不同)。因此,在这样标准化、规范化的场景下,我们可以将这些重复性的、机械性的工作编成处理逻辑,交给网络设备自己去完成上线工作,进而解放人力,同时也降低了人们出错的风险。
厂商对于自动化上线技术的开发,主要是利用编程语言(比如Python、Go等)进行逻辑处理,让网络设备自行加载,完成上线,例如ZAM(Zero-configure Automatic Manage, 零配置自动管理)技术。
交换机自动化上线的思路:新出厂或空配置的设备上电启动后自动向文件服务器中获取文件并加载(包括版本文件、配置文件、补丁文件等),实现设备的免现场配置、部署,从而避免了运维人员重复地执行刷脚本、升级等机械性操作,提升开局效率。
以ZAM技术为例,首先要在运维端搭建统一的DHCP服务器和TFTP服务器(可以是同一台服务器),基于架构标准化设计和项目信息提前生成每台设备的完整配置文件以及版本文件,同时这些文件的文件名需要与设备的SN关联起来,确保每个配置文件可以对应唯一一台具体的物理设备。
▲零配置上线方案架构
交换机加电起机后会主动发起DHCP请求,通过Option拿到TFTP服务器的地址以及脚本名称。通过TFTP的方式下载到脚本文件后,解析并执行。然后自动进行版本的升级以及配置文件的加载,重启后完成设备开局。主要流程如下:
▲零配置上线流程
细节可以分拆成几个阶段来理解:
DHCP&TFTP获取阶段
设备加电后,首先判断自身是否存在配置文件,如果不存在则进入ZAM模式;如果存在则正常加载现有配置文件启动;
进入ZAM模式后,会先尝试从MGMT口上发起DHCP请求,无应答后会从业务口上广播该请求报文。DHCP Server在回应报文中通过Option66(或者150)、67选项,将TFTP Server的IP以及Python脚本名称同步给设备;
▲典型的DHCP配置
交换机设备(需要支持Python的运行环境)进行Python脚本的下载。
自动化执行阶段
初始化:
首先要进行初始化,与此同时要清空之前运行过的本地文件,目的是为了避免那些通过错误逻辑模块到达该处时文件错乱的情况,因此需要执行初始化操作;
上传SN:
初始化完成后需要上传设备自身的SN到指定的目录下,目的是提示TFTP Server该设备已经开始启动。即上传 [sn]. ZAM到 /ZAM_STARTUP/, 若上传失败则写"0"到/etc/zam.txt (通告zam执行失败),退出;
配置参数文件下载:
上传SN之后,会基于SN去下载对应的配置参数文件(.PARAM格式),下载路径在代码中已经写好,若下载失败则跳到错误处理;
配置参数文件解析:
下载成功后解析该文件,判断是否需要升级版本,若解析失败则跳到错误处理;
配置文件下载:
通常情况下,脚本中会默认写好配置文件的下载路径,设备会基于SN到该路径下载配置文件 [sn].CFG, 若下载失败跳到错误处理;
版本文件下载:
如果配置参数文件中存在bin文件的标识,则到指定的路径去进行bin文件的下载,若下载失败则跳到错误处理;
版本文件升级:
如果存在bin的文件,则进行升级bin文件,若升级失败则跳到错误处理;
配置文件重命名:
执行代码做配置文件的重命名,更改成config.txt的格式后重启(不同厂家配置文件命名不同,这里以锐捷为例);
设备重启加载:
重启设备后则再次进行配置文件的判断,发现此时存在配置文件,则不进入ZAM模式,正常加载配置文件并启动。
信息同步校验阶段
成功处理:
设备成功上线后
A. 上传 [sn].log 到 /ZAM_LOG/
B. 上传 [sn].ok 到 /ZAM_STATUS/
C. 写"1"到/etc/zam.txt
(通告zam执行成功)
D. 清空本地本次执行相关文件
([sn].CFG, [sn].ZAM, [sn].params, [sn].ok, [sn].error)
▲ZAM文件夹目录
▲成功执行ZAM流程
失败处理:
主逻辑任意一个节点发生故障,跳到故障处理时,执行下列动作
A. 上传 [sn].log 到 /ZAM_LOG/
B. 上传 [sn].error 到 /ZAM_STATUS/
C. 写"0"到/etc/zam.txt(通告zam执行失败)
D. 清空本地本次执行相关文件([sn].CFG, [sn].ZAM, [sn].params, [sn].ok, [sn].error)
探索创新
随着网络设备对于类似Python的高级编程语言环境的支持愈加成熟,零配置上线技术在IDC场景中得到了普遍的应用。一方面加快了设备的开局速度,降低了人为操作失误的风险,节省人力投入;另一方面,对于后期设备的运维工作(比如扩容、故障替换等),只需要上报或者替换SN就可以自动完成加载,也不需要人工的参与。