文章目录
- Multitenancy
- 集群部署
- 启动`vmstorage`服务
- 启动`vminsert`服务
- 启动 `vmselect`服务
- 配置使用
- 集群大小调整和可伸缩性
- grafana展示
- 参考资料
VictoriaMetrics是快速,经济高效且可扩展的时间序列数据库。它可以用作Prometheus的长期远程存储。
VictoriaMetrics集群包含以下服务:
vmstorage
-存储数据vminsert
-vmstorage
使用一致的哈希将摄取的数据代理为分片vmselect
-使用来自以下位置的数据执行传入查询vmstorage
Multitenancy
VictoriaMetrics集群支持多个隔离的租户(又名命名空间)。租户用accountID
或标识accountID:projectID
,将其放置在请求url中。
- 每个
accountID
和projectID
由范围内的任意32位整数标识[0 .. 2^32)
。如果projectID
缺少,则会自动分配给0
。预计有关租户的其他信息(例如身份验证令牌,租户名称,限制,记帐等)将存储在单独的关系数据库中。该数据库必须由位于VictoriaMetrics群集前面的单独服务。 - 将第一个数据点写入给定租户时,将自动创建租户。
- 所有租户的数据平均分布在可用
vmstorage
节点之间。vmstorage
当不同的租户具有不同的数据量和不同的查询负载时,这保证了节点之间的均匀负载。 - VictoriaMetrics不支持在单个请求中查询多个租户。
集群部署
集群采用两个节点部署,并且保证每个服务部署两个。
启动vmstorage
服务
./vmstorage-prod -memory.allowedPercent 60 -httpListenAddr :8482 -retentionPeriod 120 -search.maxTagKeys 100000 -search.maxTagValues 100000 -search.maxUniqueTimeseries 300000 -smallMergeConcurrency 1 -snapshotAuthKey helei123456 -storageDataPath /opt/data/vmstorage -vminsertAddr :8400 -vmselectAddr :8401
- -memory.allowedPercent:缓存占用内存百分比
- -httpListenAddr:vmstorage服务端口
- -retentionPeriod:保存时长,日为单位
- -search.maxTagKeys:查询返回tag key的最大数量
- -search.maxTagValues: 查询返回tag value的最大数量
- -search.maxUniqueTimeseries:每次搜索可以扫描最大唯一时间序列大最大数量
- -smallMergeConcurrency:使用cpu的核数
- -snapshotAuthKey:快照接口认证key
- -storageDataPath:数据存储路径
- -vminsertAddr:insert服务监听地址
- -vmselectAddr:select服务监听地址
启动vminsert
服务
./vminsert-prod -replicationFactor 2 -storageNode 10.30.9.52:8400 -memory.allowedPercent 10 -insert.maxQueueDuration 1m -maxConcurrentInserts 8 -maxInsertRequestSize 33554432 -maxLabelsPerTimeseries 30
- -replicationFactor:副本个数
- -storageNode:存储节点地址,可以使用逗号分隔指定多个地址或使用多个-storageNode参数指定
- -memory.allowedPercent:缓存占用内存百分比
- -insert.maxQueueDuration:插入请求在队列中等待的最大时间
- -maxConcurrentInserts:并发插入的最大数目
- -maxInsertRequestSize:单个Prometheus remote_write API请求的最大字节数
- -maxLabelsPerTimeseries:每个时间序列可接受的最大标签数
启动 vmselect
服务
./vmselect-prod -cacheDataPath /opt/app/vmselect-cache/ -dedup.minScrapeInterval=0 -httpListenAddr :8481 -memory.allowedPercent 10 -search.maxConcurrentRequests 4 -search.maxPointsPerTimeseries 30000 -search.maxQueryDuration 30s -search.maxQueryLen 16384 -search.maxQueueDuration 10s -selectNode 10.30.9.52:8481 -storageNode 10.30.9.52:8401
- -cacheDataPath:cache数据目录
- -dedup.minScrapeInterval:如果superflouos样本的位置比这个时间间隔更近,则从时间序列中删除它们。0表示禁用
- -httpListenAddr:http服务监听地址
- -memory.allowedPercent:缓存占用内存百分比
- -search.maxConcurrentRequests:并发
- -search.maxPointsPerTimeseries:从搜索中返回的每个timeseries的最大值
- -search.maxQueryDuration:搜索查询执行的最大持续时间
- -search.maxQueryLen:最大搜索查询长度
- -search.maxQueueDuration:搜索时请求等待执行的最大时间,达到maxConcurrentRequests时限制。
- -storageNode:存储节点地址
- -selectNode:select节点地址
配置使用
-
数据提取的网址:
http://<vminsert>:8480/insert/<accountID>/<suffix>
,其中:<accountID>
是一个任意的32位整数,用于标识数据摄取的名称空间(又名租户)。可以将其设置为accountID:projectID
,其中projectID
也是任意的32位整数。如果projectID
未设置,则等于0
。<suffix>
可能具有以下值:prometheus
和prometheus/api/v1/write
-用于使用[Prometheus远程写入API]插入数据influx/write
和influx/api/v2/write
-用于使用[Influx线路协议]插入数据。opentsdb/api/put
-用于接受[OpenTSDB HTTP / api / put请求]。默认情况下,此处理程序处于禁用状态。它通过-opentsdbHTTPListenAddr
命令行标志设置在不同的TCP地址上。有关详细信息,请参见[这些文档]。prometheus/api/v1/import
-用于导入通过api/v1/export
on 获得的数据vmselect
(请参见下文)。prometheus/api/v1/import/csv
-用于导入任意CSV数据。有关详细信息,请参见[这些文档]。prometheus/api/v1/import/prometheus
-用于以Prometheus展示格式导入数据。有关详细信息,请参见[这些文档]。
-
查询网址:
http://<vmselect>:8481/select/<accountID>/prometheus/<suffix>
,其中:<accountID>
是标识查询(又名租户)的任意数字标识数据名称空间<suffix>
可能具有以下值:api/v1/query
-执行[PromQL即时查询]。api/v1/query_range
-执行[PromQL范围查询]。api/v1/series
-执行[系列查询]。api/v1/labels
-返回[标签名称列表]。- `
api/v1/label/values
-<label_name>
根据[API]返回给定值。 federate
-返回[联合指标]。api/v1/export
-导出原始数据。有关详细信息,请参见[本文]。api/v1/status/tsdb
-用于时间序列统计。有关详细信息,请参见[这些文档]。api/v1/status/active_queries
-用于当前执行的活动查询。注意,每个vmselect
维护一个独立的活动查询列表,该列表在响应中返回。
-
删除时间序列的网址:
http://<vmselect>:8481/delete/<accountID>/prometheus/api/v1/admin/tsdb/delete_series?match[]=<timeseries_selector_for_delete>
。请注意,delete_series
仅在特殊情况下才应使用处理程序,例如删除意外摄取的错误时间序列。不应定期使用它,因为它会带来非零的开销。 -
vmstorage
节点在8482
端口上提供以下HTTP端点:/snapshot/create
-创建[即时快照],可用于后台备份。在/snapshots
文件夹中创建快照,其中<storageDataPath>/snapshots
是相应的命令行标志值。/snapshot/list
-列出可用的快照。/snapshot/delete?snapshot=
-删除给定的快照。/snapshot/delete_all
-删除所有快照。
可以在每个
vmstorage
节点上独立创建快照。无需在vmstorage
节点之间同步快照的创建。
集群大小调整和可伸缩性
群集性能和容量可通过添加新节点来扩展。
vminsert
并且vmselect
节点是无状态的,可以随时添加/删除。不要忘记在http负载均衡器上更新这些节点的列表。添加更多vminsert
节点可扩展数据摄取率。请参阅 有关摄取速率可伸缩性的[评论]。添加更多vmselect
节点可扩展选择查询速率。vmstorage
节点拥有提取的数据,因此无法删除它们而不会丢失数据。添加更多vmstorage
节点可扩展群集容量。
添加vmstorage
节点的步骤:
- 以与集群中现有节点
vmstorage
相同的方式启动新节点-retentionPeriod
。 vmselect
使用-storageNode
包含的新arg 逐步重新启动所有节点:8401
。vminsert
使用-storageNode
包含的新arg 逐步重新启动所有节点:8400
。
grafana展示
导入dashboard,dashboardID:11176
、10229
Insert:11040
Select:11039
Storage:11038
参考资料
性能分析对比:https://medium.com/@valyala/measuring-vertical-scalability-for-time-series-databases-in-google-cloud-92550d78d8ae
官网:https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/README.md#deduplication