victoriametrics 集群架構


victoriametrics 支持基於模式,同時拆分出了三大組件,vminsert,vmselect,vmstorage

參考圖

 

 

從這張圖我們可以看到insert 以及select 都是無狀態的,只有vmstorage,對於insert 以及select 的擴展很簡單,主要是vmstorage

配置說明

官方實際上已經提供了一個簡單的基於docker-compose 以及k8s部署的集群(按照三大組件部署),同時文檔也有說明擴展的處理,以
下是一個簡單的說明

 
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 方案


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM