出于业务的需求,我们急需一个PCDN管理平台,以实现对大规模机器的业务自动化部署和管理。PCDN业务中涉及的PPPOE拨号、专线IP等网络接入方式,这一部分由agent来完成。 AutoPCDN的开发基于Python3及其众多依赖库,如pysnmp、requests、psutil、watchdog等。实现了与控制平台的数据交互、PCDN网络(包括pppoe拨号和专线IP)的自动部署、业务环境配置,以及网络和硬件性能监控服务,同时提供给客户信息调用API。
- 系统:centos 7
- python版本:3.6+
- 依赖库:psutil、pysnmp、watchdog
|-- auto_pcdn.py # 主程序入口,用于启动pcdn初始化、线路质量监控和信息更新推送等功能
|-- modules/ # 功能模块文件夹,包含主模块依赖的子模块
| |-- __init__.py
| |-- data_sync.py # 与控制节点进行信息同步,实现信息更新推送功能
| |-- network_monitor.py # 实现线路质量监控功能
| |-- pppoe_init.py # 拨号前的环境的部署,配置生成
| |-- route_keeper.py # 动态路由的维护
| |-- logger.py # 日志
|-- config/ # 配置文件目录
| |-- config.json # 包含服务请求api、请求方法的定义
|-- tests/ # 测试文件夹,包含所有的测试用例
| |-- test.py
|-- log/ # 存放分片日志
| |-- auto_pcdn.log
|-- scripts/ # auto_pcdn程序的引导shell脚本
| |-- init.sh
|-- requirements.txt # 项目所有依赖的库
|-- README.md # 项目的README文件,描述项目信息、安装步骤和用法等
-
从pcdn控制平台获取当前机器的网络配置信息
-
检测获取到的网络配置信息是否非空,且判断其网络类型是[pppoe]还是专线,是否带有[vlan]等
-
开始对当前客户端机器的网络进行初始化配置,在初始化钱会判断之前是否配置过,如果配置过,则不进行配置(如果需要更新在平台更改提交即可)
- 安装各种拨号环境所需软件(如果是pppoe业务)
- 修改当前机器系统文件来写入网络配置信息
- 启用网络,并测试网络的连通性
- 写入对应网络连接的路由信息
-
初始化完成,按照网络类型启动相应的线程,并作为当前机器的后台服务持续运行
-
如果网络类型是pppoe,启动以下线程:
- 断线重播监控上报
- 动态策略路由维护
- 节点配置更新检查
- 节点信息更新上报
- 运维监控数据采集
-
如果网络类型是专线ip,则启动以下线程:
- 节点配置更新检查
- 节点信息更新商报
- 运维监控数据采集
-
**注意:**AutoPCDN程序必须通过PCDN平台进行下发操作配套使用,因此不再提供手动部署流程,如需要手动部署可以参考引导程序中的shell代码,在第三节我会详细介绍。
- 已在PCDN平台添加了节点机器的网络配置
-
在PCDN平台的“批量执行”功能中选择需要执行的机器,并选择模板“ AutoPCDN-初始部署”,然后开始执行
注意
这里执行模板中的代码实际上就是项目scripts下的init.sh文件中的代码,在后面“配置维护”内容会具体介绍
- 定义一些辅助函数:包括设置运行标记、检查运行标记、检查专线类型、检查PCDN类型等。
- 定义多个线程函数,包括动态策略路由维护、断线重拨监控上报、节点信息更新上报、运维监控数据采集上报和节点配置更新检查等。
- 用于创建线程对象并启动线程。
- 根据从控制节点获取的信息,进行环境初始化和网络配置。
- 根据PCDN类型,启动相应的线程。
这个模块主要用于PCDN环境部署初始化,包括配置DNS、关闭NetworkManager服务、安装必要的软件包、加载802.1q模块、配置SNMP服务、修改主机名、写入拨号账号密码、创建接口配置文件以及路由表等操作。
这个模块主要功能包括从控制节点获取配置信息、监控拨号连接状态、检测网络连通性、以及将监控信息上报至控制节点或客户端。
这个模块负责网络和硬件监控,主要用于采集系统的各种信息并将其推送到控制平台。
这是一个路由维护模块,用于管理linux系统中的路由规则,包括删除无效路由、添加新拨号网卡获取的IP路由等功能。
这个模块实现了检查pcdn控制平台是否存在拨号信息的更新,并根据更新情况执行相应的操作。
这个模块是一个文件监控程序,主要是服务于客户的重播接口,客户把需要重播的接口写入redial.info
即可,改模块会实时监听这个文件的改动,当文件内容发生变化时,会读取文件内容并根据内容中的特定格式信息执行相应的重播操作,同时记录相关日志。
这个模块是用于配置日志记录器,将日志信息同时输出到控制台和文件中,并使用不同的格式和颜色进行显示。
这个脚本就是PCDN平台中执行模板“AutoPCDN-初始部署”里所包含的代码,它的作用是初始化系统环境,为后续运行名为"auto_pcdn"的程序提供所需的环境。如需手动部署,也可以参考这个shell脚本中的内容,这个脚本主要进行了如下的操作:
-
配置DNS
检查系统的DNS配置,如果未配置,则将DNS设置为114.114.114.114和8.8.8.8。
-
校准时间
安装ntpdate工具,从time.windows.com同步时间,设置系统时区为Asia/Shanghai,并将硬件时钟与系统时间同步。
-
检查是否已经启用BBR
检查系统是否启用了BBR拥塞控制算法。没有则安装wget工具,下载并安装ELRepo的RPM包,安装新的内核,更新GRUB配置,设置默认启动内核,并开启BBR。
-
检查服务状态
检查名为"auto_pcdn"的服务是否处于活动状态,如果是则输出相关信息并询问是否重新部署,否则返回0。
-
安装Python3环境及外置库
函数安装Python3及相关开发环境,然后使用pip3安装requests、pysnmp、psutil和colorlog等外置库。
-
创建系统服务
创建名为"auto_pcdn"的系统服务,以自动运行/opt/auto_pcdn/auto_pcdn.py脚本。
-
部署AutoPCDN程序
创建/opt/auto_pcdn/目录,下载、解压auto_pcdn.tar.gz程序包,安装yum-fastestmirror插件,安装Python3环境及外置库,创建系统服务,并监视日志。