偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

傳統(tǒng)DBA將死?餓了么數(shù)據(jù)庫自動化運(yùn)維實(shí)踐

運(yùn)維 數(shù)據(jù)庫運(yùn)維 自動化
隨著平臺化的推進(jìn),DBA 職能角色也在發(fā)生變化,過去 DBA 在運(yùn)維和維護(hù)上消耗,現(xiàn)在的 DBA 更加專注業(yè)務(wù)做價值輸出。

從時間軸上看,我們的 DBA 運(yùn)維平臺每年會有一個比較大的進(jìn)步,從人肉→工具化→平臺化→自助化,我們只用了兩年半時間完成全部迭代。

其中平臺化&自助化+數(shù)據(jù)庫多活改造,我們用了 8 個月的時間一口氣完成全部開發(fā)及改造工作。

在完成平臺化改造的同時,我們數(shù)據(jù)庫架構(gòu)也從傳統(tǒng)的主從架構(gòu)發(fā)展到異地多活架構(gòu),這對 DBA 的挑戰(zhàn)是巨大的,但這也是平臺必須能夠解決的。

因?yàn)閭鹘y(tǒng)的數(shù)據(jù)庫管理方式在當(dāng)前這種架構(gòu)下依靠 DBA 手工或者借助簡單的工具是無法應(yīng)對多活架構(gòu) + 大規(guī)模管理帶來的復(fù)雜性,因此平臺化顯得非常重要。

隨著平臺化的推進(jìn),DBA 職能角色也在發(fā)生變化,過去 DBA 在運(yùn)維和維護(hù)上消耗,現(xiàn)在 DBA 更加專注業(yè)務(wù)做價值輸出。

我覺得 DBA 長期在運(yùn)維層面過多花費(fèi)時間不斷修補(bǔ)各種層面漏缺,其實(shí)是不健康的,雖然每天很忙但是新問題依舊會很多。

餓了么 DBA 運(yùn)維平臺概覽

我們的數(shù)據(jù)庫平臺主體功能概覽如下:

  • DB-Agent:數(shù)據(jù)采集 + 進(jìn)程管理 + 遠(yuǎn)程腳本 & Linux 命令調(diào)用 + 與平臺耦合的接口。
  • MM-OST:無傷 DDL 系統(tǒng)根據(jù) GH-OST 源碼改造實(shí)現(xiàn)多活場景下的數(shù)據(jù)庫發(fā)布。
  • Tinker:Go 重寫了 Linux Crontab 的邏輯支持到秒級 + 管理接口與平臺整合實(shí)現(xiàn)調(diào)度集群管理日常任務(wù)調(diào)度。
  • Checksum:多機(jī)房數(shù)據(jù)一致性檢查。
  • SqlReview:Go 實(shí)現(xiàn)的類似開源的 Inception SQL 審核工具并做了功能上的增強(qiáng)。
  • Luna:優(yōu)化后的報警系統(tǒng)(大規(guī)模實(shí)例下如何減少報警且不漏關(guān)鍵報警)。
  • VDBA:報警自動處理系統(tǒng),代替 DBA 完成對線上 DB 的冒煙&報警的處理。

我不擅長講一些方法論,下面給大家介紹具體點(diǎn)的內(nèi)容,讓大家有個更清楚的了解。

實(shí)時監(jiān)控&快速排障

這對于 DBA 是非常常見的事情,一般出問題或者接到報警,通常都要登錄到服務(wù)器,一通命令敲下來可能花的時間最少兩分鐘,然后得出一個有慢 SQL 或者其他的什么原因。

這個診斷過程完全可以被自動化掉,日常處理問題的核心原則是“快”(我們高峰期線上故障一分鐘損失幾萬單)。

而平臺必須能提供這樣的能力,出問題時盡量減少 DBA 思考的時間直接給出現(xiàn)象 + 原因縮短決策時間(甚至必要時系統(tǒng)可以自動處理掉有些問題都不必 DBA 參與)。

基于我們的監(jiān)控大盤,DBA 可以清晰的知道當(dāng)前全服所有實(shí)例是否有異常,哪些有異常及是什么類型的異?;蛎盁煻紩逦尸F(xiàn)。監(jiān)控大盤將 DBA 日常管理過程中所有的命令集都整合到一起。

DBA 只需要簡單的點(diǎn)點(diǎn)按鈕,系統(tǒng)就會自動執(zhí)行所有命令并做好 SQL 執(zhí)行計劃分析、鎖分析、SQL 執(zhí)行時間分布、歷史趨勢分析,數(shù)據(jù)庫歷史 Processlist 快照查看等常見操作。

雖然這些功能看似簡單,但是卻非常實(shí)用,提高了 DBA 故障定位的效率。

報警處理自動化

報警處理自動化目前主要包括:

  • 空間問題自動處理
  • 未提交事物處理
  • 長查詢自動 Kill
  • CPU / 連接數(shù)據(jù) / thread runing 過多分析及處理
  • 復(fù)制無損修復(fù)(1032,1062)

過去在處理復(fù)制數(shù)據(jù)不一致異常時同行都是 Skip 掉,但是這樣缺陷很多同時會留下數(shù)據(jù)不一致的隱患。

目前我們采用的是解析 Binlog 的方式來做到精確修復(fù),避免了傳統(tǒng)的 Skip 方式的缺陷。

有人可能會說目前社區(qū)有很多開源的工具能解決你前面提到的報警問題,為啥非要自己寫一個呢?

比如 PT 工具能幫你處理,Auto Kill 一些數(shù)據(jù)庫有問題的 SQL,也能幫你跳過復(fù)制的錯誤,或者 Github 上也有開源的實(shí)現(xiàn)能做到無損修復(fù)復(fù)制問題?

這里的關(guān)于重復(fù)造輪的問題,我覺得是對待開源態(tài)度的問題,開源固然能解決一些問題,但是不同的場景對應(yīng)不同的開源工具。 當(dāng)你把這些輪子拼湊到一起時難以形成一個有機(jī)整體。

尤其是你在進(jìn)行平臺化建設(shè)時必須要考慮清楚這個問題,否則純粹的開源堆砌出來的系統(tǒng)是難以維護(hù)的不可靠的,對于開源我們可以用其思想造自己合適的輪子。

MHA 自動化管理

在 8.0 之前絕大部分公司高可用實(shí)現(xiàn)還是基于 MHA。MHA 的實(shí)現(xiàn)不可避免要解決部署的問題。

最初我們是做一個部署腳本在跳板機(jī)上,MySQL 安裝時就打通與跳板機(jī)的互信工作,然后由該腳本在來打通集群節(jié)點(diǎn)間的互信工作,然后在一個 Slave 上啟動 MHA 管理進(jìn)程。

或者是將該管理進(jìn)程固定在集群外面的某一個或者多個服務(wù)器上集中部署&監(jiān)控,然而這樣會有什么問題呢?

這樣會有如下幾點(diǎn)問題:

  • 重度依賴 SSH。
  • 搭建過程復(fù)雜。
  • Manager 管理節(jié)點(diǎn)外溢到一臺或多臺機(jī)器后影響可靠性的因素增多。
  • 維護(hù)復(fù)雜,配置有效性存疑會因此造成穩(wěn)定性風(fēng)險。
  • 與平臺整合過于復(fù)雜,平臺如果要管理監(jiān)控 Manager 節(jié)點(diǎn)需要借助 SSH 或單獨(dú)實(shí)現(xiàn)一個 Agent。

這種架構(gòu)管理幾十套或者上百套集群時還能勉強(qiáng)應(yīng)付。當(dāng)上千套時,管理就很復(fù)雜,整體很脆弱,出問題后維護(hù)工作量大。

我們在做 MHA 的方案時,做了充分調(diào)查及論證,最終沒有選擇這種方式。

最終我們決定單獨(dú)搞一套管理方式出來,大致邏輯是依托 Agent 來做到,基本原理如下。

  • 每個 DB-Agent 上都獨(dú)立實(shí)現(xiàn)如下接口:
  • 獲取集群拓?fù)浣Y(jié)構(gòu)&:(self *MHA)GetDBTopology()
  • 生成配置文件:(self *MHA)BuildMHAConfig()
  • 節(jié)點(diǎn)互信:(self *MHA)WriteRsaPubilcKey()
  • 啟動:(self *MHA)StartMHA()
  • MHA 進(jìn)程實(shí)時監(jiān)控:(self *MHA)MHAProcessMonitor()
  • 定時配置文件與拓?fù)浣Y(jié)構(gòu)匹配巡查:(self *MHA)InspectMHAConfigIsOK()
  • 關(guān)閉:(self *MHA)StopMHA()
  • 切換:(self *MHA)SwitchMHA()

平臺按照一定順序依次調(diào)用上述接口來完成整個 MHA 的從搭建到管理的全部過程。

整個過程完全由平臺來完成,極大的減少了 DBA 維護(hù) MHA 的成本。過去 DBA 要配置或者 MHA 切換后的維護(hù)時間在 2-10 分鐘左右,現(xiàn)在控制在 3 秒以內(nèi)。

基于 Agent 的管理更加輕量級,也避免了 Manager 節(jié)點(diǎn)外溢帶來的各種問題,也避免了傳統(tǒng)的部署方式上的復(fù)雜性,維護(hù)零成本,與平臺整合非常簡單。

平臺在將上述接口調(diào)用封裝成獨(dú)立的 API 后可供其他自動化平臺調(diào)用,這將為下一步的完全無人管理提供支持。

資源池&一鍵安裝

過去業(yè)務(wù)擴(kuò)容需要 100 臺機(jī)器,提交給 Base 需求兩天后給你一個 EXCEL 或者一個 Wiki 頁面。

我們拿到機(jī)器之后去寫一些腳本,通過一些工具或者自動化平臺刷資源環(huán)境檢查和安裝腳本,但是每個人可能做法不一樣,做出來東西五花八門,非常不統(tǒng)一。

別人維護(hù)的時候覺得沒有問題,當(dāng)換你維護(hù)時候覺得很奇怪,為什么這樣做?不夠整齊劃一,標(biāo)準(zhǔn)化推行不是太好。

現(xiàn)在我們的 DBA 基本上不需要關(guān)心這些,DBA 只需要看我們資源池是否有空閑機(jī)器,如果資源不足只要負(fù)責(zé)申請資源即可,其他工作基本都可以由 Agent 自動完成。

一鍵擴(kuò)容與遷移

我們 2015 年到 2016 年先后經(jīng)歷了遷移到 CDB,然后又遷移到 RDS,***又做自己的數(shù)據(jù)庫災(zāi)備系統(tǒng)。

這期間遷移的集群數(shù)超過 3000+ 套,平均每套集群遷移兩到三次,這么多遷移量,通過人工很難完成的。

以災(zāi)備為例,做災(zāi)備時候公司給我們 DBA 的團(tuán)隊(duì)遷移時間是兩周之內(nèi),那時候?qū)⒔?300 多套集群全部遷移到災(zāi)備機(jī)房里面去,實(shí)際上我們只用了兩天時間。

當(dāng)時我們一個人用了不到一個小時的時間寫了一個從集群搭建到調(diào)用數(shù)據(jù)庫遷移接口的腳本快速的拉起全部遷移任務(wù)。

自動遷移會依托我們調(diào)度集群來完成全部的遷移工作。對于日常的自動擴(kuò)容遷移,DBA 只需要一鍵即可完成全部遷移過程。

這里我們思考一下有什么手段可以完全避免 DBA 來點(diǎn)這一下按鈕呢?這里我覺得對于平臺化的過程其實(shí)也是所有操作 API 化的一個過程。

對于這點(diǎn),按鈕的動作本身就是調(diào)用一個 API,假設(shè)我們現(xiàn)在有一套更加高度自動化的系統(tǒng)(有的大公司稱為智能系統(tǒng)^_^)能自動判斷出容量不足時自動調(diào)用該 API 不就完全自動擴(kuò)容了嗎?

DBA 都不需要去人工觸發(fā),雖然這是小小的一個操作也能被省略(那么 DBA 后面該何去何從呢?)。

我們現(xiàn)在可以說依靠平臺基本上完成了絕大部分標(biāo)準(zhǔn)化、規(guī)范化的工作,任何一個 DBA 只要通過平臺來完成日常必要的工作,做出來的東西都是整齊劃一的,完全避免人的因素導(dǎo)致的差異。

誤操作閃回

2018 年至今,我們已經(jīng)做了差不多 4 次線上失誤操作,我們都在很短時間內(nèi)幫用戶做到快速回滾。

目前社區(qū)有很多關(guān)于回滾的解決方案,但是充分調(diào)研之后我還是決定自己造輪子(這里又回到前面提到的關(guān)于開源及造輪子的問題)。

這里簡單闡述原因:開源的優(yōu)點(diǎn)是通用性、普適性比較強(qiáng),但是場景化的定制一般比較麻煩。

目前的開源工具都是基于命令行來完成必要的操作,當(dāng)真的線上需要緊急回滾時還要登錄到服務(wù)器然后再輸入一堆的參數(shù)解析,這不符合我對平臺化的要求。

既然是平臺化,這一系列的操作起碼必須是能在界面里面選一選、點(diǎn)一點(diǎn)就能完成的。

也就是說使用要足夠簡單,尤其這類緊急操作花費(fèi)的時間要足夠短,沒必要當(dāng)著一堆開發(fā)的面把命令行敲的賊溜來秀肌肉。

我們的場景復(fù)雜舉例說明:我們有一套集群單表分片是 1024 片,總共分了 32 套集群,有一天開發(fā)突然找來說有部分?jǐn)?shù)據(jù)被誤操作了,你該如何進(jìn)行處理?

這里表是被 Sharding 的,開發(fā)可能是不知道這批數(shù)據(jù)落在哪個 Sharding 片里面。

所以你必須解析全部的 32 個節(jié)點(diǎn)上的 Binlog, 這時你通過開源的腳本吭哧吭哧起了 32 個進(jìn)程然后你的 CPU 爆了,網(wǎng)卡爆了……這里分片解析實(shí)際上在 32 個進(jìn)程是不行的。

如果解析腳本不支持對解析的 rowsEvent.Table 表名的正則匹配的話,恐怕要起 1024 個進(jìn)程……

考慮到上述場景有合適自己場景的解析工具是非常必要的。這里我用 Go 來實(shí)現(xiàn)采用了 github.com/siddontang/go-mysql/replication 解析模塊。

實(shí)現(xiàn)后的解析工具是一個服務(wù)化的組件,可以多節(jié)點(diǎn)部署應(yīng)對上述 Sharding 的解析場景,被服務(wù)化后可以被平臺直接調(diào)用。

當(dāng)真的出現(xiàn)失誤操作時,DBA 操作時也不用揪心手抖……所以造每個輪子都有它的理由而不僅僅是愛好。

任務(wù)調(diào)度&歸檔

我們的調(diào)度服務(wù)其實(shí)是用 Go 重寫了 Linux Crontab 的邏輯并且支持到了秒級。

同時也為了方便管理加了一些管理模塊實(shí)現(xiàn)服務(wù)化,主要還是方便平臺調(diào)用(也是避免 DBA 手工去配置 Crontab )。

平臺對調(diào)度節(jié)點(diǎn)進(jìn)行整合實(shí)現(xiàn)一個邏輯上的調(diào)度集群(后續(xù)會改造成真正意義上的調(diào)度集群。其實(shí)改造方式也很簡單,只要在調(diào)度節(jié)點(diǎn)里面加上節(jié)點(diǎn)自動注冊然后加一個簡單的任務(wù)分發(fā)器實(shí)現(xiàn)負(fù)載均衡即可)。

同時對日志功能做了增強(qiáng),通過調(diào)度可以自動的把執(zhí)行過程中輸出的日志記錄下來,方便日后追溯原因。

也支持捕獲并記錄調(diào)度腳本 Exit Code,方便對于有些特殊腳本并非只有成功 or 失敗兩種狀態(tài)的記錄。

舉個例子:比如一個腳本執(zhí)行過程中可能會有很多種 Panic 的可能,但是如果把這些 Panic 的原因都?xì)w結(jié)為腳本執(zhí)行異常并 exit(-1) [系統(tǒng)默認(rèn)的退出碼],這樣似乎也是可以的。

但是這樣 DBA 在檢查自己的任務(wù)狀態(tài)時,發(fā)現(xiàn)異常時不能直接的定位錯誤而是要去翻具體的執(zhí)行錯誤日志,顯得不夠快捷(這也是用戶體驗(yàn)的點(diǎn))。

因此 DBA 只需要在平臺里面定義好錯誤代碼對照表即可在 Painc 時捕獲異常,然后 Exit(exit_code) 就可以,當(dāng) DBA 巡查自己的任務(wù)時能清晰的知道錯誤原因。

SQLReview

最初我們的 SQL 審核由開源的 Inception 實(shí)現(xiàn),但是由于我們需要加入更多校驗(yàn)規(guī)則,所以需要做一些定制修改。

然而團(tuán)隊(duì)內(nèi)隊(duì)友不太了解 C,因此很多情況下開發(fā)提交發(fā)布 SQL 工單后,都是由我們的 DBA 再來人肉審核一遍的。

我們現(xiàn)在平均每天 100+ 的 DDL,DBA 根本審核不過來。即使審核到了,還是會漏很多規(guī)則,人工是不能保證一定可靠的。

所以做自己的審核系統(tǒng)是很必要的,但是要獨(dú)立寫一個 sql-parser 模塊難度還是非常大的。

在充分調(diào)研了 Python&Go 的開源實(shí)現(xiàn)后最終選擇了 TiDB 的解析模塊,于是項(xiàng)目很快就落地了。

在完全覆蓋 Inception 的規(guī)則后也做了相關(guān)擴(kuò)展,也就是加入我們自定義的規(guī)則。

擴(kuò)展索引的相關(guān)校驗(yàn):

  • 冗余索引的校驗(yàn)。(如 ix_a(a),ix_ab(a,b))
  • 索引中枚舉類型的校驗(yàn)。
  • 組合索引中不能包含主鍵或者唯一索引。
  • 建表時必須包含自增 id 的主鍵。
  • 重復(fù)索引的校驗(yàn)。(如啼笑皆非的ix_a(a),ix_aa(a)求開發(fā)的心理陰影面積?)
  • 組合索引列不能超過 3 個。
  • 組合索引列時間等可能涉及范圍查詢的列(類型)必須放在***一位。(如ix_created_time_userid(created_time,userid)這樣的索引意義大嗎?)
  • 索引泛濫攔截。(恨不得每個字段都建立一個索引……)
  • Varchar (N>128)攔截或者提示。(警惕!開發(fā)可能要寫 like 了……)
  • 索引命名規(guī)范檢查。(開發(fā)取的索引名稱五花八門,甚至有用的劣質(zhì) orm 框架生成一個 uuid 的索引名稱,當(dāng) DBA 在進(jìn)行執(zhí)行 explain 時看到這個很頭疼根本看不出到底使用了什么索引,往往還要多執(zhí)行一次 show……)

風(fēng)險識別攔截或者放行:

  • 刪索引會根據(jù)元數(shù)據(jù)來判斷是否表或者索引是否在使用。(這依托大量的元數(shù)據(jù)收集&分析,過去 DBA 看見刪除操作很頭疼要各種驗(yàn)證,最終在操作時還要集群內(nèi)灰度操作)
  • 禁止刪列操作。
  • Modify 操作損失進(jìn)度檢查。(如 text->varchar,varchar(100)->varchar(10) 等都是禁止的)
  • Modify 操作丟失屬性檢查。(該問題很隱蔽可能有天開發(fā)說 default 值丟失了,那多半是某次 DDL 時 Modify 語句沒有帶上原字段屬性導(dǎo)致的,當(dāng)這引發(fā)故障時肯定有人會指責(zé) DBA 為啥你沒審核到?MMP......)
  • 禁止跨庫操作。(防止開發(fā)通過 create table Notmydb.table 來意外的給別人創(chuàng)建表)
  • 禁止一切 Truncate,Drop 操作。

內(nèi)建規(guī)范檢查:

  • 大字段使用規(guī)范約束。(比如一個表里面超過一定比例的 Varchar,包含 longtext 等大文本類型)
  • DB,表,索引命名規(guī)范約束檢查。
  • 多活必要的字段及屬性檢查。

歷史校驗(yàn)結(jié)果數(shù)據(jù)沉淀:

  • 通過數(shù)據(jù)分析準(zhǔn)確的知道哪些產(chǎn)研或者開發(fā)在上述方面犯錯最多。(DBA 跟開發(fā)的關(guān)系往往也是斗智斗勇的關(guān)系你懂得……)

這里不得不說的是過去我們?yōu)榱朔乐归_發(fā)違反上述規(guī)則,除了人肉審核外還對開發(fā)去培訓(xùn)但是這往往都沒有用,該犯的錯誤還是會不斷的犯。

所以我們現(xiàn)在基本不在去搞什么培訓(xùn)了,完全由系統(tǒng)自動來完成審核。

這里我一直強(qiáng)調(diào)的是任何標(biāo)準(zhǔn)化/規(guī)范化都是必須能夠?qū)戇M(jìn)代碼里的,否則實(shí)施起來必然有缺漏。

多活下的發(fā)布系統(tǒng)

數(shù)據(jù)庫多活的架構(gòu)大致是這樣:M?DRC?M。這里 DRC 是我們的多機(jī)房數(shù)同步工具,這里可以把數(shù)據(jù)庫多活理解成雙 Master 系統(tǒng),只是用 D 代替了雙 Master 下的原生復(fù)制。

這種架構(gòu)下對 DBA 的維護(hù)挑戰(zhàn)還是非常大的,時間關(guān)系只分享關(guān)于數(shù)據(jù)庫發(fā)布的相關(guān)內(nèi)容,這也是最重要的一塊。

說到數(shù)據(jù)庫發(fā)布基本上就是在說 DDL 對吧,一直以來 DDL 對開發(fā)來說都是非常頭疼的,DBA 往往會選擇 PT 工具來完成 DDL 操作。

但是受到 PT 是基于觸發(fā)器實(shí)現(xiàn)的,影響 DDL 期間會產(chǎn)生鎖等待現(xiàn)象,這會造成業(yè)務(wù)上的影響,過去我們也在這上面吃過很多次虧。

Alter 通過什么方式來進(jìn)行?有如下幾個方式:

原生 DDL 多機(jī)房并行執(zhí)行:DRC 不支持,機(jī)房間延遲不可控,機(jī)房內(nèi)延遲巨大。

PT-OSC 多機(jī)房并行執(zhí)行:Row 模式下大表的 DDL 會產(chǎn)生大量的 Binlog,IDC 間的網(wǎng)絡(luò)瓶頸造成全局性影響。

PT 工具在不同機(jī)房間最終的 Rename 階段時間點(diǎn)不同,造成機(jī)房間數(shù)據(jù)結(jié)構(gòu)不一致導(dǎo)致 DRC 復(fù)制失敗,最終導(dǎo)致不可控的數(shù)據(jù)延遲。

基于觸發(fā)器的實(shí)現(xiàn)會產(chǎn)生額外的鎖,對業(yè)務(wù)影響明顯;基于 PT 源碼改造困難也難以與平臺整合(3P 語言只剩下了 Python……)。

Gh-OST 多機(jī)房并行執(zhí)行(基于 Go 實(shí)現(xiàn)):增量數(shù)據(jù)基于 Binlog 解析實(shí)現(xiàn)避免觸發(fā)器的影響;基于 Go 實(shí)現(xiàn)為改造提供可能。

關(guān)于 GH-OST 我不打算多講,大家可以去 Github 上看作者對實(shí)現(xiàn)原理的說明,這里還是簡要提一下大致工作流程:

  • 創(chuàng)建中間表臨時表。
  • 對該臨時表進(jìn)行 DDL。
  • 在 Master 或者 Slave 上注冊,Slave 接收 Binlog 并解析對應(yīng)表的 Events 事件。
  • Apply Events 到臨時表。
  • 從原表 Copy 數(shù)據(jù)到臨時表。
  • Cut-Over(我們的改造點(diǎn)從這里開始)相當(dāng)于 PT 的 Rename 階段。

我們做了一個協(xié)調(diào)器,每個 GH-OST 在 DDL 過程中都上報自己的執(zhí)行進(jìn)度,同時我們在 Cut-Over 前加了一層攔截。

必須等待多個 GH-OST 都完成數(shù)據(jù) Copy 后,多個 GH-OST 節(jié)點(diǎn)才會同時進(jìn)入 Cut-Over 階段。

這樣就保證了多機(jī)房同步 Rename 進(jìn)而來避免延遲的產(chǎn)生(事實(shí)上我們機(jī)房間的延遲都控制在秒級)。這里大家可能會有疑問直接在一個機(jī)房做不行嗎?可以依靠 DRC 同步???

首先 DRC 不支持 DDL 操作,這樣就決定了沒法通過 DRC 同步方式來進(jìn)行,其次機(jī)房間帶寬有限 DDL 期間產(chǎn)生大量 Binlog 會造成帶寬打滿的問題。

我們在進(jìn)行雙機(jī)房同步 DDL 時,為了防止 DRC 應(yīng)用了 GH-OST 產(chǎn)生的 Events,DRC 會主動丟棄 GH-OST 產(chǎn)生的 Binlog 具體是根據(jù) TableName 

命名規(guī)則來區(qū)分。

對 GH-OST 的改造還包含添加多機(jī)房負(fù)載均衡功能,由于 DB 是多機(jī)房部署的,你的 GH-OST 工具肯定不能部署在一個機(jī)房里(解析 Binlog 速度太慢,Copy 數(shù)據(jù)過程非常慢主要是消耗在網(wǎng)絡(luò)上的延時了)。

但是多機(jī)房部署也還是不夠的,還得是每個機(jī)房都部署幾套 GH-OST 系統(tǒng)。

因?yàn)楫?dāng)開發(fā)同時 DDL 的量比較大時,單臺 GH-OST 系統(tǒng)會因?yàn)橐馕龅?Binlog 量非常大導(dǎo)致 CPU、網(wǎng)卡流量非常高,影響性能(跟前面提到的閃回功能是同一個道理)。

搞定發(fā)布系統(tǒng)后,DBA 再也不用苦逼的值班搞發(fā)布了,起初我們搞了一個自動化執(zhí)行系統(tǒng),每天系統(tǒng)會自動完成絕大多數(shù)的工單發(fā)布工作。后來我們完全交給開發(fā)來執(zhí)行。

現(xiàn)在從開發(fā)申請發(fā)布到最終發(fā)布,完全由開發(fā)自助完成,自助率平均在 95% 左右,極少有 DBA 干預(yù)的情況。

隨著數(shù)據(jù)庫的不斷進(jìn)步與完善甚至開始往 SelfDrive 上發(fā)展加之這兩年 DevOps,AIOps 的快速發(fā)展。

也許留給傳統(tǒng)運(yùn)維 DBA 的時間真的不多了(不是我在鼓吹相信大家也能感受的到),我想除了時刻的危機(jī)感 + 積極擁抱變化外沒有其他捷徑了。

作者:蔡鵬

簡介:2015 年加入餓了么,見證了餓了么業(yè)務(wù)&技術(shù)從 0 到 1 的發(fā)展過程,并全程參與了數(shù)據(jù)庫及 DBA 團(tuán)隊(duì)高速發(fā)展全過程。同時也完成個人職能的轉(zhuǎn)型,由運(yùn)維 DBA 到 DEV-DBA 的轉(zhuǎn)變,也從 DB 的維穩(wěn)轉(zhuǎn)變到專心為 DBA 團(tuán)隊(duì)及 DEV 團(tuán)隊(duì)的賦能。

責(zé)任編輯:武曉燕 來源: 高效運(yùn)維
相關(guān)推薦

2018-08-08 10:09:47

自動化運(yùn)維MySQL

2015-10-08 10:55:23

云服務(wù)自動化運(yùn)維 ANSIBLE

2016-09-23 09:22:12

2018-01-03 09:57:19

異地雙活數(shù)據(jù)庫

2019-01-14 08:18:43

DBA數(shù)據(jù)庫運(yùn)維

2015-08-05 09:53:34

運(yùn)維自動化

2012-10-22 14:54:48

2011-04-01 15:07:29

數(shù)據(jù)庫自動化

2017-07-25 10:53:27

2014-08-04 10:10:35

IT運(yùn)維自動化運(yùn)維

2015-06-24 10:42:19

云計算運(yùn)維自動化運(yùn)維ANSIBLE

2022-06-09 13:45:18

vivoK8S集群Kubernetes

2018-06-23 07:31:05

2017-10-13 13:14:35

互聯(lián)網(wǎng)

2018-04-10 09:49:17

IT運(yùn)維人員京東運(yùn)維體系

2024-06-11 10:41:14

2018-12-14 11:04:56

數(shù)據(jù)庫運(yùn)維智能

2018-07-26 13:50:37

IT架構(gòu)運(yùn)維

2013-04-16 14:55:21

自動化運(yùn)維Puppet實(shí)戰(zhàn)

2014-09-22 11:24:18

運(yùn)維
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號