張華美 陳祥開 龐鑫柏 黃經國 黃章榮 洪旭瑜
1) 海南省地震局,海南 海口 570203
2) 新疆維吾爾自治區地震局, 新疆 烏魯木齊 830011
3) 中國地震臺網中心, 北京 100045
4) 福建省地震局, 福建 福州 350003
保障地球物理站網數據的完整性和安全性,是做好防震減災工作的基礎。運維好地球物理站網是極其重要且有意義的工作。
海南地球物理站網有3 個數據中心站,1 個區域中心,共計4 個節點。2022 年海南地球物理站網在推進數據遷移時,將部署在外的服務器節點,統一遷回海南省地震局的一樓機房。此機房配備雙電流輸入、備用電源、網絡硬件、動環監控等軟硬件設施,符合數據服務器部署環境。海南地球物理站網管理系統是在Suse11 操作系統下部署,數據庫采用的是Oracle 10g版本,硬件部署是基于兩臺聯想SR860 服務器,考慮到系統兼容問題,并兼顧未來發展國產化系統可變列裝問題,海南地球物理站網采用阿里私有云架構,構建國產化虛擬機平臺,并將數據服務器的節點部署于虛擬機中。目前該平臺已建成并投入使用[1-3]。
應用Django 和Python 技術[4]開發海南地球物理站網輔助平臺系統(以下簡稱 “輔助平臺” ),可視化的操作[5-6]有助于運維人員落實運維工作時高效有序。根據運維工作實際,輔助平臺共設計4 大功能模塊,分別為: ① 服務器情況:主要通過頁面獲取并顯示服務器磁盤、數據庫和內存的使用情況,有助于運維人員查看軟硬件的現狀; ② 一鍵傳輸:主要將冷備份好的數據包,從服務器節點下載至本地進行二次備份,避免服務器因宕機而丟失數據,保障數據完整性,同時減少使用輔助遠程工具時的重復性操作;③ 一鍵生成報告:主要將每個月的數據庫和服務器硬件的使用情況,產出一張Excel 表格報告; ④ 一鍵備份:主要通過按鈕實現前端給后端指令,完成數據庫備份。
海南地球物理站網運維,每天檢查一次服務器軟硬件,每周檢查一次數據庫,每月至少兩次冷備份,每月將檢查結果整理成Excel 表。這里的每次檢查都需要借助遠程軟件登陸服務器,通過指令查看服務器軟硬件情況。6 臺服務器則需要登陸6 次,重復性動作是6 的倍數。每次查詢結果,都使用Excel來登記,登陸的服務器密碼,也都整理成Excel 表,每次登陸都得打開查看。看似簡單的工作,因重復性操作,使得運維起來比較耗時。備份工作也是按照手冊逐步操作,6 臺服務器也就是重復操作6 次。如果服務器增多,重復操作會更多。由于地震行業設備資源具有異構性、分布性與自治性等特點,既然重復性操作多,那么可使用計算機批處理,使工作變得簡單化,系統化[7-8]。
本研究運用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
系統架構分為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 則處理數據層和訪問數據庫層。
將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
輔助平臺主要由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)一鍵備份模塊主要是遠程登陸服務器,執行備份命令,功能有兩個選擇:一種是直接一鍵執行各節點的服務器備份,此命令盡量在夜間執行,因為等待時長稍微久一些,從實際工作來看,適合批量備份工作;另一個是以各個節點的服務器來啟用和關閉,做到有序進行,也是一鍵完成,不需要輸入命令代碼,減少運維人員負擔。
部署開發環境極其重要。項目部署在海南省地震局一樓機房服務器,由于禁止互聯網訪問,所以在部署環境時,必須要考慮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 就可以實現傳輸功能。
在實現功能模塊時,最大的難點在于一鍵傳輸。由于輔助平臺是部署在一臺物理機(為了方便區分,我們暫且稱為物理機1)上,通過物理機1 做業務邏輯,從其他服務器下載備份壓縮包至本地,而本地不是物理機1 本身,而是運維人員所使用的電腦本地,等同于物理機1 是中轉站,原設想使用BytesIO 去做,發現壓縮包太大,有些包能達到幾十GB,傳輸大小受限。之后,想到另一個辦法是將所有的文件上傳至物理機1,再下載至本地的邏輯業務,但問題是壓縮文件過大,集中到物理機1,會使得物理機1 磁盤空間負荷大[21]。又想到另外方案,將壓縮包存入數據庫中,本地即可與物理機1 變成點對點的傳輸,可在操作過程中發現壓縮包需要經過兩次傳輸,且數據大,等待時間太長,與實際應用效果相差太大。若用C/S 結構開發,就沒什么難點,但用B/S 結構開發,還得考慮資源使用問題,就變得困難了。
最終方案是編寫好點對點傳輸程序,放在運維人員的電腦本地,然后當用戶點擊 “一鍵傳輸” 時,后端執行調用本地cmd,執行命令程序,這樣就變成了電腦端與各地球物理站網節點間的傳輸。采用多線程同步傳輸提高工作效率,節省傳輸時間。
海南地球物理站網輔助平臺系統(圖3),設計之初,源于機構改革后,業務融合,業務人員不足,在系統運維方面缺少相關業務人員,一旦運維人員出差期間正好到了冷備份和查閱管理系統時間點,工作會被滯后。為了保障地球物理站網數據的連續性、完整性和安全性,提升運維工作實效,使運維工作簡單化,研制輔助平臺系統非常必要。沒應用該平臺前,運維人員基本上都會使用遠程軟件來逐個登陸服務器節點,輸入指令并獲取想要的信息,然后記錄下來,等到月底時再做一個總結,做冷備份也是如此,重復性工作繁多。為了能讓無計算機基礎的同事也知道如何運維,通常會編寫一本運維手冊,運維人員根據手冊逐個敲打命令行,看似問題解決了,實際上無意間命令行多了一個空格或者*號鍵,都可能會把數據庫弄崩。

圖3 海南地球物理站網輔助平臺系統Fig.3 Hainan geophysical station network auxiliary platform system
輔助平臺從登陸端就設定了3 種情況的邏輯判定: ① 密碼不能為空; ② 密碼錯誤; ③ 賬戶不存在,請重新輸入。運維人員登陸后,可以查詢服務器磁盤、內存使用情況和Oracle 數據庫表空間使用情況,還可以對服務器的數據進行冷備份,冷備份完成后,對備份的數據包,進行并行下載。最后,將查詢的結果,通過一鍵生成報告,產出Excel 報告,解放人工查詢,提升工作效率。所有的操作均簡單一鍵完成,業務的邏輯交給Django 后端運行,使用方便簡單,大大減少運維人員工作量,同時也減少失誤,讓地球物理站網數據穩定運行[22-26]。
常規運維方式,會借助各種遠程軟件,逐個遠程登陸服務器,輸入用戶名和密碼,進入系統后以指令的方式查閱情況,到冷備份時,按照手冊步驟,逐個登陸服務器,逐個輸入命令進行備份,重復性操作多,且容易遺漏,甚至會因輸入命令錯誤造成數據庫丟失。相比常規做法,海南地球物理站網輔助平臺系統具有如下特點:
(1)運維的功能在一個輔助平臺上,運維人員只要登陸一次該平臺,即可完成運維的服務器軟硬件和數據庫檢查、數據庫備份和備份數據包下載至移動硬盤等工作;
(2)基本上都是一鍵完成工作,使得重復性工作批量處理;
(3)可視化操作讓運維工作變得簡單化;
(4)輔助平臺基于開源開發,便于推廣部署。