河南联通IPTV平台使用Python脚本和SVN管理交换机配置文件
摘要:河南联通IPTV平台为实现更加易于管理、审计且更安全的交换机配置管理方式,基于Linux服务器搭建SVN服务来监控设备配置文件的内容变更,更加扁平化的管理大幅提高了维护工作效率和准确性。
关键词:交换机、Python、SVN、paramiko、运维自动化
1 原先的管理方式
1.1 统一网管系统NMS
河南联通IPTV平台使用“省中心节点-地市区域中心节点-区县边缘节点”三级架构来承载全省的IPTV业务,每个节点都通过交换机对接IP网路由器,因此有大量的交换机需要周期性执行配置文件备份任务,在2019年之前维护人员长期使用统一网管系统NMS来定期采集和存储,以及监控配置文件的变更,如图1-1:
图1-1:NMS备份文件
1.2 面临的问题
在日常使用中,NMS表现出不适配新式浏览器,响应请求速度慢,操作步骤繁琐,不易检索备份成功与否等弊病,更重要的问题是执行备份操作必须通过telnet协议管理交换机,这使管理设备时所有的通信数据都将以明文方式传输,一旦通信被监听就会直接暴露内容。与telnet协议相比,当前主流的ssh协议基于SSL(Secure Sockets Layer)进行数据加密,不依赖安全的信道即可提供强大的身份验证和安全通信,同时还能有效防范DNS和IP欺骗;
2 新方案设想
2.1 设备资料的管理
根据NMS存在的问题,设计新的模式来管理数量庞大的网络设备,使用程序脚本作为原先的网管系统的补充,而登陆方式选择更安全的ssh,同时需要能够简便的完成配置文件的对比,考虑到维护终端通常使用的是windows系统,设备资料可以由excel表格形式记录,如图2-1:
图2-1:部分设备管理资料示例
2.2 语言和方案的选择
脚本语言常见的有bash和python,其中bash下的multissh工具在Linux下可以批量完成ssh交互,但一方面不能直接在windows环境运行,另一方面对excel的支持远不如Python优秀。
Python下常用的ssh工具有paramiko和pexpect模块,尤其pexpect工具甚至可以完成ssh下的交互式操作,但由于平台限定Linux而无法在维护终端运行,最终选择paramiko工具来制作脚本,并通过openpyxl模块查阅设备资料。
2.3 系统网络的设计
IPTV平台现有中兴平台和华为平台两个基本相互隔离的网络域,承载不同地市的业务,所以需要在中兴和华为的跳板机上分别部署脚本,完成各自区域的采集后再提交到维护班网络域的服务器上进行汇总归档,如图2-2:
图2-2:系统网络架构
3 SVN系统介绍
3.1 SVN简介
SVN (全称Subversion) 是一个开源的版本控制系統,专门用于管理着随时间改变的数据。这些数据存放在一个中央资料档案库 (repository) 中。这个档案库相当于一个普通的文件服务器,不过它会记住每一次文件的变动(Version)。这样既可以随时将档案恢复到一个旧的版本,又可以浏览审阅文件的变动历史,如图2-2。
图2-2:SVN Version 记录方式
SVN存储版本数据有 2 种方式:BDB (一种事务安全型表类型) 和 FSFS (一种不需要数据库的存储系统)。因为 BDB 方式在服务器中断时,有可能锁住数据,所以还是 FSFS 方式更安全一点。
BDB:伯克利 DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,不能再通过网络共享的文件系统上使用,伯克利 DB 是 Subversion1.2 版本以前的缺省版本库格式
FSFS:一个专用于 Subversion 版本库的文件系统后端,可以使用网络文件系统(例如:NFS 或 SMBFS)。是 1.2 版本及以后的缺省版本库格式。
SVN 是基于关系型数据库的 BDB 或一系列二进制文件的 FSFS。这解决了许多问题(如:并行读写共享文件)以及添加了许多新功能(如:运行时的事物特性)。然而另一方面,数据存储由此变得不透明,不能像 ftp/samba/nfs 等能看到实体的文件。
(3)工作原理
SVN 是一个增量式的版本控制,它不会将各个版本的副本都完整的保存下来,而只会记录下版本之间的差异,然后按照顺序更新或者恢复特定版本的数据。这使得服务端的存储量变得非常低。
图2-3:SVN 系统架构
3.2 SVN 与 GIT 的区别
3.2.1SVN 是集中式版本控制系统
SVN 版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发者本地开发所使用的代码都是来自于这个版本库,提交代码也必须提交到这个中央版本库。
优点:对于某些项目的核心代码或者是一些重要的保密性要求较高的项目,SVN比 git 更适合。
SVN支持空目录
SVN有更好的 windows 平台支持
SVN可以单独 check out/clone 一个子树(sub-tree)
SVN支持特权访问控制 svn lock,在处理很难合并的文件时非常有用
SVN支持二进制文件,更容易处理大文件
学习成本低、使用简单
缺点:
无网的情况下无法提交代码,无法查看代码的历史版本、无法同步代码
代码要定期做备份(所有的代码数据及版本变更记录)
分支切换缓慢
由于每次提交都会保留一个原始副本,因此 SVN 的数据库容量会暴增。尤其是在开发人员非常多的情况下。
3.2.2 GIT 是分布式版本控制系统
git 没有中央版本库,但是为了方便开发小组的成员们进行代码共享,通常会搭建一个远程的 git 仓库。和 SVN不同的是开发者本地也包含一个完整的 git 仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。
优点:
比 svn 方便和快捷的切换分支
书写的代码可以随时提交
丰富的命令行操作和组合
可以一人一个仓库,仓库可以有多个分支
缺点:
官方的图形化集成工具不够好用
不支持二进制文件
学习成本高
3.2.3 集中式版本控制更适合本系统
综上所述,由于维护环境大多使用windows,且需要为中兴和华为平台的设备配置按文件夹作为子树汇总check out,SVN相对更合适。
4 方案的实施
4.1 脚本制作和改进
首先,IPTV平台所使用的交换机包括华为和中兴两个供应商,而两种交换机的交互命令完全不同,需要加以区分,二者在管理资料表格中也存储在不同的Sheet中,并且抓取的配置文件名需要按设备资料中的“地市”、“类型”、“名称”、“设备”这四个字段拼接,主函数要处理上述两个问题。
主函数逐行将ssh登陆信息通过多线程模块thread提交给paramiko完成批量登陆,然后分别执行中兴或华为的取消分页显示命令,接下来提交打印配置文件命令,最后将显示结果写入本地文件保存在$HOME_DIR下对应地市的路径。执行后会在屏幕上打印执行状态如图3-1所示:
图3-1:脚本执行日志
4.2 SVN服务的搭建
为便于班组同事协同工作,SVN服务搭建在办公网内的一台树莓派服务器上,建立工程项目backupSW,并通过配置svnserve.conf、authz来完成用户的读写权限划分,如图4-1:
图4-1:svnserve.conf配置
在authz文件中指定管理员组可以执行add、commit等操作,普通用户组只能读取。
TortoiseSVN 是 Subversion 在操作系统上的图形客户端程序,开源、免费 支持网络上进行跨平台离线修改。配置完成后通过本地的TortoiseSVN客户端对备份文件夹执行svn check out,之后每次脚本运行完毕接着执行svn commit,有变更的文件会在log中列出,变更的行会在文件中高亮标记,效果如图4-2和图4-3:
图4-2:TortoiseSVN的日志显示
图4-3:TortoiseSVN的文本内容对比
4.3 不同维护区域的划分
出于“省IPTV平台-中兴区/华为区”分权分域和安全管理的需要,对SVN的目录树按“用户组-用户”来进行详细权限划分,创建写入权限的账号并分别配置在两台网管监控电脑,IPTV用户组配置所有文件的只读权限,用于日常巡检维护,中兴/华为用户组配置各自子树的只读权限,用于驻场工程师割接前后的配置比对,项目树和权限配置如图4-4和4-5所示:
图4-4:部分配置文件路径结构
图4-5:SVN 子树权限配置
4.4 与统一网管系统的对比
新方案使用程序脚本配合版本控制的方式作为NMS系统的补充,取得了明显的成效:
解决了不启用telnet模式无法批量备份配置的问题,提高平台的安全性;
执行备份任务可以即时获得成功与否的反馈,确保备份可用提高应急恢复能力;
SVN控制下文件的修改更加易于监管,提高管理效率;
管理手段更加灵活可控,易于根据今后的需求扩展和修订;
5 总结和展望
本方案的制订和实施过程中对比了multissh、pexpect、paramiko三种手段,实践了SVN服务器的搭建和管理,方案成果能够很好的弥补NMS系统的短板,而且具有很高的扩展性和改造空间,有望在更多的运维场景中获得应用。