本發(fā)明涉及數(shù)據(jù)庫(kù)系統(tǒng),具體而言,涉及一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法和裝置。
背景技術(shù):
隨著越來(lái)越多的互聯(lián)網(wǎng)企業(yè)開(kāi)始使用數(shù)據(jù)庫(kù)作為企業(yè)保存信息的數(shù)據(jù)庫(kù),而其中最經(jīng)典的架構(gòu)就是主從讀寫(xiě)分離,通過(guò)這種方式實(shí)現(xiàn)海量業(yè)務(wù)的支持。常用的數(shù)據(jù)庫(kù)一般有MongoDB數(shù)據(jù)庫(kù)。作為衡量MongoDB數(shù)據(jù)庫(kù)主從可用性的一個(gè)重要指標(biāo),就是主從復(fù)制的延遲情況,一旦主從出現(xiàn)延遲,將會(huì)極大影響讀寫(xiě)分離數(shù)據(jù)的一致性,導(dǎo)致出現(xiàn)讀寫(xiě)不一致。因此,需要提出一個(gè)對(duì)MongoDB數(shù)據(jù)庫(kù)的主從復(fù)制延遲情況進(jìn)行監(jiān)控的方案。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法和裝置,以力圖解決或者至少緩解上面存在的問(wèn)題。
第一方面,本發(fā)明提供一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法,該方法包括:
獲取提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息,所述MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中包括數(shù)據(jù)庫(kù)角色參數(shù)和從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù);
根據(jù)所述MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中的數(shù)據(jù)庫(kù)角色參數(shù),確定所述MongoDB數(shù)據(jù)庫(kù)是否為從數(shù)據(jù)庫(kù);
在確定所述MongoDB數(shù)據(jù)庫(kù)為所述從數(shù)據(jù)庫(kù)后,根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù),獲取所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的從數(shù)據(jù)庫(kù)復(fù)制信息,所述從數(shù)據(jù)庫(kù)復(fù)制信息包括源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間;
根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息中的所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,確定所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間是否延遲。
可選地,在根據(jù)本發(fā)明的方法中,在所述獲取提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息之前,包括:
獲取連接所述提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器的驅(qū)動(dòng)文件;
在確定所述驅(qū)動(dòng)文件安裝成功后,通過(guò)預(yù)定連接連接到所述服務(wù)器。
可選地,在根據(jù)本發(fā)明的方法中,所述根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息中的所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,確定所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間是否延遲,包括:
根據(jù)所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,計(jì)算得到所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間;
判斷所述復(fù)制時(shí)間是否大于預(yù)定復(fù)制時(shí)間閾值;
如果所述復(fù)制時(shí)間大于所述預(yù)定復(fù)制時(shí)間閾值,則所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間發(fā)生延遲。
可選地,在根據(jù)本發(fā)明的方法中,還包括:
將存儲(chǔ)在第一列表中的上一次獲取的所述數(shù)據(jù)庫(kù)復(fù)制信息遷移到第二列表中;
將當(dāng)前獲取的所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)復(fù)制信息存儲(chǔ)在第一列表中。
可選地,在根據(jù)本發(fā)明的方法中,還包括:
響應(yīng)于接收到的用戶設(shè)置的需要顯示的數(shù)據(jù)庫(kù)對(duì)象的預(yù)定范圍,將對(duì)應(yīng)所述預(yù)定范圍的所述第一列表或所述第二列表中的所述數(shù)據(jù)庫(kù)對(duì)象進(jìn)行顯示。
第二方面,本發(fā)明提供一種數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控裝置,該方法包括:
信息獲取單元,用于獲取提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息,所述MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中包括數(shù)據(jù)庫(kù)角色參數(shù)和從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù);
數(shù)據(jù)庫(kù)確定單元,用于根據(jù)所述MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中的數(shù)據(jù)庫(kù)角色參數(shù),確定所述MongoDB數(shù)據(jù)庫(kù)是否為從數(shù)據(jù)庫(kù);
復(fù)制信息獲取單元,用于在確定所述MongoDB數(shù)據(jù)庫(kù)為所述從數(shù)據(jù)庫(kù)后,根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù),獲取所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的從數(shù)據(jù)庫(kù)復(fù)制信息,所述從數(shù)據(jù)庫(kù)復(fù)制信息包括源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間;
延遲時(shí)間監(jiān)控單元,用于根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息中的所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,確定所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間是否延遲。
可選地,在根據(jù)本發(fā)明的裝置中,還包括服務(wù)器連接單元,所述服務(wù)器連接單元,用于獲取連接所述能夠提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器的驅(qū)動(dòng)文件,在確定所述驅(qū)動(dòng)文件安裝成功后,通過(guò)預(yù)定連接連接到所述服務(wù)器。
可選地,在根據(jù)本發(fā)明的裝置中,所述延遲時(shí)間監(jiān)控單元還用于:
根據(jù)所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,計(jì)算得到所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間;
判斷所述復(fù)制時(shí)間是否大于預(yù)定復(fù)制時(shí)間閾值;
如果所述復(fù)制時(shí)間大于所述預(yù)定復(fù)制時(shí)間閾值,則所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間發(fā)生延遲。
可選地,在根據(jù)本發(fā)明的裝置中,還包括信息遷移單元,所述信息遷移單元,用于將存儲(chǔ)在第一列表中的上一次獲取的所述數(shù)據(jù)庫(kù)復(fù)制信息遷移到第二列表中;
所述信息獲取單元,用于將當(dāng)前獲取的所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)復(fù)制信息存儲(chǔ)在第一列表中。
可選地,在根據(jù)本發(fā)明的裝置中,還包括數(shù)據(jù)庫(kù)對(duì)象顯示單元,所述數(shù)據(jù)庫(kù)對(duì)象顯示單元,用于響應(yīng)于接收到的用戶設(shè)置的需要顯示的數(shù)據(jù)庫(kù)對(duì)象的預(yù)定范圍,將對(duì)應(yīng)所述預(yù)定范圍的所述第一列表或所述第二列表中的所述數(shù)據(jù)庫(kù)對(duì)象進(jìn)行顯示。
根據(jù)本發(fā)明的技術(shù)方案,通過(guò)分析MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息,監(jiān)控從數(shù)據(jù)庫(kù)復(fù)制延遲情況,進(jìn)行預(yù)警,避免主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)數(shù)據(jù)不一致。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說(shuō)明如下。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1示出了適于用來(lái)實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖;
圖2示出了本發(fā)明實(shí)施例所提供的一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法的流程圖;
圖3示出了本發(fā)明實(shí)施例所提供的MongoDB數(shù)據(jù)庫(kù)模型示意圖;
圖4示出了本發(fā)明實(shí)施例所提供的一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來(lái)布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1示出了適于用來(lái)實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖。圖1顯示的計(jì)算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施方式的功能和使用范圍帶來(lái)任何限制。
如圖1所示,計(jì)算機(jī)系統(tǒng)/服務(wù)器12以通用計(jì)算設(shè)備的形式表現(xiàn)。計(jì)算機(jī)系統(tǒng)/服務(wù)器12的組件可以包括但不限于:一個(gè)或者多個(gè)處理器或者處理單元16,系統(tǒng)存儲(chǔ)器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲(chǔ)器28和處理單元16)的總線18。
總線18表示幾類(lèi)總線結(jié)構(gòu)中的一種或多種,包括存儲(chǔ)器總線或者存儲(chǔ)器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來(lái)說(shuō),這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強(qiáng)型工SA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局域總線以及外圍組件互連(PCI)總線。
計(jì)算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計(jì)算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計(jì)算機(jī)系統(tǒng)/服務(wù)器12訪問(wèn)的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動(dòng)的和不可移動(dòng)的介質(zhì)。
系統(tǒng)存儲(chǔ)器28可以包括易失性存儲(chǔ)器形式的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲(chǔ)器(RAM)30和/或高速緩存存儲(chǔ)器32。計(jì)算機(jī)系統(tǒng)/服務(wù)器12可以進(jìn)一步包括其他可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì)。僅作為舉例,存儲(chǔ)系統(tǒng)34可以用于讀寫(xiě)不可移動(dòng)的、非易失性磁介質(zhì)(圖1未顯示,通常稱為“硬盤(pán)驅(qū)動(dòng)器”)。盡管圖1中未示出,可以提供用于對(duì)可移動(dòng)非易失性磁盤(pán)(例如“軟盤(pán)”)讀寫(xiě)的磁盤(pán)驅(qū)動(dòng)器,以及對(duì)可移動(dòng)非易失性光盤(pán)(例如CD-ROM,DVD-ROM或者其他光介質(zhì))讀寫(xiě)的光盤(pán)驅(qū)動(dòng)器。在這些情況下,每個(gè)驅(qū)動(dòng)器可以通過(guò)一個(gè)或者多個(gè)數(shù)據(jù)介質(zhì)接口與總線18相連。存儲(chǔ)器28可以包括至少一個(gè)程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個(gè))程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實(shí)施方式的功能。
具有一組(至少一個(gè))程序模塊42的程序/實(shí)用工具40,可以存儲(chǔ)在例如存儲(chǔ)器28中,這樣的程序模塊42包括—但不限于—操作系統(tǒng)、一個(gè)或者多個(gè)應(yīng)用程序、其他程序模塊以及程序數(shù)據(jù),這些示例中的每一個(gè)或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施方式中的功能和/或方法。
計(jì)算機(jī)系統(tǒng)/服務(wù)器12也可以與一個(gè)或多個(gè)外部設(shè)備14(例如鍵盤(pán)、指向設(shè)備、顯示器24等)通信,還可與一個(gè)或者多個(gè)使得用戶能與該計(jì)算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè)備通信,和/或與使得該計(jì)算機(jī)系統(tǒng)/服務(wù)器12能與一個(gè)或多個(gè)其他計(jì)算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過(guò)輸入/輸出(I/0)接口22進(jìn)行。并且,計(jì)算機(jī)系統(tǒng)/服務(wù)器12還可以通過(guò)網(wǎng)絡(luò)適配器20與一個(gè)或者多個(gè)網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過(guò)總線18與計(jì)算機(jī)系統(tǒng)/服務(wù)器12的其他模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合計(jì)算機(jī)系統(tǒng)/服務(wù)器12使用其他硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動(dòng)器、冗余處理單元、外部磁盤(pán)驅(qū)動(dòng)陣列、RAID系統(tǒng)、磁帶驅(qū)動(dòng)器以及數(shù)據(jù)備份存儲(chǔ)系統(tǒng)等。
圖2示出了根據(jù)本發(fā)明實(shí)施例的一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法的流程圖。如圖2所示,該方法始于步驟S210。
在步驟S210中,獲取提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息。其中,MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息一般是JSON格式,狀態(tài)信息包括數(shù)據(jù)庫(kù)角色參數(shù)和從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù)。
MongoDB數(shù)據(jù)庫(kù)是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),由C++語(yǔ)言編寫(xiě),旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類(lèi)似JSON的BSON格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類(lèi)型。Mongo數(shù)據(jù)庫(kù)一般包括主庫(kù)(Master)和從庫(kù)(Slave),可參考圖3。在MongoDB服務(wù)器中,用于處理客戶端的請(qǐng)求,且不復(fù)制其他MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)副本的服務(wù)器為主服務(wù)器,即Master。在MongoDB服務(wù)器中,通過(guò)復(fù)制來(lái)保存主服務(wù)器的數(shù)據(jù)副本,不接受任何客戶端的寫(xiě)請(qǐng)求,只允許讀請(qǐng)求的服務(wù)器為從服務(wù)器,即Slave。
MongoDB數(shù)據(jù)庫(kù)自身攜帶的性能分析工具如mongostat會(huì)實(shí)時(shí)采集自身MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息,并存儲(chǔ)在提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中。其中,MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息包括數(shù)據(jù)每秒插入次數(shù)、每秒查詢次數(shù)、內(nèi)存使用量以及主從復(fù)制信息(從數(shù)據(jù)庫(kù)復(fù)制信息)等等。
在獲取上述狀態(tài)信息之前,獲取連接提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器的驅(qū)動(dòng)文件,在確定驅(qū)動(dòng)文件安裝成功后,通過(guò)預(yù)定連接連接到服務(wù)器。例如,監(jiān)控工具(即MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控裝置)下載pymongo.tar.gz驅(qū)動(dòng)文件,驅(qū)動(dòng)文件解壓安裝后,Python腳本文件就能使用pymongo函數(shù)建立與提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器連接,在通過(guò)MongoDB數(shù)據(jù)庫(kù)權(quán)限驗(yàn)證后,監(jiān)控工具將被允許通過(guò)TCP連接方式連接至遠(yuǎn)程MongoDB數(shù)據(jù)庫(kù)。
在與MongoDB數(shù)據(jù)庫(kù)建立連接后,監(jiān)控工具通過(guò)執(zhí)行db.serverStatus()命令獲取MongoDB數(shù)據(jù)庫(kù)中的狀態(tài)信息。上述命令是MongoDB內(nèi)部獲取一系列統(tǒng)計(jì)信息的命令,通過(guò)此命令不僅能獲得MongoDB服務(wù)器的一些統(tǒng)計(jì)信息和基本信息,還可以獲取當(dāng)時(shí)的復(fù)制信息,通過(guò)篩選這些信息,可以獲得此時(shí)服務(wù)器的狀態(tài)信息。
獲取到上述狀態(tài)信息,如,server_status={"host":"xxx","repl":{"apply":{"batches":{"num":0,"totalMillis":0},"ops":NumberLong(0)},},"ok":1},解析上述狀態(tài)信息,獲取數(shù)據(jù)庫(kù)角色參數(shù)role和從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù)repl,以便根據(jù)上述參數(shù)獲取與參數(shù)對(duì)應(yīng)的信息。
在步驟S220中,根據(jù)MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中的數(shù)據(jù)庫(kù)角色參數(shù),確定MongoDB數(shù)據(jù)庫(kù)是否為從數(shù)據(jù)庫(kù)。MongoDB數(shù)據(jù)庫(kù)的角色包括主數(shù)據(jù)庫(kù)(Master)和從數(shù)據(jù)庫(kù)(Slave),通過(guò)數(shù)據(jù)庫(kù)角色參數(shù)(role)存儲(chǔ)的內(nèi)容可以確定MongoDB數(shù)據(jù)是否為從數(shù)據(jù)庫(kù)。
在步驟S230中,在確定MongoDB數(shù)據(jù)庫(kù)為從數(shù)據(jù)庫(kù)后,根據(jù)從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù),獲取從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的從數(shù)據(jù)庫(kù)復(fù)制信息,從數(shù)據(jù)庫(kù)復(fù)制信息包括源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間。
在步驟S220中,解析的repl字段中存儲(chǔ)有從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的從數(shù)據(jù)庫(kù)復(fù)制信息,該從數(shù)據(jù)庫(kù)復(fù)制信息中的源數(shù)據(jù)庫(kù)最近一次處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)最近一次從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間分別保存到局部變量master_datetime、slave_datetime中。
在一種實(shí)施方式中,將存儲(chǔ)在第一列表(如mongodb_replication)中的上一次獲取的數(shù)據(jù)庫(kù)復(fù)制信息遷移到第二列表(如mongodb_replication_history)中,將當(dāng)前獲取的所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)復(fù)制信息存儲(chǔ)在第一列表中。例如,在python腳本文件中執(zhí)行SQL語(yǔ)句,通過(guò)SQL語(yǔ)句將mongodb_replication表中保留的上次的從數(shù)據(jù)庫(kù)復(fù)制信息遷移到mongodb_replication_history表中,數(shù)據(jù)庫(kù)對(duì)象遷移代碼為:insertinto mongodb_replication_history SELECT*frommongodb_replication where server_id='%s',實(shí)現(xiàn)從數(shù)據(jù)庫(kù)復(fù)制信息持久化存儲(chǔ)。隨后,通過(guò)SQL語(yǔ)句清空mongodb_replication表(如deletefrom mongodb_replication where server_id='%s')。
隨后,將代碼變量中保存從數(shù)據(jù)復(fù)制信息的變量(如master_host、master_datetime、slave_datetime、delay等)轉(zhuǎn)化成SQL語(yǔ)句,即insertintomongodb_replication(server_id,tags,host,port,role,master_host,master_datetime,slave_datetime,delay)values(%s,%s,%s,%s,%s,master_host,master_datetime,slave_datetime,delay),將最新的從數(shù)據(jù)庫(kù)復(fù)制信息通過(guò)python寫(xiě)入到mongodb_replication表中。
mongodb_replication表中存放了實(shí)時(shí)的從數(shù)據(jù)庫(kù)復(fù)制信息,每隔一段時(shí)間就會(huì)獲取最新的從數(shù)據(jù)庫(kù)復(fù)制信息,表中的信息也會(huì)隨之更新,web頁(yè)面展示的信息都是最新的信息;
在一種實(shí)施方式中,響應(yīng)于接收到的用戶設(shè)置的需要顯示的數(shù)據(jù)庫(kù)對(duì)象的預(yù)定范圍,將對(duì)應(yīng)預(yù)定范圍的第一列表或第二列表中的所述數(shù)據(jù)庫(kù)對(duì)象進(jìn)行顯示。例如,通過(guò)PHP腳本文件中的函數(shù)如get_replication_total_record(),也就是在php內(nèi)執(zhí)行SQL命令:select*from monodb_replication where server_id=%s,建立和mongodb_replication表的映射,只要web頁(yè)面進(jìn)行刷新操作時(shí),都能獲取mongodb_replication表中的最新信息。當(dāng)在web頁(yè)面選擇某一時(shí)間段時(shí),就能直接獲取mongodb_replication_history表中的一段時(shí)間內(nèi)的數(shù)據(jù)進(jìn)行顯示。
在步驟S240中,根據(jù)從數(shù)據(jù)庫(kù)復(fù)制信息中的源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,確定數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間是否延遲。
根據(jù)一種實(shí)施方式,根據(jù)源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,計(jì)算得到數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間,判斷復(fù)制時(shí)間是否大于預(yù)定復(fù)制時(shí)間閾值,如果復(fù)制時(shí)間大于預(yù)定復(fù)制時(shí)間閾值,則數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間發(fā)生延遲。在一個(gè)實(shí)施例中,設(shè)定MongoDB數(shù)據(jù)庫(kù)復(fù)制延遲告警閥值,即預(yù)定復(fù)制時(shí)間閾值,此閥值的設(shè)定一般與業(yè)務(wù)對(duì)復(fù)制延遲的容忍程度有關(guān),當(dāng)業(yè)務(wù)要求主從復(fù)制之間延遲較低時(shí),可以設(shè)置閥值為60秒。在python中執(zhí)行SQL命令,獲取mongodb_replication表中獲取MongoDB復(fù)制延遲時(shí)間,判斷是否超過(guò)預(yù)定復(fù)制時(shí)間閥值。如果超過(guò)上述預(yù)定復(fù)制時(shí)間閥值,說(shuō)明數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間發(fā)生延遲,進(jìn)行報(bào)警,由相關(guān)人員進(jìn)行處理。進(jìn)一步,通過(guò)check_if_ok()函數(shù)判斷主從復(fù)制延遲情況是否已經(jīng)緩解,即復(fù)制時(shí)間是否小于給定的預(yù)定復(fù)制時(shí)間閥值。在延遲情況得到緩解后,報(bào)警解除。
根據(jù)本發(fā)明的技術(shù)方案,通過(guò)分析MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息,監(jiān)控從數(shù)據(jù)庫(kù)復(fù)制延遲情況,進(jìn)行預(yù)警,避免主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)數(shù)據(jù)不一致。
圖4示出了根據(jù)本發(fā)明實(shí)施例提供的一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控裝置的結(jié)構(gòu)圖。如圖4所示,該裝置包括:信息獲取單元410、數(shù)據(jù)庫(kù)確定單元420、復(fù)制信息獲取單元430、延遲時(shí)間監(jiān)控單元440和服務(wù)器連接單元450、信息遷移單元460和數(shù)據(jù)庫(kù)對(duì)象顯示單元470。
信息獲取單元410獲取提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器中MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息。MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中包括數(shù)據(jù)庫(kù)角色參數(shù)和從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù)。在獲取上述狀態(tài)信息之前,服務(wù)器連接單元450獲取連接所述能夠提供MongoDB數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器的驅(qū)動(dòng)文件,在確定所述驅(qū)動(dòng)文件安裝成功后,通過(guò)預(yù)定連接連接到所述服務(wù)器。
信息遷移單元460將存儲(chǔ)在第一列表中的上一次獲取的所述數(shù)據(jù)庫(kù)復(fù)制信息遷移到第二列表中,信息獲取單元410用于將當(dāng)前獲取的所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)復(fù)制信息存儲(chǔ)在第一列表中。
數(shù)據(jù)庫(kù)確定單元420根據(jù)所述MongoDB數(shù)據(jù)庫(kù)的狀態(tài)信息中的數(shù)據(jù)庫(kù)角色參數(shù),確定所述MongoDB數(shù)據(jù)庫(kù)是否為從數(shù)據(jù)庫(kù)。
復(fù)制信息獲取單元430在確定所述MongoDB數(shù)據(jù)庫(kù)為所述從數(shù)據(jù)庫(kù)后,根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息參數(shù),獲取所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的從數(shù)據(jù)庫(kù)復(fù)制信息,所述從數(shù)據(jù)庫(kù)復(fù)制信息包括源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間。
數(shù)據(jù)庫(kù)對(duì)象顯示單元470響應(yīng)于接收到的用戶設(shè)置的需要顯示的數(shù)據(jù)庫(kù)對(duì)象的預(yù)定范圍,將對(duì)應(yīng)所述預(yù)定范圍的所述第一列表或所述第二列表中的所述數(shù)據(jù)庫(kù)對(duì)象進(jìn)行顯示。
延遲時(shí)間監(jiān)控單元440根據(jù)所述從數(shù)據(jù)庫(kù)復(fù)制信息中的源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,確定所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間是否延遲。其中,延遲時(shí)間監(jiān)控單元440根據(jù)所述源數(shù)據(jù)庫(kù)處理客戶端請(qǐng)求的時(shí)間和所述從數(shù)據(jù)庫(kù)從源數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)對(duì)象的時(shí)間,計(jì)算得到所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間,判斷所述復(fù)制時(shí)間是否大于預(yù)定復(fù)制時(shí)間閾值,如果所述復(fù)制時(shí)間大于所述預(yù)定復(fù)制時(shí)間閾值,則所述數(shù)據(jù)庫(kù)對(duì)象的復(fù)制時(shí)間發(fā)生延遲。
本發(fā)明實(shí)施例所提供的一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控裝置可以為設(shè)備上的特定硬件或者安裝于設(shè)備上的軟件或固件等。本發(fā)明實(shí)施例所提供的裝置,其實(shí)現(xiàn)原理及產(chǎn)生的技術(shù)效果和前述方法實(shí)施例相同,為簡(jiǎn)要描述,裝置實(shí)施例部分未提及之處,可參考前述方法實(shí)施例中相應(yīng)內(nèi)容。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,前述描述的系統(tǒng)、裝置和單元的具體工作過(guò)程,均可以參考上述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,又例如,多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明提供的實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。
所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類(lèi)似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋?zhuān)送?,術(shù)語(yǔ)“第一”、“第二”、“第三”等僅用于區(qū)分描述,而不能理解為指示或暗示相對(duì)重要性。
最后應(yīng)說(shuō)明的是:以上所述實(shí)施例,僅為本發(fā)明的具體實(shí)施方式,用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制,本發(fā)明的保護(hù)范圍并不局限于此,盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),其依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改或可輕易想到變化,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改、變化或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍。都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。