構建MySQL自動化平台思路

2021-09-19 21:51:46 字數 3332 閱讀 1765

本人在日常工作中,用python寫了乙個db平台。

下面簡單地嗦一嗦目前的主要思路和未來展望吧~

目前主要功能支援:

高可用模組:打算使用(??和mgr),作者不想用mha,無理由....

這裡做個小預告,可能下週或者下下週。我的好**順子要給大家講講mha的故事。請期待~~

如何實現自動化

自動化的前提是要實現標準化,如果不能實現標準化,那麼我還是請你先實現標準化吧。(雖然也可以實現,成本也是巨大的)

為了實現自動化,首先要統一的操作版本和mysql分支版本,

作業系統版本:基於redhat或centos系列

6系列不能低於6.8 ,7系列不能低於7.4 。

mysql主流分支有mysql官方、percona、mariadb版本

作者個人認為 mysql官方版本才是王道,

所以在安裝的時,為了統一版本,所以選擇為mysql5.7.最新。

那麼mysql官方其他版本呢?

mysql5.5 5.6太老,不考慮接入,尤其在新平台的開發。(低於5.7的請盡快公升級)

mysql8.0太新,作者頭不鐵,等等再說吧...

那麼簡單說一下安裝部署的思路吧,目前只有單機版本。

因高可用到現在沒想好到底該怎麼玩,所以目前只有單機版。

利用svn/git 做版本控制,svn/git中主要包含: mysql配置檔案集合、mysql data目錄、mysql安裝包 mysql tool工具等等

整體流程如下:

文字簡述

安裝前需要進行如下判斷。

1、判斷埠是否存在。

2、判斷data目錄是否存在。

3、是否有剩餘空間(至少要剩餘10g+)。

4、md5值校隊。

如果條件全部滿足的話。

開始計算軟體包、data包的md5值,是否跟svn/git 目錄中的是否一致。如果不一致則,執行svn up命令,一直到md5值,為止。

建立data目錄,建立軟連線.....這裡和普通手動安裝的方式一樣。

替換mysql配置檔案:主要替換埠和server_id (server_id)生成規則 ip最後一位加mysql port。

目前只提供3個規格。

1、低配 4c8g。

2、中配8c32g。

3、高配16c64g。

還支援建立db、授權,授權只支援:唯讀和開發增刪改查許可權。

在這個平台中提供對mysql巡檢支援的。

可以獲得當前狀態 每秒的qps、tps、dml的操作,每秒執行緒建立、執行、銷毀,鎖的時間、臨時表、binlog、 network、 innodb buffer 等相關資訊。

關於mysql使用情況 例如是否有冗餘索引、當前db的大小、儲存引擎使用情況、主鍵資訊、innodb鎖資訊(具體sql)、是否有大事物、記憶體消耗、臨時表資訊、是否存在全部掃、那個表的io消耗最高等等等等。(之前寫巡檢,大大小小都寫了至少4個版本了,辛酸臉)

當前系統最具有核心競爭力的功能這就是-----故障收集了。

主要思想,當mysql服務故障,執行診斷命令,例如top、free、vmstat、iostat、show processlist 等常用排障命令。

併發執行同時執行如下命令。如果沒執行完機器就掛掉了也是沒關係的,因為在特殊的環境下,你的系統馬上要發生宕機、或者馬上要發生oom。主要保障在作業系統宕機、oom之前,收集有用的證據。

什麼時候用:例如你通過監控、報警發現你的mysql響應速度慢,主從延遲、產生了大量鎖等等的時候來手動觸發。就好比乙個病危的人,剛剛進入了醫院,這個功能就等於醫院的病危檢查,方便於的日後發現蛛絲馬跡。

可能是作者,乙方做多了吧,在巡檢和故障收集這裡用了很多的時間和精力。

未來展望,可以自動執行:當cpu超過?%、大量dml語句產生了阻塞、主從延遲多少秒、服務假死,可以自動執行一次,並且判斷是否需要下線該主機。這需要很多的基礎功能的完善。

備份任務是基於salt實現的,做到分鐘和小時級別可以指定,某小時、某分鐘,最大的維度是小時級別。例如(2:20,備份每天都要做的哦~)

對於dba來說,更看重周邊的小工具,最好能夠點點點把日常的工作給搞定,例如部署、上線等一些重複的工作。把更多的時間用於做更有意義的事,例如如何優化業務、如何讓sql跑的更快、如何更好地配合業務方。

對於開發來說,他們更看重的是sql的執行效率,也就是慢查詢。還有自助上線,這樣會大幅減少上線流程。

遇到的坑

其實在第乙個版本的時候我採用ssh來傳輸包或者執行命令,最大的問題。

安全,如果能獲得你儲存密碼或者key,那麼是不是可以為所欲為了。

執行,ssh在執行命令的時候可能會造成執行一半,因為的傳送端出現問題例導致無法繼續執行。還容易造成資料報的不完整,md5校對不一致哦。

在命令傳輸和執行上 我使用呼叫salt api的方式 salt api 本身就可以做到許可權的控制,並且salt 支援非同步模式,提示了執行效率,也盡量避免了命令執行一半出錯。在檔案傳輸上, 我使用svn+md5校對的方式 如果md5失敗 則執行svn up方式 重新傳md5失敗包,避免重新傳輸所有包。

效率,需要**層實現非同步,浪費時間和**,並且不好控制。

還要一定 一定 一定做好日誌的輸出,會幫助自己快速排障。否是排障真的會懷疑人生。

除了遇到坑,還被吐槽頁面low啊 ,不好看,沒關係。

我司前端妹子,下週開始一起做專案,請大家一起期待下一次的分享。

自動化測試管理平台思路

該平台屬於輕量級管理平台,構思的時候想得很細,但到最後本著實現功能即可都一切從簡了,使用的版本控制系統為svn,大概實現的思路如下 系統分為測試用例管理,測試專案管理和測試報告管理三個部分。1 在開發出新的測試用例後,利用svn將其提交到版本庫,並在系統中新增該條測試用例的基本資訊到資料庫,當用例變...

Gulp 自動化構建

use gulp 官網 編譯 sass 合併優化壓縮 css 校驗壓縮 js 優化新增檔案指紋 md5 元件化頭部底部 include html 實時自動重新整理 gulp是前端開發過程中對 進行自動化構建的利器。它不僅能對資源進行優化,而且在開發過程中能夠通過配置自動完成很多重複的任務,讓我們可以...

自動化構建Jenkins fastlane

參考 自動化查詢描述檔案 安裝之前 對應的uuid 參考鏈結 檢視簽名檔案,teamid 描述檔案路徑 相互關係 命令列提示沒有登入 jenkins的工作區目錄 jenkins環境配置 同道中人 shell 報錯倉庫位址 配的那個token不是用來登入git倉庫的原始碼管理的憑據和 api的憑據不是...