本文原創(chuàng)作者鮑光亞,京東商城基礎(chǔ)平臺(tái)部軟件開發(fā)工程師,經(jīng)作者同意發(fā)表于本人博客,如需轉(zhuǎn)載需經(jīng)本人同意。
一、引言
隨著監(jiān)控量的迅速增長(zhǎng),zabbix管理員有一天會(huì)發(fā)現(xiàn)硬盤iops達(dá)到了數(shù)萬(wàn),接近硬盤io的極限,無(wú)力支持處理更多監(jiān)控?cái)?shù)據(jù)。本文提出一種橫向擴(kuò)展方案,以盡量小的改動(dòng),增加zabbix系統(tǒng)的數(shù)據(jù)io能力。
考慮到zabbix的數(shù)據(jù)庫(kù)io主要在于history表和trends表,這一方案是在不增加zabbix server數(shù)量的情況下,將history表和trends表的io分散到其他主機(jī)上。此方案的優(yōu)點(diǎn)是保持單個(gè)zabbix server,不需要考慮多server之間的協(xié)同一致。這一數(shù)據(jù)庫(kù)分離模式還可以兼容原有的集中模式。但是,由于io分散到多個(gè)主機(jī)上,當(dāng)需要讀寫數(shù)據(jù)時(shí),不得不訪問多個(gè)數(shù)據(jù)庫(kù)實(shí)例。同時(shí),代碼中涉及數(shù)據(jù)庫(kù)讀寫的部分,包括zabbix server和web api,都需要重寫,好在大部分可以參考已有的代碼。
本方案設(shè)計(jì)基于zabbix 3.0.10版本。本文只論及對(duì)zabbix server的改造方案,對(duì)web api的修改方案將另文討論,本文不涉及。
二、zabbix數(shù)據(jù)讀寫機(jī)制
由于configuration數(shù)據(jù)的io遠(yuǎn)小于history和trends數(shù)據(jù)io,本方案沒有涉及對(duì)configuration數(shù)據(jù)的改動(dòng)。
cache和vc_cache是zabbix源碼中的兩個(gè)變量名稱,前者用于存儲(chǔ)來(lái)自agent/proxy的原始數(shù)據(jù),后者存儲(chǔ)的則是從數(shù)據(jù)庫(kù)中加載的數(shù)據(jù)(當(dāng)數(shù)據(jù)已過(guò)期時(shí),新數(shù)據(jù)則會(huì)直接從前者復(fù)制到后者之中),用于進(jìn)行trigger計(jì)算等。
1.history和trends數(shù)據(jù)的寫入
poller和trapper兩類進(jìn)程(包括pinger)負(fù)責(zé)從agent和proxy接收history數(shù)據(jù),然后flush到cache中,同時(shí)更新cache中的trends數(shù)據(jù)。對(duì)cache的更新主要通過(guò)函數(shù) process_hist_data實(shí)現(xiàn)。
dbsyncer進(jìn)程則負(fù)責(zé)將cache中的數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)中的history表和trends表中。由于dbsyncer存在多個(gè)進(jìn)程,進(jìn)程之間通過(guò)鎖進(jìn)行協(xié)調(diào),避免沖突。cache數(shù)據(jù)入庫(kù)主要通過(guò)DCsync_history和DCsync_trends兩個(gè)函數(shù)實(shí)現(xiàn)。
三、具體方案及實(shí)現(xiàn)
在數(shù)據(jù)庫(kù)中,history表依照數(shù)據(jù)類型不同分為history、history_uint、history_str、history_text、history_log五個(gè)表,trends表則分為trends和trends_uint兩個(gè)表。遵循著分散io的思路,可以考慮兩種方案,第一種方案是按照類別將history和trends分散到兩個(gè)獨(dú)立的數(shù)據(jù)庫(kù)中,另外一種是按照類別以及數(shù)據(jù)類型的不同,將每一個(gè)表都獨(dú)立地存儲(chǔ)到單個(gè)數(shù)據(jù)庫(kù)中。下文主要按照第一種方案進(jìn)行論述。
四、數(shù)據(jù)一致性問題
分離模式存在的風(fēng)險(xiǎn)之一是數(shù)據(jù)一致性問題。在集中模式時(shí),zabbix通過(guò)互斥鎖來(lái)協(xié)調(diào)對(duì)緩存的訪問,保證緩存數(shù)據(jù)的一致性。寫數(shù)據(jù)庫(kù)時(shí)則通過(guò)transaction保證一致性。因?yàn)榫彺骀i機(jī)制的存在,數(shù)據(jù)庫(kù)的分離與否并不會(huì)影響緩存的一致性,問題只能存在于數(shù)據(jù)庫(kù)內(nèi)部。
如果采用按類別分離的方案,即history和trends數(shù)據(jù)分別存儲(chǔ)在兩個(gè)數(shù)據(jù)庫(kù)中,則需要考慮history、trends和其他表之間的一致性。如果采用按類別+數(shù)據(jù)類型分離的方案,則同時(shí)要考慮history各個(gè)表之間的數(shù)據(jù)一致性以及trends表之間的一致性。
通過(guò)分析源碼中的transaction邏輯,history/trends表的更新操作不需要與其他表保持一致性(在數(shù)據(jù)庫(kù)級(jí)別),在程序允許的情況下,雙方可以獨(dú)立寫數(shù)據(jù)庫(kù)。
五、進(jìn)一步的方案
遵循數(shù)據(jù)庫(kù)分離的思路,更激進(jìn)的方案是將history和trends數(shù)據(jù)中的每一個(gè)表都進(jìn)行拆分,以itemid或者clock為key按照一定的哈希算法,將數(shù)據(jù)分散存儲(chǔ)到更多的數(shù)據(jù)庫(kù)中。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:一種zabbixserver擴(kuò)容改造方案-創(chuàng)新互聯(lián)
本文路徑:http://chinadenli.net/article8/depdop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、網(wǎng)站收錄、Google、商城網(wǎng)站、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容