本發(fā)明屬于mongodb數(shù)據(jù)庫慢日志管理和性能調(diào)優(yōu)領(lǐng)域,主要應(yīng)用于互聯(lián)網(wǎng)行業(yè)海量存儲和性能調(diào)優(yōu)場景。
背景技術(shù):
隨著互聯(lián)網(wǎng)行業(yè)蓬勃發(fā)展,業(yè)務(wù)對數(shù)據(jù)庫的需求更加多樣化,其中,mongodb數(shù)據(jù)庫作為非關(guān)系型數(shù)據(jù)庫,在盛傳環(huán)境應(yīng)用越來越廣泛。對于大規(guī)模mongodb集群,管理海量的慢日志顯得越來越重要。
現(xiàn)有的管理慢日志系統(tǒng)的缺點:
(1)維護成本高:需要較多的人工維護mongodb日志管理工作,效率低下。
(2)功能簡單:無法解析mongodb慢日志和展示慢日志,無法查看歷史信息。
(3)缺乏自動化:自動化程度低下,需要大量的人力操作。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供一種基于salt的海量mongodb慢日志管理系統(tǒng),可以管理大規(guī)模mongodb慢日志,并且可以解析慢日志,為性能調(diào)優(yōu)提供參考依據(jù)。
本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:一種基于salt的海量mongodb慢日志管理系統(tǒng),包括salt管理端、mongodb節(jié)點和分布式存儲;
salt管理端是管理salt客戶端的服務(wù)器,用于注冊和注銷salt客戶端,發(fā)送指令到salt客戶端;salt管理端包括salt管理模塊、元信息管理模塊、采集慢日志模塊和解析慢日志模塊;
mongodb節(jié)點是部署mongodb服務(wù)的服務(wù)器,每個mongodb節(jié)點均需要部署salt客戶端;salt客戶端接收salt管理端的指令,完成相應(yīng)的操作,返回結(jié)果給salt管理端;mongodb節(jié)點包括慢日志管理模塊;
分布式存儲是指存儲海量小文件的分布式文件系統(tǒng),包括存儲慢日志模塊。
進一步地,所述salt管理模塊包括:
在所有mongodb節(jié)點部署salt客戶端,salt管理端部署在單獨的一臺服務(wù)器上。該模塊定期調(diào)用salt管理端接口,檢查所有的mongodb節(jié)點上的salt客戶端是否注冊到salt管理端,如未注冊,調(diào)用salt管理端接口,注冊所述salt客戶端;如注冊失敗,則發(fā)送通知給管理員??蛇x擇注銷某個mongodb節(jié)點的salt客戶端。所有的mongodb節(jié)點對應(yīng)的salt客戶端全部注冊到salt管理端后,salt管理端就可以發(fā)送指令和文件給salt客戶端,完成特定的操作。在salt管理端,定期檢測salt客戶端是否通達,如不通,發(fā)送通知給管理員。
進一步地,所述元信息管理模塊包括:
salt管理端定期調(diào)用元信息管理模塊,及時獲取最新的元信息。所述元信息包括mongodb節(jié)點主機名、mongodb節(jié)點ip、mongodb端口和mongodb慢日志文件名。
首先,salt管理端獲取所有的mongodb節(jié)點主機名;然后,針對每個mongodb節(jié)點,salt管理端通過發(fā)送指令給salt客戶端,獲取每個mongodb節(jié)點上所有的mongodb進程信息,通過mongodb進程信息,可以解析得到mongodb配置文件名,通過所述mongodb配置文件名,可以獲取mongodb端口和mongodb慢日志文件名。同時,根據(jù)mongodb節(jié)點主機名獲取到mongodb節(jié)點ip。所述mongodb節(jié)點主機名、mongodb節(jié)點ip、mongodb端口和mongodb慢日志文件名保存在元信息表中。存儲慢日志模塊運行結(jié)束后,慢日志文件名和存儲路徑保存在慢日志元信息表中。
進一步地,所述慢日志管理模塊包括:
需要傳入的參數(shù):mongodb節(jié)點主機名mongodb慢日志文件名
慢日志管理模塊定期切割慢日志文件和清理無用慢日志文件。
在salt管理端,采用定時任務(wù)形式,定期切割所有mongodb節(jié)點上的mongodb慢日志文件:
針對每個所述mongodb節(jié)點,根據(jù)所述mongodb慢日志文件名,執(zhí)行歸檔操作,將mongodb慢日志文件內(nèi)容打印到一個以日期為后綴的文件里,記為歸檔文件;同時,清空mongodb慢日志文件內(nèi)容。所述日期是當天的日期。對于3天前的歸檔文件,定期刪除。在salt管理端,定期清理3天前的mongodb慢日志文件和慢日志解析文件。
進一步地,所述采集慢日志模塊包括:
需要傳入如下兩個參數(shù):mongodb節(jié)點主機名、歸檔mongdb慢日志文件名。
慢日志管理模塊執(zhí)行結(jié)束后,salt管理端發(fā)送操作指令到mongodb節(jié)點上salt客戶端,采集mongodb節(jié)點上的歸檔mongodb慢日志文件,這樣,歸檔mongodb慢日志文件傳輸?shù)絪alt管理端指定目錄。
進一步地,所述解析慢日志模塊包括:
需要傳入的參數(shù):歸檔mongodb慢日志文件名
分析歸檔mongodb慢日志文件內(nèi)容,得到慢日志統(tǒng)計信息,保存在相應(yīng)的慢日志解析文件。
salt管理端在調(diào)用采集慢日志模塊結(jié)束之后,所有的歸檔mongodb慢日志文件存放在salt管理端指定目錄中,此時,定時任務(wù)調(diào)用慢日志解析腳本,解析每個歸檔mongodb慢日志文件,分別得到相應(yīng)的慢日志解析文件。
進一步地,所述存儲慢日志模塊包括:
需要傳入的參數(shù):歸檔mongodb慢日志文件名、歸檔mongodb慢日志解析文件名
在salt管理端,通過調(diào)用分布式存儲接口,上傳所述歸檔mongodb慢日志文件和慢日志解析文件到分布式存儲,然后返回mongodb慢日志文件和慢日志解析文件的存儲路徑,分別記為慢日志存儲路徑和慢日志解析文件存儲路徑。然后調(diào)用元信息管理模塊,把慢日志文件名,慢日志存儲路徑,慢日志解析文件和慢日志解析文件存儲路徑記錄到慢日志元信息表中。
進一步地,該系統(tǒng)還包括慢日志管理平臺,用于在web頁面展示慢日志的詳細信息,方便查看mongodb數(shù)據(jù)庫存在的性能問題和及時進行調(diào)優(yōu);包括展示慢日志模塊,存儲慢日志模塊執(zhí)行結(jié)束后,慢日志管理平臺調(diào)用慢日志元信息表展示所述慢日志解析文件,便于直觀查看mongodb存在的性能問題,為性能調(diào)優(yōu)提供準確參考。
本發(fā)明提出的基于salt的海量mongodb慢日志管理系統(tǒng),優(yōu)點如下:
(1)支持海量存儲:本發(fā)明采用分布式存儲,可以支持大規(guī)模mongodb慢日志存儲。
(2)維護成本低:采用自動化方式管理慢日志,維護成本很低
(3)便于性能調(diào)優(yōu):解析mongodb慢日志,可以輕松查看效率低下的慢查詢,大大提升性能調(diào)優(yōu)效果。
(4)可視化展示:采用平臺方式展示慢日志解析文件,更加直觀,可視化效果更好。
附圖說明
圖1是本發(fā)明基于salt的海量mongodb慢日志管理系統(tǒng)總體架構(gòu)圖。
圖2是本發(fā)明各個模塊相互調(diào)用的流程圖。
具體實施方式
圖1是本發(fā)明基于salt的海量mongodb慢日志管理系統(tǒng)總體架構(gòu)圖??傮w包括四部分:salt管理端、mongodb節(jié)點、分布式存儲和慢日志管理平臺。salt管理端首先獲取所有mongodb節(jié)點的mongodb慢日志元信息,然后采集慢日志并進行解析,把慢日志文件和慢日志解析文件存儲在分布式存儲中,在慢日志管理平臺中展示mongodb慢日志解析文件內(nèi)容。
圖2是本發(fā)明各個模塊相互調(diào)用的流程圖。首先,salt管理模塊通過salt客戶端獲取所有mongodb節(jié)點上mongodb服務(wù)元信息,并注冊到元信息管理模塊;通過salt客戶端定期切割慢日志文件,采集慢日志模塊采集所述慢日志并發(fā)送所述慢日志到salt管理端;解析慢日志模塊在salt管理端解析所述慢日志得到解析文件,然后存儲慢日志模塊發(fā)送所述解析文件和慢日志文件到分布式存儲,并把慢日志和解析文件名稱以及存儲路徑注冊到元信息管理模塊??蛇x的,展示慢日志模塊調(diào)用元信息管理模塊,展示所述慢日志解析文件內(nèi)容。
下面詳細介紹各模塊的實現(xiàn)過程:
(1)salt管理端
salt管理端是管理salt客戶端的服務(wù)器,用于注冊和注銷salt客戶端,發(fā)送指令到salt客戶端。所述指令一般是通過一個或者多個linux命令完成的操作。salt客戶端接收salt管理端的指令,完成相應(yīng)的操作,返回結(jié)果給salt管理端。salt管理端包括salt管理模塊、元信息管理模塊、采集慢日志模塊和解析慢日志模塊。
(2)mongodb節(jié)點
mongodb節(jié)點是指部署mongodb服務(wù)的服務(wù)器,每個mongodb節(jié)點均需要部署salt客戶端。主要包括慢日志管理模塊。
(3)分布式存儲
分布式存儲是指存儲海量小文件的分布式文件系統(tǒng),支持分布式,易擴容,可伸縮。所述分布式存儲是指fastdfs存儲。主要包括存儲慢日志模塊。
(4)慢日志管理平臺
可選的,主要是用于在web頁面展示慢日志的詳細信息,方便查看mongodb數(shù)據(jù)庫存在的性能問題和及時進行調(diào)優(yōu)。包括展示慢日志模塊。
各子模塊實現(xiàn)如下:
(1)salt管理模塊
主要功能是在所有mongodb節(jié)點部署salt客戶端,salt管理端部署在單獨的一臺服務(wù)器上。
該模塊定期調(diào)用salt管理端接口,檢查所有的mongodb節(jié)點上的salt客戶端是否注冊到salt管理端,檢測方式如下:
#salt‐key‐l‐acc|grep‘mongodb節(jié)點主機名’
如果返回值為假,需要調(diào)用salt管理端接口,注冊所述salt客戶端,注冊方式如下:
#salt‐key–a–y‘mongodb節(jié)點主機名’
否則,不需要調(diào)用注冊所述salt客戶端。如果注冊失敗,那么發(fā)送通知給管理員處理。
如果需要注銷某個mongodb節(jié)點的所述salt客戶端,需要手動執(zhí)行如下指令:
#salt‐key–d‘mongodb節(jié)點主機名’
所有的mongodb節(jié)點對應(yīng)的salt客戶端全部注冊到salt管理端后,salt管理端就可以發(fā)送指令和文件給salt客戶端,完成特定的操作。
并且,在salt管理端,定期檢測salt客戶端是否通達,檢測方式如下:
#salt'mongodb節(jié)點主機名'cmd.run'exit'
如果返回值為真,說明該mongodb節(jié)點主機名所述salt客戶端可以通達;否則,需要發(fā)送通知給管理員,需要人工處理。
(2)元信息管理模塊
所述元信息包括mongodb節(jié)點主機名、mongodb節(jié)點ip、mongodb端口和mongodb慢日志文件名。
salt管理端定期調(diào)用元信息管理模塊,及時獲取最新的元信息。
首先,salt管理端獲取所有的mongodb節(jié)點主機名,獲取方式如下:
#salt‐key–l|grepmongodb節(jié)點主機名前綴
mongodb節(jié)點主機名前綴是mongodb節(jié)點主機名的前綴字符,基于此可以過濾得到所有的mongodb節(jié)點。
然后,針對每個mongodb節(jié)點,salt管理端通過發(fā)送指令給salt客戶端,獲取每個mongodb節(jié)點上所有的mongodb進程信息,命令如下:
#salt‘mongodb節(jié)點主機名’cmd.run‘ps–ef|egrepmongod|egrep–vgrep’
通過mongodb進程信息,可以解析得到mongodb配置文件名,通過所述mongodb配置文件名,可以獲取mongodb端口和mongodb慢日志文件名。
同時,根據(jù)mongodb節(jié)點主機名獲取到mongodb節(jié)點ip。
所述mongodb節(jié)點主機名、mongodb節(jié)點ip、mongodb端口和mongodb慢日志文件名保存在元信息表中。
存儲慢日志模塊執(zhí)行結(jié)束后,慢日志文件名和存儲路徑保存在慢日志元信息表中。
(3)慢日志管理模塊
需要傳入的參數(shù):mongodb節(jié)點主機名mongodb慢日志文件名
主要功能是定期切割慢日志文件和清理無用慢日志文件。
在salt管理端,采用定時任務(wù)形式,定期切割所有mongodb節(jié)點上的mongodb慢日志文件:
20***sh/tmp/incision_slowlog.sh
每天00:02:00執(zhí)行該定時任務(wù)。
incision_slowlog.sh主要邏輯如下:
for所有的mongodb節(jié)點主機名
do
salt‘mognodb節(jié)點主機名’cmd.run‘rsyncmongdb慢日志文件名歸檔mongodb慢日志文件&&echo>’mongdb慢日志文件名’
salt‘mongodb節(jié)點主機名’cmd.run‘rm–f3天譴的歸檔mongodb慢日志文件’done
說明:
歸檔mongodb慢日志文件是以日期為后綴的mongodb慢日志文件,如mongod.log.20170501,
每天00:02:00,切割所有mongodb節(jié)點的mongodb慢日志文件,然后刪除mongodb節(jié)點3天前的歸檔mongodb慢日志文件。
在salt管理端,定期運行如下定時任務(wù):
12***sh/tmp/del_old_md_slowlog.sh
所述定時任務(wù)包含腳本del_old_md_slowlog.sh,功能是每天02:01:00清理salt管理端本地3天之前的歸檔mongodb慢日志文件和慢日志解析文件。
(4)采集慢日志模塊
需要傳入如下兩個參數(shù):mongodb節(jié)點主機名、歸檔mongdb慢日志文件名。
慢日志管理模塊執(zhí)行結(jié)束后,salt管理端發(fā)送操作指令到mongodb節(jié)點上salt客戶端,采集mongodb節(jié)點上的歸檔mongodb慢日志文件。
所述操作指令如下:
salt"mongodb節(jié)點主機名"cp.push歸檔mongodb慢日志文件名
通過所述方式,歸檔mongodb慢日志文件傳輸?shù)絪alt管理端指定目錄。
(5)解析慢日志模塊
需要傳入的參數(shù):歸檔mongodb慢日志文件名
主要功能是分析歸檔mongodb慢日志文件內(nèi)容,得到慢日志統(tǒng)計信息,保存在相應(yīng)的慢日志解析文件。
salt管理端在調(diào)用采集慢日志模塊結(jié)束之后,所有的歸檔mongodb慢日志文件存放在salt管理端指定目錄中,此時,定時任務(wù)調(diào)用慢日志解析腳本(可以采用mtools工具或者自行編寫慢日志解析工具),解析每個歸檔mongodb慢日志文件,分別得到相應(yīng)的慢日志解析文件。
定時任務(wù)如下:
34***解析慢日志文件腳本
解析慢日志文件腳本就是解析mongodb慢日志文件的工具,每天04:03:00執(zhí)行該腳本,解析所有歸檔mongodb慢日志文件,得到對應(yīng)的慢日志解析文件。(6)存儲慢日志模塊
需要傳入的兩個參數(shù):歸檔mongodb慢日志文件名、歸檔mongodb慢日志解析文件名
在salt管理端,通過調(diào)用分布式存儲接口,上傳mongodb慢日志文件和mongodb慢日志解析文件到分布式存儲,然后返回mongodb慢日志文件和mongodb慢日志解析文件的存儲路徑,分別記為慢日志存儲路徑和慢日志解析文件存儲路徑。然后調(diào)用元信息管理模塊,把慢日志文件名,慢日志存儲路徑,慢日志解析文件和慢日志解析文件存儲路徑記錄到慢日志元信息表中。
(7)展示慢日志模塊
可選的,存儲慢日志模塊執(zhí)行結(jié)束后,慢日志管理平臺調(diào)用慢日志元信息表展示所述慢日志解析文件,便于直觀查看mongodb存在的性能問題,為性能調(diào)優(yōu)提供準確參考。