海南地球物理站网运维辅助平台系统的设计与实现*

2023-11-22 08:40张华美陈祥开庞鑫柏黄经国黄章荣洪旭瑜
地震科学进展 2023年11期
关键词:站网一键备份

张华美 陈祥开 庞鑫柏 黄经国 黄章荣 洪旭瑜

1) 海南省地震局,海南 海口 570203

2) 新疆维吾尔自治区地震局, 新疆 乌鲁木齐 830011

3) 中国地震台网中心, 北京 100045

4) 福建省地震局, 福建 福州 350003

0 引言

保障地球物理站网数据的完整性和安全性,是做好防震减灾工作的基础。运维好地球物理站网是极其重要且有意义的工作。

海南地球物理站网有3 个数据中心站,1 个区域中心,共计4 个节点。2022 年海南地球物理站网在推进数据迁移时,将部署在外的服务器节点,统一迁回海南省地震局的一楼机房。此机房配备双电流输入、备用电源、网络硬件、动环监控等软硬件设施,符合数据服务器部署环境。海南地球物理站网管理系统是在Suse11 操作系统下部署,数据库采用的是Oracle 10g版本,硬件部署是基于两台联想SR860 服务器,考虑到系统兼容问题,并兼顾未来发展国产化系统可变列装问题,海南地球物理站网采用阿里私有云架构,构建国产化虚拟机平台,并将数据服务器的节点部署于虚拟机中。目前该平台已建成并投入使用[1-3]。

应用Django 和Python 技术[4]开发海南地球物理站网辅助平台系统(以下简称 “辅助平台” ),可视化的操作[5-6]有助于运维人员落实运维工作时高效有序。根据运维工作实际,辅助平台共设计4 大功能模块,分别为: ① 服务器情况:主要通过页面获取并显示服务器磁盘、数据库和内存的使用情况,有助于运维人员查看软硬件的现状; ② 一键传输:主要将冷备份好的数据包,从服务器节点下载至本地进行二次备份,避免服务器因宕机而丢失数据,保障数据完整性,同时减少使用辅助远程工具时的重复性操作;③ 一键生成报告:主要将每个月的数据库和服务器硬件的使用情况,产出一张Excel 表格报告; ④ 一键备份:主要通过按钮实现前端给后端指令,完成数据库备份。

1 辅助平台系统设计

1.1 需求分析

海南地球物理站网运维,每天检查一次服务器软硬件,每周检查一次数据库,每月至少两次冷备份,每月将检查结果整理成Excel 表。这里的每次检查都需要借助远程软件登陆服务器,通过指令查看服务器软硬件情况。6 台服务器则需要登陆6 次,重复性动作是6 的倍数。每次查询结果,都使用Excel来登记,登陆的服务器密码,也都整理成Excel 表,每次登陆都得打开查看。看似简单的工作,因重复性操作,使得运维起来比较耗时。备份工作也是按照手册逐步操作,6 台服务器也就是重复操作6 次。如果服务器增多,重复操作会更多。由于地震行业设备资源具有异构性、分布性与自治性等特点,既然重复性操作多,那么可使用计算机批处理,使工作变得简单化,系统化[7-8]。

1.2 部署环境

本研究运用Python 3.8.3 语言基于Django 4.0.4技术开发,数据库使用MySQL 5.7.37 版本。import Python 包有:paramiko,requests,xlwt,os,re,StringIO,BytesIO,datetime,render,cx_Oracle,PyMySQL 等[9]。由于辅助平台开发环境是在内部网络部署,因此Python 包需要通过其他电脑互联网下载包后再上传至服务器中,方能安装使用。前端Html 采用免费Vscode 软件开发,后端使用Virtualenv 虚拟环境部署开发环境。采用Virtualenv 的原因是考虑到在同一台服务器上,当增加其他项目时,开发环境不会因其他项目改变现有环境,相当于一个独立生态圈,有利于后期的运维(图1)。为了访问稳定,采用Uwsgi 部署应用服务。

图1 系统结构图Fig.1 Chart of system structure

1.3 结构设计以及逻辑部署

系统架构分为3 层:前端、后端和数据库[10-11]。辅助平台以Python 为基础语言进行结构设计,使用Virtualenv 虚拟环境,部署Django 和Uwsgi,其中Django 由App 和Django 文件类组成(图1),而App 主要由数据库设计models.py、后端处理程序views.py 和静态网页template 组成,Django 则主要由访问路由url.py 和Django 的配置文件组成,通过url.py 将前端Html 与后端建立连接。业务通过前端Html 的Ajax 或者JavaScript 调用POST 或GET 方法来响应[12],后端views.py 则处理数据层和访问数据库层。

1.4 表结构设计

将Django 部署完毕后,通过在App 层下的models.py 建立数据库表,无需到MySQL 下创建。在models.py下创建数据库表完毕后,执行 “python mange.py makemigrations” 和 “python manage.py migrate” 两条指令,即完成表格的创建。

设计此辅助平台,共建立了5 张表格:Users,Base_info,Oracle_info,device_info 和do_user (表1),其中Users 表是存储用户注册和登陆;Base_info 表存储服务器基础信息参数,主要用于产出Excel 报告所用到的基础信息;Oracle_info 表存储地球物理站网数据库Oracle 的表空间参数,也为产出Excel 报告提供参数;device_info 主要存储服务器的磁盘空间参数;而do_user 用于当执行一键备份时,前端会弹出再次确认,执行此命令需要输入用户和密码,方可执行,避免不小心点击到按钮[13-15]。

表1 辅助平台数据表Table 1 Auxiliary platform data sheet

2 业务逻辑的实现

2.1 业务功能实现

辅助平台主要由4 大模块组成: ① 服务器情况;② 一键传输; ③ 一键生成报告; ④ 一键备份(图2)。

图2 功能模块图Fig.2 Diagram of functional modules

(1)服务器情况模块主要由3 部分组成:服务器参数、磁盘空间和数据库表空间。服务器参数主要查阅服务器的内存、CPU 和使用的系统情况,展示使用EChart 饼状图和表格显示,并把更新数据参数写入MySQL 的表Base_info 中;磁盘空间则是查阅服务器的磁盘空间,重点查阅剩余量,使用EChart 饼图联合曲线、表格显示,并更新数据参数写入MySQL 表device_info 中;地球物理站网运行的Oracle 数据库表空间读取出来,并显示出哪个服务器节点的数据库表空间最高,便于运维人员做扩容计划,如果超过70%时,则提醒运维人员,要马上扩容Oracle 数据库[16-18],并更新数据参数至MySQL 表Oracle_info 中。

(2)一键传输模块主要把各节点已做好冷备份的数据包传输至移动U 盘,等同于远程登陆服务器下载数据包至本地移动U 盘或者移动硬盘,完成双重备份。

(3)一键生成报告模块是把一个月的运维检查工作汇集成一张表格,以表格的形式将检查的结果下载保存,无需逐个登陆服务器输入命令查看、登记、计算和汇总,减少重复性登陆和输入命令,提升工作效率。

(4)一键备份模块主要是远程登陆服务器,执行备份命令,功能有两个选择:一种是直接一键执行各节点的服务器备份,此命令尽量在夜间执行,因为等待时长稍微久一些,从实际工作来看,适合批量备份工作;另一个是以各个节点的服务器来启用和关闭,做到有序进行,也是一键完成,不需要输入命令代码,减少运维人员负担。

2.2 功能实现过程

部署开发环境极其重要。项目部署在海南省地震局一楼机房服务器,由于禁止互联网访问,所以在部署环境时,必须要考虑Python 包的安装问题。在实际项目中,没有使用PyCharm 软件做开发的原因是该软件不是开源的。此外,当项目从PyCharm 迁移至实体服务器时,编译因环境从Windows 变到Linux后,总有Bug 出现,需花费大量时间来解决。为了避免此类问题,采用了Virtualenv 虚拟环境,直接部署在服务器上,等同于圈住开发环境,省去后续运维麻烦。

安装Python 软件包的版本必须与之相兼容,而非最新版,否则一些软件包由于版本过高会产生Bug,甚至根本达不到想要的效果,从而给开发带来很大麻烦。

海南地球物理站网辅助平台系统的设计思路是通过Django 技术进行外围辅助操作,而不是改变操作,基于此思路,将需求分析模块化,明确功能目标,从两方面来获取数据参数:第一从服务器读取参数,通常运维人员会借用远程软件登陆各节点服务器,通过执行指令获取,现在Django 技术可以通过Python 的一个paramiko 包,模拟用户远程登陆,从而执行指令代码,再从指令得出的结果读取我们想要的数据,存入创建好的MySQL 数据库表中;另一方面是读地球物理站网Orcale 数据库表空间,通常我们有3 种方式来查阅数据库表空间: ① 使用 “toad for oracle” 软件来查阅; ② 远程登陆到服务器,进入到数据库里,输入命令查阅; ③ 登陆地球物理管理系统区域中心查阅表空间,其中第3 种是我们日常工作常用的方法,但是利用此方法获取的结果,有时候qzdata、system 和sysaux 会显示串行,有时运维人员会看错行。此外,还需要逐个看哪个节点数据库表空间超过70%的使用率,需要及时扩容[19-20]。以任何方式获取数据库表空间都是可以的,但对于运维人员,更希望只要使用一个软件,或者一个平台,就能把所有该干的活都做完即可,最好能一键完成。地球物理站网辅助平台是把所需功能集中在一起,仅需要登陆此平台一次就可进行运维检查,包括备份、传输、产出Excel 表,重复性的工作交给电脑。为此,项目采用的是Python 里的cx_Oracle 包,模拟登陆数据库,模拟输入指令,并把结果返回前端oraclehtml.html,有需要的数据则写入MySQL 数据库中,为产出Excel 做准备。常用的代码是使用paramiko 包,做一个连接服务器的方法getConnectionSSH(),使用时调用该方法即可连接到服务器,而连接服务器的Oracle 方法是用了cx_Oracle 包里的connection()方法,主要是连接Oracle 后,读取表空间和操作数据库命令sql 时,变得很简单。

实现一键备份时,采用paramiko 模拟登陆服务器,通过命令command= “sh/opt/install/stoprun.sh” 关闭应用端,通过命令command= “sh/opt/install/run.sh”开启应用端;使用cx_Oracle 包连接Oracle后,通过命令command= “shutdown immediate”、command=“lsnrctl stop” ,关闭数据库和监听,通过命令command=“startup”、command= “lsnrctl start” ,启动数据库和监听。最后使用paramiko 模拟登陆服务器,执行备份指令,结果通过Ajax 和js 交互到前端,便于运维人员查阅备份结果。在备份时,如果运维人员使用“一键全部备份” ,则需要再次确认输入用户和密码,以确保操作是明确的一键全部备份,而不是误击。只要输入用户和密码正确,执行备份指令需要调用程序并行操作,以节省时间。如果运维人员选择“单个服务器备份” ,就需要点击弹出是否继续的再次确认信息。

一键传输主要采用paramiko 包模拟SSH 远程登陆,将指定的备份压缩包下载至本地,此过程仅需要运维人员输入本地路径,考虑到下载至本地的压缩包,等同于远程拷贝机制,可以使用并行执行。此外,下载进度需要呈现到前端,方便运维人员查阅下载情况。

一键产出Excel 报告,是将各节点服务器的3 大情况,磁盘使用、内存以及数据库表空间使用情况,汇集成一张表。当用户点击时,直接调用xlwt 包,制作Excel 表,并把参数填写至表格。由于Excel 文件数据量不大,因此使用BytesIO 就可以实现传输功能。

2.3 功能实现难点

在实现功能模块时,最大的难点在于一键传输。由于辅助平台是部署在一台物理机(为了方便区分,我们暂且称为物理机1)上,通过物理机1 做业务逻辑,从其他服务器下载备份压缩包至本地,而本地不是物理机1 本身,而是运维人员所使用的电脑本地,等同于物理机1 是中转站,原设想使用BytesIO 去做,发现压缩包太大,有些包能达到几十GB,传输大小受限。之后,想到另一个办法是将所有的文件上传至物理机1,再下载至本地的逻辑业务,但问题是压缩文件过大,集中到物理机1,会使得物理机1 磁盘空间负荷大[21]。又想到另外方案,将压缩包存入数据库中,本地即可与物理机1 变成点对点的传输,可在操作过程中发现压缩包需要经过两次传输,且数据大,等待时间太长,与实际应用效果相差太大。若用C/S 结构开发,就没什么难点,但用B/S 结构开发,还得考虑资源使用问题,就变得困难了。

最终方案是编写好点对点传输程序,放在运维人员的电脑本地,然后当用户点击 “一键传输” 时,后端执行调用本地cmd,执行命令程序,这样就变成了电脑端与各地球物理站网节点间的传输。采用多线程同步传输提高工作效率,节省传输时间。

3 应用效果

海南地球物理站网辅助平台系统(图3),设计之初,源于机构改革后,业务融合,业务人员不足,在系统运维方面缺少相关业务人员,一旦运维人员出差期间正好到了冷备份和查阅管理系统时间点,工作会被滞后。为了保障地球物理站网数据的连续性、完整性和安全性,提升运维工作实效,使运维工作简单化,研制辅助平台系统非常必要。没应用该平台前,运维人员基本上都会使用远程软件来逐个登陆服务器节点,输入指令并获取想要的信息,然后记录下来,等到月底时再做一个总结,做冷备份也是如此,重复性工作繁多。为了能让无计算机基础的同事也知道如何运维,通常会编写一本运维手册,运维人员根据手册逐个敲打命令行,看似问题解决了,实际上无意间命令行多了一个空格或者*号键,都可能会把数据库弄崩。

图3 海南地球物理站网辅助平台系统Fig.3 Hainan geophysical station network auxiliary platform system

辅助平台从登陆端就设定了3 种情况的逻辑判定: ① 密码不能为空; ② 密码错误; ③ 账户不存在,请重新输入。运维人员登陆后,可以查询服务器磁盘、内存使用情况和Oracle 数据库表空间使用情况,还可以对服务器的数据进行冷备份,冷备份完成后,对备份的数据包,进行并行下载。最后,将查询的结果,通过一键生成报告,产出Excel 报告,解放人工查询,提升工作效率。所有的操作均简单一键完成,业务的逻辑交给Django 后端运行,使用方便简单,大大减少运维人员工作量,同时也减少失误,让地球物理站网数据稳定运行[22-26]。

4 结论

常规运维方式,会借助各种远程软件,逐个远程登陆服务器,输入用户名和密码,进入系统后以指令的方式查阅情况,到冷备份时,按照手册步骤,逐个登陆服务器,逐个输入命令进行备份,重复性操作多,且容易遗漏,甚至会因输入命令错误造成数据库丢失。相比常规做法,海南地球物理站网辅助平台系统具有如下特点:

(1)运维的功能在一个辅助平台上,运维人员只要登陆一次该平台,即可完成运维的服务器软硬件和数据库检查、数据库备份和备份数据包下载至移动硬盘等工作;

(2)基本上都是一键完成工作,使得重复性工作批量处理;

(3)可视化操作让运维工作变得简单化;

(4)辅助平台基于开源开发,便于推广部署。

猜你喜欢
站网一键备份
“备份”25年:邓清明圆梦
冷轧机一键式升降速轧制的实现
鲁北平原雨量站网分布与面雨量误差关系研究
“一键报贫”助力脱贫攻坚
创建vSphere 备份任务
一键观影,一键K歌 菱杰 TRS IW影院系列5.1音响套装
一键定制 秋冬彩妆懒人包
旧瓶装新酒天宫二号从备份变实验室
出版原图数据库迁移与备份恢复
海河流域基本水文站网密度及布局评价