需求背景:
隨着業務的增長、對運維效率和質量的要求不斷提高,對自動化運維體系的需求也不斷增強。
目前筆者服務的很多中大型企業客戶,運維其實還停留在“刀耕火種”的原始狀態。
這里所說的“刀”和“火”就是運維人員的遠程客戶端,例如 xshell 和Windows 遠程桌面。
這種工作模式有很多局限性,
比如服務器、數據庫、中間件等的安裝、初始化,應用軟件部署、服務發布和監控都是通過手動方式來完成的。
這就需要運維人員登錄到服務器上,一台一台去管理和維護。
如果有個幾十上百台,累就累死人了。
筆者曾運維過超過4000千台服務器,團隊二十多個人,仔細想想這活靠人力能干嗎?
另外人工操作方式過於依賴運維人員的執行順序和操作步驟,稍有不慎即可能導致生產事故,即便是變更前double check也很難保證不出事故。
常在河邊走哪有不濕鞋。
這時候運維人員開始探索使用使用腳本和批量管理工具。
這種方式確實提升了效率和質量,但是不具有普適性。
- 第一是腳本的非標准化的問題。
每個運維人員都有自己的解決問題的風格,不同的人員之間存在巨大差異,那么不同的人開發這些腳本的版本管理就是一個挑戰。
- 第二是腳本的交接問題,公司人員的架構不是一成不變的,有人來就有人離開。離職和工作交接,都會導致腳本無法很好地在運維人員之間傳承和再利用。
因此,構建自動化運維體系成了唯一的選擇。
那么如何建設自動化運維體系呢?本文研究分為三個大的方面:
- 第一個是為什么要建設自動化運維體系?
- 第二個是根據筆者經驗介紹運維系統是怎樣設計、運行和處理問題的。
- 第三個是筆者在自動化運維過程中遇到的一些問題的思考,做一個總結。
本文針對數據庫自動化運維系統
核心內容如下:
一、建設自動化運維體系的原因
為什么要建設一個自動化運維體系。
肯定是運維過程中遇到的一些挑戰。
第一個是變更的需求。
它表現為三個方面:
- 一是變更數量多,目前我們服務的客戶達到3萬家企業,這個體量是很大的。
- 二是變更種類多,不同的客戶需求是不一樣的,包含但不限於擴容、性能優化、故障處理、DG切換遷移、RAC搭建等。
- 三是變更風險大,有些變更都是一些高危操作,自動化處理更安全等。
第二個是運維環境方面,主要表現為服務器數量多、數據庫類型多。我們的客戶可以自由選擇使用哪種數據庫,分別對應不同的環境。
第三是人的因素。
在建設自動化運維體系過程中,有一個比較重要的考慮點是人的因素。
正是因為每個運維人員的能力不一樣,技術水平參差不齊,甚至是運維習慣和工具也不一樣。
導致我們必須要創建一套規范的自動化運維體系,來提升工作效率。
二、如何搭建自動化運維體系
下面我們來看一下每個模塊是如何設計和工作的。
1、自動化安裝系統
安裝數據庫是比較繁瑣但數據又多的工作之一。
操作系統多,但是人少,可用時間也比較少,自動化安裝省時省力。整個自動化流程采用通用的框架,主要是針對linux下的Oracle安裝和MySQL安裝。
交付用戶之前,會進行基本的安全設置,這在一定程度上提高了安全性,也減少了需要人工做的一些操作。
2、自動化運維平台
當服務器由自動化安裝完數據庫以后,就會被自動化運維平台接管。
自動化運維平台是運維人員的操作平台,它主要解決安全、高效、快速等因數量特別多而帶來的管理問題。
在設計的過程中要考慮了以下幾個因素:把整個運維系統的操作界面設計成基於堡壘機的架構。
運維工程師無論何時何地都可以登錄管理系統進行運維操作,這樣的話就比較方便,由SecureCRT對被操作的機器發布指令。
充分利用現有協議和工具。這個平台的特點是所有的系統使用SSH管理,而不是自己開發一些Agent,這也體現了自動化運維的觀點。
3、自動化巡檢系統
由於我們的客戶系統比較多,業務也比較多,怎樣設計一套系統去巡檢它們的運行情況呢?
我們采用了兩種方式:自我開發的中控系統和第三方管理平台先看自己開發的中控系統:
單獨使用一台服務器巡檢其他的數據庫節點,腳本可以選用shell或者Python。
設定遍歷時間間隔,遇到故障情況可以采用打電話或者發短信的方式及時通知運維人員。
第二是把所有的數據庫節點納管到第三方監控平台。
4、自動化性能分析系統
系統並不用永遠都穩定運行,性能問題是無法逃避的問題。性能分析系統是重中之重。
這里筆者單獨再寫一篇文章。
5、自動化監控預警系統
通常客戶的系統都是7*24小時運行的,這就要求必須有預警監控。
預警監控系統+值班人員是標准配置。
預警監控系統的搭建方式參考巡檢系統,只不過采集的指標不一樣。
6、自動化備份系統
兩地三中心+DG+NBU
三、建設自動化運維體系的思考
筆者將自動化運維體系的建設目標總結為四個詞。
- 第一個是完備,這個系統要能涵蓋所有的運維需求。
- 第二個是簡潔,簡單好用。運維人員的學習成本不要高,越復雜難用的系統越不容易發揮系統本身的能力和效率。
- 第三個是高效,特別是在批量處理或者執行特定任務時要高效。
- 第四個是安全,如果一個運維系統不安全,可能導致很快就被黑客接管了。
總結
筆者目前也在從數據庫的架構、優化和故障處理慢慢轉型做自動化運維體系。
對過去進行總結,我覺得有3個方面可以供大家參考。
第一是循序漸進的原則:
聚焦當前的問題,把當前的問題處理好,后面的問題也就迎刃而解。
如果一開始設計的系統很龐大、功能特別豐富,會導致一些無法控制的局面。但是如果一開始的目標是解決一些特定的問題,有針對性,那么推進起來也會比較簡單。在筆者參與的自動化運維體系建設過程中,我們的初始目標是構建的是一個基礎的變更批量操作平台,先把一部分需要重復執行的工作搬到平台上來。
再依據運維的需求豐富這個操作平台的功能和提升效率,最后把周邊的系統打通,相互對接,形成完整的自動化運維體系。第二是考慮可擴展性:
設計系統的時候,功能或者設計方面可能不用考慮那么多,但是要考慮當服務器數量發生比較大的擴張時,系統是否還能支撐。第三是以實用為目的:
使用不方便,運維人員第一個就放棄了,何談推廣?