MySQL主從信息的元數(shù)據(jù)維護(hù)
前幾天專門花了時(shí)間開始做元數(shù)據(jù)的稽核,其實(shí)這只是一個(gè)初步的開始,也算是才開始走上正道。
后續(xù)我又推出了幾個(gè)方面的改進(jìn),準(zhǔn)備在元數(shù)據(jù)的粒度和深度上逐步改善,把已有的元數(shù)據(jù)完善起來,能夠發(fā)現(xiàn)很多潛在的問題,然后再逐步的改進(jìn),對于團(tuán)隊(duì)內(nèi)的同學(xué)來說,他們不需要花費(fèi)很多的精力去收集信息,這個(gè)事情讓任務(wù)去做,他們需要做的是確認(rèn)和問題修正。
比如通用元信息部分,對于MySQL實(shí)例來說,基本就是IP,端口,機(jī)房,數(shù)據(jù)庫角色(Master,Slave等),數(shù)據(jù)版本,應(yīng)用信息等,系統(tǒng)層的元數(shù)據(jù),比如硬盤,內(nèi)存,CPU應(yīng)該是由專有的模塊來維護(hù)。
確切的說,上面的這些信息只是通用,很難滿足業(yè)務(wù)的實(shí)際需求,比如一個(gè)MySQL服務(wù)端配置,是否開啟GTID,版本,角色,socket文件路徑,數(shù)據(jù)文件路徑,buffer_pool大小,是否開啟binlog,server_id,VIP等這些信息其實(shí)是我們需要明確了解的。
有了這些信息,其實(shí)能夠讓我們對于實(shí)例的屬性有一個(gè)基本的了解。
整個(gè)信息的收集看起來是一個(gè)很苦逼的過程,實(shí)際上我們可以讓它變得高大上一些,比如我們把信息收集后使用前端頁面做匯總和信息稽核,比如讓數(shù)據(jù)的收集實(shí)現(xiàn)自動(dòng)化,批量完成,而不需要手工來觸發(fā)完成。
這些工作我們可以寫腳本來完成,信息可以收集到,但是信息的管理和統(tǒng)籌和單純的信息收集就不是一個(gè)層級了。我們在這個(gè)地方需要做的是元數(shù)據(jù)的管理和稽核,提前發(fā)現(xiàn)更多的問題,來逐步的完善,這樣一來元數(shù)據(jù)最起碼是可以參考和依賴的。
到了這個(gè)層級之后,其實(shí)我們能夠得到一個(gè)基本的實(shí)例屬性列表,但是顯然還是還是存在短板,我們的MySQL實(shí)例基本上是主從復(fù)制的關(guān)系,有些實(shí)例可能是測試環(huán)境,或者是數(shù)據(jù)流轉(zhuǎn)的節(jié)點(diǎn),所以可能沒有從庫也沒有備份。所以對于MySQL信息的歸類我會(huì)這樣來分類和處理:
1.***個(gè)維度是單點(diǎn)實(shí)例,單點(diǎn)實(shí)例是那些測試環(huán)境,數(shù)據(jù)流轉(zhuǎn)節(jié)點(diǎn)或者業(yè)務(wù)優(yōu)先級不高的業(yè)務(wù)。這些業(yè)務(wù)允許數(shù)據(jù)丟失,甚至允許環(huán)境重建,有一個(gè)基本的備份即可,這類的業(yè)務(wù)我們首先剝離出來,后面處理的時(shí)候就可以可以繞過這些節(jié)點(diǎn),比如對于這些節(jié)點(diǎn)來說,可能不需要備份,可能不需要每天備份,壓根不需要增量備份,binlog備份,按照這個(gè)規(guī)劃,做了這些信息確認(rèn)之后,后期要完成的備份恢復(fù)就有據(jù)可依,要不費(fèi)了半天勁,***發(fā)現(xiàn)業(yè)務(wù)優(yōu)先級不高,做事情的性價(jià)比就大打折扣。
2.第二個(gè)維度是數(shù)據(jù)庫角色,數(shù)據(jù)庫的角色其實(shí)不能嚴(yán)格意義上歸類為Master,Slave,其實(shí)可以有更多的類型,比如單點(diǎn)業(yè)務(wù),我們可以歸類為SingleDB,如果是中繼節(jié)點(diǎn)(show master status或者show slave status持有雙重角色),我們可以歸類為RelayDB,如果是主庫或者是從庫即為Master,Slave,如果屬于MHA或者M(jìn)GR的集群環(huán)境等,其實(shí)這個(gè)角色可以更加清晰,對于這部分信息我們需要做減法,即MHA或者M(jìn)GR的環(huán)境,這類信息可以歸類為集群信息,我們可以對其他的信息按照SingleDB,RelayDB,Master,Slave這四個(gè)維度來統(tǒng)計(jì)即可。
要實(shí)現(xiàn)這個(gè)功能,就有一些技巧需要補(bǔ)充了。
我們在這里需要兩個(gè)腳本:
1)通過IP和端口信息得知實(shí)例的角色(Master,Slave,RelayDB,SingleDB等)
2)通過Slave和RelayDB的信息來得到Master的信息,亮點(diǎn)也就在此,通過這些信息我們可以清晰的達(dá)到一個(gè)復(fù)制關(guān)系圖,甚至可以看到一些意想不到的問題。
比如下面的IP信息,數(shù)據(jù)庫角色是中繼節(jié)點(diǎn)RelayDB(既是Master又是Slave)
我們根據(jù)IP的后兩段內(nèi)容搜索得到下面的一個(gè)基本列表。
這樣一個(gè)關(guān)系,如果自己來刻意維護(hù),其實(shí)很容易就會(huì)迷茫,或者意識不到這種級聯(lián)關(guān)系的存在,但是我們對這些數(shù)據(jù)進(jìn)行抽象,就很快能夠得到這樣的餓一個(gè)關(guān)系圖,原來是這樣的一個(gè)級聯(lián)關(guān)系。這樣一來124.16這個(gè)中繼節(jié)點(diǎn)的角色和上下游的關(guān)系就很清晰了,那么從這個(gè)角度來看,我們是否需要對124.76做數(shù)據(jù)的備份就很容易得出結(jié)論了。
或者你可以基于這樣的一個(gè)關(guān)系型結(jié)構(gòu)來構(gòu)建出一個(gè)更加完整的關(guān)系圖,如果哪個(gè)環(huán)境缺少了信息也能夠很清晰的判斷出來。
到了這個(gè)階段,就是發(fā)揮數(shù)據(jù)分析價(jià)值的時(shí)候了,數(shù)據(jù)一直在那兒,就看你是怎么處理它的。