influxDB叢集模式實踐
influxDB資料庫以其優秀的時序資料儲存和查詢能力,在處理和分析類似資源監控等時序資料方面得到了廣泛的應用。而influxDB自帶的各種特殊函式如求平均值、標準差、隨機取資料,使資料分析變得十分方便。本文作者基於360內部對產生的大量時序資料的儲存為背景需求,設計了效能優異的influxDB叢集,下來就跟隨作者一探究竟吧。
1
基礎概念
TSDB與傳統DB比較
傳統資料庫多用於記錄資料的當前值。
時序資料庫記錄基於時間的一系列資料。
TSDB應用場景
由時序產生,並且需要展現其歷史趨勢、週期規律、異常性的,進一步對未來做出預測分析的,都是時序資料庫適合的場景。具體場景:各類裝置的監控資料,醫學中的血糖、血壓、心率的監控資料,金融業中交易、成交資料等。
為什麼選擇influxdb
開發者社群活躍,使用者眾多,開源時間較長。效能經過檢驗;
類SQL的插入、查詢語言,不會增加太大的學習成本;
原生HTTP介面支援各類語言呼叫;
僅僅作為儲存方案,可插拔。
influxdb之TSM儲存引擎概述
TSM 儲存引擎主要由幾個部分組成:
cache。在記憶體中是一個簡單的 map 結構預設配置檔案中為1g。
wal。記錄內容和cache一樣,目的是為了持久化cache資料,influxdb啟動時會載入wal的資料到記憶體。
tsm file。用於資料儲存。
compactor。主要進行兩類操作:
cache->snapshot->tsm;
合併小tsm成為大的 tsm。
Shard——TSM儲存引擎之上的概念
按時間戳所在不同範圍建立不同Shard;
根據時間可以快速定位要查詢的資料資源,加快查詢的過程;
讓根據時間的批次刪除操作變得非常簡單且高效。
2
專案由來
influxdb社群版預設並未提供叢集解決方案。
官方開源的influxdb-relay僅僅支援雙寫功能,並未支援負載均衡能力。
餓了麼開源的influx-proxy叢集方案元件眾多,安裝部署、後期維護成本高、複雜度大。
360公司內部需求:提供十萬臺主機的兩百個監控項資料的實時出圖、訪問,基於這些監控項的告警以及故障預測。
基於上述需求,於是有了influxDB-HA專案。
3
程式架構
官方開源influxdb-relay方案
未解決的問題:
採用雙寫僅僅解決了資料備份的問題,並未解決influxdb讀寫效能的問題;
只是寫入了資料,查詢還是需要去讀influxdb。增加了配置檔案的複雜度不易維護;
並未對寫入失敗的資料做任何重試機制的處理。
餓了麼influxdb高可用解決方案
優勢:
influx-proxy是餓了麼在influxdb-relay滿足不了其效能要求、配置維護要求痛定思痛後重構的產物;
influxdb機器支援動態擴縮;
增加了強大的請求失敗後的重試機制。
劣勢:
架構中使用的元件較多,增加了使用者的學習成本,且不易於後期的維護;
請求失敗重試本身是雙刃劍,試想機器效能達到極限,重試無形中又增加了機器的負載;
與自身場景需求不相符,我們內部只是做監控資料的持久化儲存,應該是最簡單的接入和與influxdb最小的架構改造。
360內部influxDB-HA解決方案
優勢:
以measurement為最小拆分單元,從而保證以時序查詢influxdb的高效性。
支援業務層動態的拆庫、拆表操作。
4
效能比較
與單機influxdb 磁碟IO對比。
與單機influxdb CPU使用對比。
5
業務方接入influxDB-HA說明
influxDB-HA管理influxdb例項配置。
Grafana接入influxDB-HA說明。
三方程式接入influxDB-HA寫入資料說明。
完全相容influxdb原生的/write介面方式寫入,且支援原生查詢介面的所有引數;
如果您說您以前習慣了使用influxdb的SDK方式寫入,那也恭喜您。influxDB-HA支援任何語言的influxdb SDK接入。
6
後期迭代計劃
一個優秀的專案需要經歷無數的版本迭代和最佳化,而對於開發者而言,能相容各類需求、適應各類場景是沉澱、提升技術的不二法門。鑑於此,我們應該不斷完善influxDB-HA以支援360內部各類使用場景。接來下,僅提出未來可見的最佳化點:
接入kafka、RabbitMQ做寫入請求之前的緩衝,降低資料丟失的風險;
influxDB-HA配置檔案的熱載入(目前已經透過golang的fsnotify庫實現,將來更大規模的influxDB-HA叢集應該透過etcd等外部的配置統一管理來實現);
對接業務方分表,以支援更大資料規模場景下的解決方案,measurement始終作為influxDB-HA叢集中可拆分的最小單元,避免不同measurement的合併排序問題。
7
influxdb使用注意事項
經過一段時間(近一個多月)的實踐和對influxdb效能的綜合觀察,總結出以下結論供我們大家一起探討:
1、continuous queries/select:
筆者看見很多對於influxdb的不滿來自於對其效能的詬病。然而有目共睹的是其寫入效能是極其優秀的,那究竟查詢效能如何呢?
實踐總結:對於超過10萬樣本資料的查詢操作而言,我們透過索引(即influxdb中的tag)查詢將能夠節省機器效能,大大降低查詢時間。查詢操作往往耗當機器的根本原因是:OOM(Out Of Memory)
那麼在配置CQ時,應該:
儘可能使用tag;
應該拿寫好的CQ充分模擬線上環境的測試,證明效能沒問題後再上線。
2、retention policy:
配置資料的留存策略好處是資料持久化,但資料量較大時劣勢也非常明顯,會佔用很大的CPU,造成讀寫資料異常。所以配置RP時我們必須注意:
儘量在讀寫併發量較小的時刻去操作;
可以在influxdb slave庫中反覆設定RP實踐出最佳方式再上線。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555491/viewspace-2666921/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Boot(十三):整合Redis哨兵,叢集模式實踐Spring BootRedis模式
- Docker Swarm 叢集搭建實踐DockerSwarm
- RabbitMQ叢集運維實踐MQ運維
- Redis叢集環境搭建實踐Redis
- TKE 叢集組建最佳實踐
- nebula-br local-store 模式,快速搭建主備叢集實踐模式
- redis偽叢集配置Cluster叢集模式Redis模式
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- 滴滴 Elasticsearch 多叢集架構實踐Elasticsearch架構
- Redis叢集技術及Codis實踐Redis
- Redis叢集slot遷移改造實踐Redis
- 京東雲Kubernetes叢集最佳實踐
- 容器雲平臺物理叢集配置實踐
- Proxmox VE 超融合叢集實踐真傳
- 騰訊大規模Hadoop叢集實踐Hadoop
- Kubernetes 叢集無損升級實踐
- Kubernetes叢集健康檢查最佳實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- hadoop叢集搭建及程式設計實踐Hadoop程式設計
- 美團點評Kubernetes叢集管理實踐
- Redis大叢集擴容效能優化實踐Redis優化
- 【Docker】Docker三劍客實踐之部署叢集Docker
- rocketMq叢集master模式搭建MQAST模式
- CarbonData叢集模式體驗模式
- Redis三種叢集模式Redis模式
- zookeeper偽叢集模式搭建模式
- Redis Cluster叢集模式部署Redis模式
- 阿里超大規模 Flink 叢集運維實踐阿里運維
- 美團叢集排程系統的雲原生實踐
- Redis大叢集擴容效能最佳化實踐Redis
- 5分鐘實現用docker搭建Redis叢集模式和哨兵模式DockerRedis模式
- Redis安裝之叢集-哨兵模式(sentinel)模式Redis模式
- 大資料專案實踐(一)——之HDFS叢集配置大資料
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- 容器雲多叢集環境下如何實踐 DevOpsdev
- vivo 容器叢集監控系統架構與實踐架構
- 騰訊雲Elasticsearch叢集規劃及效能優化實踐Elasticsearch優化
- 微博紅包:大規模Docker叢集實踐經驗分享Docker