直接使用官方包進行安裝很簡單,查看官方說明便可。安裝以後使用才發現,開源的只支持單機版的,可是公司用不能這麼low吧,怎麼也要「高可用」一點,因而本身參考MySQL主從複製原理、半同步操做步驟及原理和餓了麼 Influxdb 實踐之路,作了InfluxDB主從系統。java
客戶端系統
客戶端系統拓撲圖 linux
這個系統主要是用來從kafka獲取數據源,通過處理以後存到InfluxDB中去,這裏參考了「餓了麼」那篇文章,可是我看過他們的源碼,基本上搞不懂,就根據文章的描述搞了一個簡陋版的東西吧,這裏涉及到kafka和influxdb-java,項目源代碼能夠看這裏。該項目啓動運行參考其中的README。git
InfluxDB主從同步系統
InfluxDB同步系統
github
主從同步架構,是簡陋版的MySQL主從同步。腳本讀取InfluxDB的增刪改操做日誌,使用腳本將記錄寫入從機中。通過測試,運行情況良好,只要主從機不掛,同步系統能夠健康運行。golang
同步腳本使用Python編寫,項目源代碼在這裏。該項目啓動運行參考其中的README。數據庫
爲何使用Python腳原本編寫主從同步代碼?json
主要是考慮到下降與數據庫的代碼耦合程度,InfluxDB源碼若是出現大規模的升級改動,同步腳本只需略做修改就能夠了。segmentfault
畢竟Python是世界上**的語言。?服務器
InfluxDB源碼修改
下載源碼架構
在github上下載InfluxDB源碼(這裏使用的是個人fork地址,已經修改好的源碼)。
修改源碼
因爲腳本須要讀取InfluxDB的增刪改操做日誌,須要對源碼中這一部分操做的日誌進行修改,方便腳本解析日誌。官方版的日誌不記錄寫入操做的數據值,因此須要咱們本身修改源碼中對應的記錄寫日誌的地方。
修改文件influxdb/services/httpd/handler.go
修改文件influxdb/services/httpd/handler.go其中兩處調用上面修改過的函數buildLogLine的地方
到此InfluxDB源碼修改完成。
爲何要在
func buildLogLine(l *responseLogger, r *http.Request, start time.Time, body string) string
方法上增長一個字段body,而body明明是從h *Handler
中獲取的,而函數buildLogLine
中明明是有r *http.Request
的?由於通過測試,在
func buildLogLine
中從r *http.Request
裏面實際上取不到body的值,我沒有深刻研究過這段代碼,確實不懂爲何會這樣。因此才從上層將body的值直接傳入這個方法中。
編譯源碼和運行
使用源碼構建時序數據庫主從同步系統。
系統要求
Linux 64位系統便可。
依賴環境
本系統使用InfluxDB v1.5.2,因此須要Go 1.9.2或者以上的版本。
InfluxDB使用Dep管理依賴包,須要安裝dep。
主從同步腳本使用Python 2.7開發。
須要從Github上拉取源碼,環境中須要安裝git。
安裝InfluxDB
新建目錄$YOUR_PATH/gocodez/src
、$YOUR_PATH/gocodez/src
,$YOUR_PATH
爲自定義目錄:
將×××解壓到目錄$YOUR_PATH/gocodez/src
中:
將目錄$YOUR_PATH/
設置爲GOPATH
:
進入目錄中:
若是正確安裝了dep,這使用這個命令安裝依賴:
安裝依賴時,若是遇到沒法鏈接到依賴所需的服務器,須要查看所缺依賴,手動將這些依賴×××到
$YOUR_PATH/src/
對應路徑下。所需依賴在Github上均有源碼能夠下載。若是安裝或使用dep不成功,能夠跳過此步,在下一步時根據錯誤提示,手動安裝所需依賴。
安裝依賴可使用依賴包,將依賴包的/src解壓到$YOUR_PATH/gocodez目錄下便可。
構建安裝二進制執行碼:
安裝完成後,二進制執行碼放在$YOUR_PATH/gocodez/bin/
中,啓動時序數據庫:
安裝主從同步腳本
新建目錄$YOUR_SCRIPT
,$YOUR_SCRIPT
爲自定義腳本目錄:
從Github中拉取腳本:
參考其中的README.md完成腳本配置和運行。