victoriametrics 支持基於模式,同時拆分出了三大組件,vminsert,vmselect,vmstorage
參考圖
從這張圖我們可以看到insert 以及select 都是無狀態的,只有vmstorage,對於insert 以及select 的擴展很簡單,主要是vmstorage
配置說明
官方實際上已經提供了一個簡單的基於docker-compose 以及k8s部署的集群(按照三大組件部署),同時文檔也有說明擴展的處理,以
下是一個簡單的說明
- 參考docker-compose 內容
參考:https://github.com/VictoriaMetrics/VictoriaMetrics/blob/cluster/deployment/docker
version: '3.5'
services:
prometheus:
container_name: prometheus
image: prom/prometheus:v2.17.2
depends_on:
- "vminsert"
- "vmselect"
ports:
- 9090:9090
volumes:
- promdata:/prometheus
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: always
grafana:
container_name: grafana
image: grafana/grafana:6.7.2
entrypoint: >
/bin/sh -c "
cd /var/lib/grafana &&
mkdir -p dashboards &&
sed 's/$${DS_PROMETHEUS}/Prometheus/g' vm.json > dashboards/vm.json &&
/run.sh"
depends_on:
- "prometheus"
ports:
- 3000:3000
restart: always
volumes:
- grafanadata:/var/lib/grafana
- ./provisioning/:/etc/grafana/provisioning/
- ./../../dashboards/victoriametrics.json:/var/lib/grafana/vm.json
vmstorage:
container_name: vmstorage
image: victoriametrics/vmstorage
ports:
- 8482
- 8400
- 8401
volumes:
- strgdata:/storage
command:
- '--storageDataPath=/storage'
restart: always
vminsert:
container_name: vminsert
image: victoriametrics/vminsert
depends_on:
- "vmstorage"
command:
- '--storageNode=vmstorage:8400'
ports:
- 8480
restart: always
vmselect:
container_name: vmselect
image: victoriametrics/vmselect
depends_on:
- "vmstorage"
command:
- '--storageNode=vmstorage:8401'
ports:
- 8481:8481
restart: always
volumes:
promdata: {}
strgdata: {}
grafanadata: {}
集群擴展說明
從上圖我們可以看出對於無狀態的部分我們可以基於lb提高負載能力(promxy以及trickster,nginx,haproxy 都是不錯的選擇)
- lb 配置:
請求以 /insert 路由到vminsert的8480
請求以 /select 路由到vmselect的8481
- 集群縮放:
* vminsert&&vmselect添加新節點即可
* vmstorage 添加:啟動新的vmstorage,平滑重啟vmselect注意需要添加-storageNode 參數,信息為:<new_vmstorage_host>:8401, 平滑重啟vminsert
注意需要添加-storageNode 參數,信息為:<new_vmstorage_host>:8400
核心:注意順序啟動新vmstorage,平滑重啟vmselect ,平滑重啟vminsert
集群可用性
- http lb 必須不能路由信息到不可用的vminsert&&vmselect節點(健康檢查機制可以解決)
- 集群必須至少存在一個vmstorage
vminsert 重路由請求從不可用vmstorage節點到健康節點
vmselect 持續處理請求服務到至少一個可用的vmstorage節點
集群更新以及重新配置
vminsert&&vmstorage&&vmselect可以通過平滑的更新變動
容量規划
vminsert:
- vminsert可以根據攝取率計算所有實例的建議vCPU內核總數vCPUs = ingestion_rate / 150K。
- 每個vminsert實例的建議vCPU核心數應等於vmstorage集群中的實例數。
- 每個vminsert實例的RAM量應為1GB或更多。RAM用作攝取率峰值的緩沖區。
- 有時-rpc.disableCompression,vminsert實例上的命令行標志可能以vminsert和之間更高的網絡帶寬使用為代價來增加攝取容量vmstorage。
vmstorage:
- vmstorage可以根據攝取率計算所有實例的建議vCPU內核總數vCPUs = ingestion_rate / 150K。
- vmstorage可以從活動時間序列數中計算所有實例的建議RAM總量:RAM = active_time_series * 1KB。如果時間序列在最后一個小時內至少收到一個數據點,或者在最后一個小時內已被查詢過,則該時間序列處於活動狀態。
- 所有vmstorage實例的建議存儲空間總量可以根據攝取率和保留率來計算:storage_space = ingestion_rate * retention_seconds。
vmselect:
- vmselect實例的推薦硬件在很大程度上取決於查詢的類型。少量時間序列上的輕量級查詢通常需要使用較少的vCPU內核和較少的RAM
- vmselect,而大量時間序列上的重量查詢(> 10K)通常需要使用較多的vCPU內核和大量的RAM。
災備處理
victoriametrics提供了一些數據備份的方法vmbackup&&vmrestore 都是一些工具
- 備份方法
* /snapshot/create 請求創建快照
* <-storageDataPath>/snapshots/<snapshot_name> 目錄文檔使用vmbackup進行歸檔
* /snapshot/delete?snapshot=<snapshot_name> 或者 /snapshot/delete_all 刪除快照清理部分空間
- 數據恢復
* 使用 kill -INT 停止vmstorage
* 使用vmrestore 恢復數據到-storageDataPath目錄
* 啟動vmstorage節點
說明
以上是對於victoriametrics 集群模式的一個簡單說明,實際使用還是有好多地方需要踩坑的,總的來說victoriametrics 是一個簡單但是高效的
prometheus 方案