本發(fā)明屬于計(jì)算機(jī)數(shù)據(jù)處理,尤其涉及一種influxdb高可用系統(tǒng)及其工作方法。
背景技術(shù):
1、本部分的陳述僅僅是提供了與本發(fā)明相關(guān)的背景技術(shù)信息,不必然構(gòu)成在先技術(shù)。
2、influxdb高可用指通過一系列技術(shù)和架構(gòu)設(shè)計(jì),確保influxdb數(shù)據(jù)庫系統(tǒng)在面臨各種故障和異常情況時(shí),仍能持續(xù)、穩(wěn)定地提供服務(wù),保證數(shù)據(jù)的可用性和系統(tǒng)的可靠性;influxdb即時(shí)序數(shù)據(jù)庫本身不支持集群,當(dāng)前存在兩種influxdb高可用方案,一種是官方提供的高可用方案influxdb-relay的fork版本,另一種是influxdb-relay的改進(jìn)版本influx-proxy。
3、fork版本的influxdb-relay方案,對(duì)外是一個(gè)httpserver,其收到寫請(qǐng)求后能夠支持通過http或者udp方式向influxdb寫入數(shù)據(jù),并且也可以支持prometheus的遠(yuǎn)程寫入(http),但是influxdb-relay并不支持influxdb的查詢接口,也不支持prometheus的遠(yuǎn)程讀;當(dāng)數(shù)據(jù)寫入的請(qǐng)求到達(dá)influxdb-relay這一層,influxdb-relay會(huì)對(duì)自己配置的后端的influxdb發(fā)起寫請(qǐng)求,但是,其并沒有能夠解決數(shù)據(jù)一致性的問題,如果寫入influxdb時(shí)失敗,則只會(huì)簡(jiǎn)單的返回一個(gè)錯(cuò)誤信息,寫入失敗的數(shù)據(jù)則在influxdb中丟失了;
4、其次,influxdb-proxy方案,其主要用于代理和轉(zhuǎn)發(fā)請(qǐng)求,其充當(dāng)客戶端和一個(gè)或多個(gè)influxdb實(shí)例之間的中間層,能夠?qū)崟r(shí)處理請(qǐng)求的轉(zhuǎn)發(fā),其對(duì)上層客戶端是透明的,上層應(yīng)用可以像使用單機(jī)的influxdb?一樣使用,proxy方案一次寫入請(qǐng)求對(duì)應(yīng)的是一個(gè)后端數(shù)據(jù)庫,導(dǎo)致其受限于一個(gè)數(shù)據(jù)庫;另外,influxdb-proxy需要額外配置keymaps,在influxdb?-?proxy?中主要用于將傳入的請(qǐng)求與后端的influxdb?服務(wù)進(jìn)行正確的映射和適配,keymaps本質(zhì)上是一種配置機(jī)制,用于處理不同客戶端請(qǐng)求和后端數(shù)據(jù)庫之間可能存在的差異,寫入請(qǐng)求隨機(jī)路由至后端數(shù)據(jù)庫,導(dǎo)致不同數(shù)據(jù)庫后端數(shù)據(jù)存儲(chǔ)不一致,并且每次寫入都是隨機(jī)路由,無法控制寫入數(shù)據(jù)量在每個(gè)節(jié)點(diǎn)都是一樣,導(dǎo)致數(shù)據(jù)負(fù)載不均衡。
5、綜上所述,現(xiàn)有方案中缺少成熟的influxdb高可用方案,現(xiàn)有方案不支持查詢接口,且無法保證數(shù)據(jù)一致性,無法快速備份數(shù)據(jù)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例提供了一種influxdb高可用系統(tǒng)及其工作方法,以解決傳統(tǒng)方案不支持查詢接口,且無法保證數(shù)據(jù)一致性,無法快速備份數(shù)據(jù)的問題。
2、根據(jù)本發(fā)明實(shí)施例提供的第一個(gè)方面,提供了一種influxdb高可用系統(tǒng),包括:
3、客戶端,其用于基于用戶需求生成數(shù)據(jù)查詢或?qū)懻?qǐng)求,并下發(fā)至influxdb節(jié)點(diǎn);
4、influxdb節(jié)點(diǎn),包括中間層和influxdb,其中:
5、中間層,包括服務(wù)接口組件、文件存儲(chǔ)組件、文件同步組件以及存儲(chǔ)節(jié)點(diǎn)組件,所述中間層用于對(duì)于接收的數(shù)據(jù)查詢請(qǐng)求,通過服務(wù)接口組件將數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)至存儲(chǔ)節(jié)點(diǎn)組件,通過所述存儲(chǔ)節(jié)點(diǎn)組件將當(dāng)前查詢請(qǐng)求封裝為influxdb的查詢接口支持的查詢請(qǐng)求,進(jìn)行influxdb的數(shù)據(jù)查詢,并返回查詢結(jié)果至客戶端;對(duì)于接收的數(shù)據(jù)寫請(qǐng)求,通過服務(wù)接口組件將待寫入數(shù)據(jù)轉(zhuǎn)發(fā)至文件存儲(chǔ)組件進(jìn)行本地文件的數(shù)據(jù)寫入,同時(shí),通過存儲(chǔ)節(jié)點(diǎn)組件將待寫入數(shù)據(jù)寫入influxdb,并返回寫入狀態(tài);
6、influxdb,其用于數(shù)據(jù)的存儲(chǔ);
7、其中,所述influxdb節(jié)點(diǎn)采用成對(duì)設(shè)置,且每對(duì)influxdb節(jié)點(diǎn)互為主備,當(dāng)存在數(shù)據(jù)寫入時(shí),通過文件同步組件進(jìn)行主備節(jié)點(diǎn)的數(shù)據(jù)同步。
8、進(jìn)一步的,所述基于用戶需求生成數(shù)據(jù)查詢或?qū)懻?qǐng)求,其中,數(shù)據(jù)查詢請(qǐng)求或?qū)懻?qǐng)求中均采用統(tǒng)一的目的地址進(jìn)行數(shù)據(jù)的查詢或?qū)懭耄ㄟ^keepalive工具進(jìn)行主備節(jié)點(diǎn)的運(yùn)行狀況監(jiān)測(cè),自動(dòng)進(jìn)行地址的虛擬ip切換至能夠正常工作的influxdb節(jié)點(diǎn)。
9、進(jìn)一步的,所述服務(wù)接口組件,包括數(shù)據(jù)查詢接口、ping接口、數(shù)據(jù)寫入接口和狀態(tài)通知接口,所述服務(wù)接口組件具體執(zhí)行如下處理過程:通過keepalive工具中的虛擬ip路由選擇服務(wù)調(diào)用ping接口,確定當(dāng)前influxdb節(jié)點(diǎn)是否運(yùn)行正常,若運(yùn)行正常,則選擇當(dāng)前influxdb節(jié)點(diǎn)執(zhí)行數(shù)據(jù)查詢或?qū)懭?,若運(yùn)行異常,則選擇當(dāng)前influxdb節(jié)點(diǎn)的備用節(jié)點(diǎn)進(jìn)行數(shù)據(jù)查詢或?qū)懭?;在?shù)據(jù)查詢時(shí),通過調(diào)用數(shù)據(jù)查詢接口,通過數(shù)據(jù)查詢接口將數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)至存儲(chǔ)節(jié)點(diǎn)組件,并將存儲(chǔ)節(jié)點(diǎn)組件獲得的查詢結(jié)果返回至客戶端;在數(shù)據(jù)寫入時(shí),通過數(shù)據(jù)寫入接口將待寫入的數(shù)據(jù)轉(zhuǎn)發(fā)至文件存儲(chǔ)組件執(zhí)行本地文件寫入以及寫入存儲(chǔ)節(jié)點(diǎn)組件的寫入通道。
10、進(jìn)一步的,所述文件存儲(chǔ)組件,具體執(zhí)行如下處理過程:收到新寫入的數(shù)據(jù)時(shí)查詢完成最新同步時(shí)的偏移地址,以所述偏移地址作數(shù)據(jù)的寫入位置,進(jìn)行本地文件的寫入。
11、進(jìn)一步的,所述文件同步組件,具體執(zhí)行如下處理過程:自動(dòng)讀取當(dāng)前節(jié)點(diǎn)本地文件,并根據(jù)本地緩存的完成最新同步時(shí)的偏移地址,讀入文件數(shù)據(jù);在當(dāng)前節(jié)點(diǎn)及其對(duì)應(yīng)備節(jié)點(diǎn)之間建立tcp連接,基于tcp傳輸實(shí)現(xiàn)兩節(jié)點(diǎn)本地文件的同步。
12、進(jìn)一步的,服務(wù)初始化后,若某一influxdb節(jié)點(diǎn)被選定為master節(jié)點(diǎn)時(shí),所述文件同步組件,具體執(zhí)行如下處理過程:自動(dòng)讀取master節(jié)點(diǎn)本地的文件,根據(jù)本地緩存的同步offset,讀入文件數(shù)據(jù),跟另外一個(gè)influxdb節(jié)點(diǎn)建立tcp連接,將文件進(jìn)行同步;
13、若某一influxdb節(jié)點(diǎn)被選定為slave節(jié)點(diǎn),所述文件同步組件,具體執(zhí)行如下處理過程:創(chuàng)建一個(gè)tcp客戶端,將tcp客戶端與另一個(gè)influxdb節(jié)點(diǎn)建立連接,當(dāng)監(jiān)聽到對(duì)方有數(shù)據(jù)同步時(shí),接收數(shù)據(jù)并寫入到本地文件。
14、進(jìn)一步的,所述存儲(chǔ)節(jié)點(diǎn)組件,具體執(zhí)行如下處理過程:當(dāng)接收到數(shù)據(jù)查詢請(qǐng)求時(shí),將該請(qǐng)求封裝為influxdb的查詢接口支持的查詢請(qǐng)求,進(jìn)行influxdb的查詢,并將返回的數(shù)據(jù)進(jìn)行封裝返回;當(dāng)接收到數(shù)據(jù)寫入請(qǐng)求時(shí),將數(shù)據(jù)寫入請(qǐng)求進(jìn)行解析,按influxdbsql語法組裝成為對(duì)應(yīng)的sql語句,基于sql語句數(shù)據(jù)寫入influxdb,并將寫入狀態(tài)進(jìn)行返回。
15、根據(jù)本發(fā)明實(shí)施例提供的第二個(gè)方面,提供了一種influxdb高可用系統(tǒng)的工作方法,其基于上述的一種influxdb高可用系統(tǒng),包括:
16、基于客戶端下發(fā)的數(shù)據(jù)查詢或?qū)懻?qǐng)求中的目的地址,選擇能夠正常執(zhí)行當(dāng)前請(qǐng)求的influxdb節(jié)點(diǎn);
17、在選擇的influxdb節(jié)點(diǎn)中,對(duì)于數(shù)據(jù)查詢請(qǐng)求,通過服務(wù)接口組件將數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)至存儲(chǔ)節(jié)點(diǎn)組件,通過所述存儲(chǔ)節(jié)點(diǎn)組件將當(dāng)前查詢請(qǐng)求封裝為influxdb的查詢接口支持的查詢請(qǐng)求,進(jìn)行influxdb的數(shù)據(jù)查詢,并返回查詢結(jié)果至客戶端;對(duì)于數(shù)據(jù)寫請(qǐng)求,通過服務(wù)接口組件將待寫入數(shù)據(jù)轉(zhuǎn)發(fā)至文件存儲(chǔ)組件進(jìn)行本地文件的數(shù)據(jù)寫入,同時(shí),通過存儲(chǔ)節(jié)點(diǎn)組件將待寫入數(shù)據(jù)寫入influxdb,并返回寫入狀態(tài);其中,當(dāng)存在數(shù)據(jù)寫入時(shí),通過文件同步組件進(jìn)行主備節(jié)點(diǎn)的數(shù)據(jù)同步。
18、進(jìn)一步的,數(shù)據(jù)查詢請(qǐng)求或?qū)懻?qǐng)求中均采用統(tǒng)一的目的地址進(jìn)行數(shù)據(jù)的查詢或?qū)懭?,通過keepalive工具進(jìn)行主備節(jié)點(diǎn)的運(yùn)行狀況監(jiān)測(cè),自動(dòng)進(jìn)行地址的虛擬ip切換至能夠正常工作的influxdb節(jié)點(diǎn)。
19、進(jìn)一步的,當(dāng)數(shù)據(jù)寫請(qǐng)求選擇某一influxdb節(jié)點(diǎn)時(shí),自動(dòng)讀取當(dāng)前節(jié)點(diǎn)本地文件,并根據(jù)本地緩存的完成最新同步時(shí)的偏移地址,讀入文件數(shù)據(jù);在當(dāng)前節(jié)點(diǎn)及其對(duì)應(yīng)備節(jié)點(diǎn)之間建立tcp連接,基于tcp傳輸實(shí)現(xiàn)兩節(jié)點(diǎn)本地文件的同步。
20、以上一個(gè)或多個(gè)技術(shù)方案存在以下有益效果:
21、本發(fā)明提供了一種influxdb高可用系統(tǒng)及其工作方法,包括客戶端和influxdb節(jié)點(diǎn),influxdb節(jié)點(diǎn)中,中間層用于對(duì)于接收的數(shù)據(jù)查詢請(qǐng)求,通過服務(wù)接口組件將數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)至存儲(chǔ)節(jié)點(diǎn)組件,通過存儲(chǔ)節(jié)點(diǎn)組件將當(dāng)前查詢請(qǐng)求封裝為influxdb的查詢接口支持的查詢請(qǐng)求,進(jìn)行influxdb的數(shù)據(jù)查詢,并返回查詢結(jié)果至客戶端;對(duì)于接收的數(shù)據(jù)寫請(qǐng)求,通過服務(wù)接口組件將待寫入數(shù)據(jù)轉(zhuǎn)發(fā)至文件存儲(chǔ)組件進(jìn)行本地文件的數(shù)據(jù)寫入,同時(shí),通過存儲(chǔ)節(jié)點(diǎn)組件將待寫入數(shù)據(jù)寫入influxdb,并返回寫入狀態(tài),通過統(tǒng)一的數(shù)據(jù)讀寫接口,提供單一的入口點(diǎn),簡(jiǎn)化用戶操作,無需關(guān)心后端節(jié)點(diǎn)狀態(tài),對(duì)外的數(shù)據(jù)庫讀、寫接口是固定的;同時(shí),influxdb節(jié)點(diǎn)采用成對(duì)設(shè)置,且每對(duì)influxdb節(jié)點(diǎn)互為主備,當(dāng)存在數(shù)據(jù)寫入時(shí),通過文件同步組件進(jìn)行主備節(jié)點(diǎn)的數(shù)據(jù)同步,方案采用雙機(jī)自動(dòng)復(fù)制,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)復(fù)制,確保數(shù)據(jù)的冗余備份,并通過本地文件同步機(jī)制,即使在節(jié)點(diǎn)故障情況下也能保證數(shù)據(jù)不丟失。
22、本發(fā)明附加方面的優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。