VictoriaMetrics 中文教程(10)集群版介绍

VictoriaMetrics 中文教程系列文章:
- VictoriaMetrics 中文教程(01)简介
- VictoriaMetrics 中文教程(02)安装
- VictoriaMetrics 中文教程(03)如何配置 Prometheus 使其把数据远程写入 VictoriaMetrics
- VictoriaMetrics 中文教程(04)对接 Grafana 同时介绍 vmui
- VictoriaMetrics 中文教程(05)对接各类监控数据采集器
- VictoriaMetrics 中文教程(06)容量规划
- VictoriaMetrics 中文教程(07)高可用(High availability)方案
- VictoriaMetrics 中文教程(08)VictoriaMetrics 的存储
- VictoriaMetrics 中文教程(09)VictoriaMetrics 18 条 Troubleshooting 建议和提示
集群版简介
VictoriaMetrics 集群版也是开源的,但是维护更复杂,毕竟组件更多。如果数据量低于每秒一百万个数据点,建议使用单节点版本,而不是集群版本。单节点版本可以完美地适应 CPU 核心数、RAM 和可用存储空间。与集群版本相比,单节点版本更易于配置和操作,因此在选择集群版本之前请三思。
突出的功能
- 支持单节点版本的所有功能。
- 性能和容量水平扩展。
- 支持时间序列数据的多个独立命名空间(又称多租户)。
- 支持复制 replication。
VictoriaMetrics 架构概览
VictoriaMetrics 集群由以下服务组成:
- vmstorage - 存储原始数据并返回给定标签过滤器在给定时间范围内的查询数据
- vminsert - 接受提取的数据并根据指标名称及其所有标签的一致性哈希将其分布在 vmstorage 节点之间
- vmselect - 通过从所有配置的 vmstorage 节点获取所需数据来执行查询
每个服务都可以独立扩展,并且可以在最合适的硬件上运行。vmstorage 节点彼此不了解,彼此不通信,也不共享任何数据。这是一个无共享架构。它提高了集群可用性,并简化了集群维护以及集群扩展。

请注意,尽管 vmselect 是无状态的,但仍需要一些磁盘空间(几 GB)用于临时缓存。有关更多详细信息,请参阅
-cacheDataPath命令行标志。
多租户
VictoriaMetrics 集群支持多个相互隔离的租户(又称命名空间)。租户通过 accountID 或 accountID:projectID 进行标识,这些标识放在写入和读取的请求 URL 中。有关 VictoriaMetrics 租户的一些事实:
- 每个 accountID 和 projectID 都由
[0 .. 2^32)范围内的任意 32 位整数标识。如果缺少 projectID,则自动将其分配为 0。预计有关租户的其他信息(例如身份验证令牌、租户名称、限制、会计等)将存储在单独的关系数据库中。此数据库必须由位于 VictoriaMetrics 集群前面的单独服务(例如 vmauth 或 vmgateway)管理。 - 当第一个数据点写入给定租户时,会自动创建租户。
- 所有租户的数据均匀分布在可用的 vmstorage 节点上。当不同租户的数据量和查询负载不同时,这可保证 vmstorage 节点之间的负载均匀。
- 数据库性能和资源使用情况与租户数量无关。它主要取决于所有租户中活跃时间序列的总数。如果某个时间序列在过去一小时内至少收到一个样本,或者在过去一小时内受到查询的影响,则该时间序列被视为活跃时间序列。
- 可以通过
http://<vmselect>:8481/admin/tenantsurl获取已注册租户列表。 - VictoriaMetrics 通过指标公开各个租户统计数据。
很多人知道,集群版本的读写地址是:
- 读:
http://{vmselect}:8481/select/0/<suffix>,比如http://{vmselect}:8481/select/0/prometheus/api/v1/query - 写:
http://{vminsert}:8480/insert/0/<suffix>,比如http://{vminsert}:8480/insert/0/prometheus/api/v1/write
这里的 0 是 accountID,<suffix> 是具体的路径。0 表示 accountID 为 0,projectID 也为 0,即默认租户。
集群版启动
最小集群必须包含以下节点:
- 具有
-retentionPeriod和-storageDataPath命令行参数的单个 vmstorage 节点 - 带有
-storageNode=<vmstorage_host>的单个 vminsert 节点 - 带有
-storageNode=<vmstorage_host>的单个 vmselect 节点
为了实现高可用性,建议为每个服务运行至少两个节点。在这种情况下,当单个节点暂时不可用时,集群将继续工作,其余节点可以处理增加的工作负载。当底层硬件发生故障、软件升级、迁移或其他维护任务期间,该节点可能会暂时不可用。
最好运行许多小型 vmstorage 节点而不是少数大型 vmstorage 节点,因为当某些 vmstorage 节点暂时不可用时,这可以减少剩余 vmstorage 节点上的工作负载增加。
必须在 vminsert 和 vmselect 节点前放置一个 http 负载均衡器,例如 vmauth 或 nginx。它必须根据 url 格式包含以下路由配置:
- 以
/insert开头的请求必须路由到 vminsert 节点上的端口 8480。 - 以
/select开头的请求必须路由到 vmselect 节点上的端口 8481。
可以通过在相应节点上设置 -httpListenAddr 来改变端口。
只读模式
当 -storageDataPath 指向的目录包含的可用空间少于 -storage.minFreeDiskSpaceBytes 时,vmstorage 节点会自动切换到只读模式。vminsert 节点停止向此类节点发送数据,并开始将数据重新路由到剩余的 vmstorage 节点。
当 vmstorage 进入只读模式时,它会将 http://vmstorage:8482/metrics 上的 vm_storage_is_read_only 指标设置为 1。当 vmstorage 未处于只读模式时,该指标设置为 0。
Replication 和数据安全
默认情况下,VictoriaMetrics 建议用户把 -storageDataPath 指向的高可用的底层存储(例如 Google 计算持久磁盘),从而保证数据的持久性。如果由于某种原因无法使用复制的持久持久磁盘,VictoriaMetrics 支持应用程序级复制。
可以通过将 -replicationFactor=N 命令行标志传递给 vminsert 来启用复制。这将指示 vminsert 在 N 个不同的 vmstorage 节点上存储每个摄取样本的 N 个副本。这保证了如果最多 N-1 个 vmstorage 节点不可用,所有存储的数据仍然可供查询。
将 -replicationFactor=N 命令行标志传递给 vmselect,指示它如果在查询期间少于 -replicationFactor 的 vmstorage 节点不可用,则不要将响应标记为部分。
集群必须包含至少 2*N-1 个 vmstorage 节点,其中 N 是复制因子,以便在 N-1 个存储节点不可用时维持新提取数据的给定复制因子。
VictoriaMetrics 以毫秒精度存储时间戳,因此在启用复制时必须将 -dedup.minScrapeInterval=1ms 命令行标志传递给 vmselect 节点,以便它们可以在查询期间对从不同 vmstorage 节点获得的重复样本进行去重。如果从配置相同的 vmagent 实例或 Prometheus 实例将重复数据推送到 VictoriaMetrics,则必须根据去重文档将 -dedup.minScrapeInterval 设置为 scrape 配置中的 scrape_interval。
请注意,复制无法避免灾难,因此建议定期进行备份。
请注意,复制会增加资源使用率(CPU、RAM、磁盘空间、网络带宽),最多可增加 -replicationFactor=N 倍,因为 vminsert 将传入数据的 N 份副本存储到不同的 vmstorage 节点,而 vmselect 需要在查询期间对从 vmstorage 节点获得的复制数据进行重复数据删除。因此,把复制交由 -storageDataPath 指向的底层复制持久存储(如 Google Compute Engine 持久磁盘)更具成本效益,这样可以防止数据丢失和数据损坏。它还提供一致的高性能,并且可以在不停机的情况下调整大小。基于 HDD 的持久磁盘应该足以满足大多数用例。建议在 Kubernetes 中使用持久的复制持久卷。
Deduplication
VictoriaMetrics 的集群版本以与单节点版本相同的方式支持数据重复数据删除。唯一的区别是,当同一时间序列的样本和样本重复最终位于不同的 vmstorage 节点上时,无法保证重复数据删除。这可能发生在以下情况下:
- 当添加/删除 vmstorage 节点时,时间序列的新样本将被重新路由到另一个 vmstorage 节点;
- 当 vmstorage 节点暂时不可用时(例如,在重新启动期间)。然后新的样本被重新路由到剩余的可用 vmstorage 节点;
- 当 vmstorage 节点没有足够的容量来处理传入的数据流时,vminsert 会将新样本重新路由到其他 vmstorage 节点。
建议为 vmselect 和 vmstorage 节点设置相同的 -dedup.minScrapeInterval 命令行标志值,以确保查询结果的一致性,即使存储层尚未完成重复数据删除。
总结
VictoriaMetrics 集群版相比单机版,更适合大规模的监控数据存储和查询。但是,集群版的维护和运维成本更高,需要更多的硬件资源。在选择集群版之前,请三思。VictoriaMetrics 支持 replication,挂掉部分节点不影响数据安全,不过,建议不要开启,而是交由云盘等底层存储来保证数据的持久性。如果没有条件使用云存储,再考虑开启 replication。
VictoriaMetrics 中文教程(10)集群版介绍的更多相关文章
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...
- 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
原文地址:http://www.cnblogs.com/baiboy/p/orc1.html 阅读目录 目录 集群概念介绍 什么是集群 为什么搭建数据库集群 数据库集群的分类 可扩展的分布式数据库架构 ...
- 转载:【Oracle 集群】RAC知识图文详细教程(一)--集群概念介绍
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- spring cloud系列教程第六篇-Eureka集群版
spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
Oracle 11G RAC集群安装(七) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总. ...
- 【转】【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
原文地址:http://www.cnblogs.com/baiboy/p/orc7.html 阅读目录 目录 集群安装 参考文献 相关文章 Oracle 11G RAC集群安装(七) 概述:写下本文档 ...
- Redis单机版以及集群版的安装搭建以及使用
1,redis单机版 1.1 安装redis n 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install g ...
- shiro的单机版 和 集群版
在我们的开发当中 我们一般权限都是个 比较繁琐 但又必不可少的 一部分 [不管我们的 数据库设计 还是我们采用何种技术 我们的权限库表 大多都是大同小异 业务逻辑也是如此] 在我们不使用任何框架 ...
- windows集群简单介绍
windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...
随机推荐
- Apache DolphinScheduler 支持使用 OceanBase 作为元数据库啦!
DolphinScheduler是一个开源的分布式任务调度系统,拥有分布式架构.多任务类型.可视化操作.分布式调度和高可用等特性,适用于大规模分布式任务调度的场景.目前DolphinScheduler ...
- 【牛客刷题】HJ10 字符个数统计
题目链接 简单的说这题就是字符串去重以后检查长度.如果用Java的话,可以遍历字符串,然后利用Set来进行去重,最后统计Set的size就可以了.但是如果是Go语言,则稍微麻烦点.基本思路就是用map ...
- 禅道项目管理系统权限绕过漏洞(QVD-2024-15263)
本文所涉及的任何技术.信息或工具,仅供学习和参考之用,请勿将文章内的相关技术用于非法目的,如有相关非法行为与文章作者无关.请遵守<中华人民共和国网络安全法>. 1. 概述 1.1 基本信息 ...
- 在DLL中封装模板类的问题
在Dll中封装类是用定义一个宏来区分导出标识的 #ifdef DLLCLASS_EXPORTS #define DLL_CLASS _declspec(dllexport) //Dll #else # ...
- C#读写图片文件到Access数据库中
今天学习了把图片文件读写到数据库中,我是用的Access数据库,SQL还没去测试,不过都差不多 数据库表的样式 练习嘛就随便弄了下,说明下图片转成的字符串要用备注类型才可以哦 如果用的Sql数据库的话 ...
- JAVA——instanceof运算符(问题待处理)
2024/07/12 1.问题 2.问题拆解 3.解决 1.问题 今天学了一个运算符--instanceof,概念很抽象,感觉暂时理解不了,什么实例对象.类.子类,看得迷迷糊糊的,先记录下来,有空做一 ...
- 【Mac + Appium + Java1.8(二)】之Android模拟器自动化测试脚本开发以及简易例子
直接上代码: import io.appium.java_client.AppiumDriver; import org.junit.After; import org.junit.Before; i ...
- 005.MinIO-DirectPV分布式多租户存储部署
MinIO部署准备 部署概述 本实验结合Kubernetes进行MinIO部署,实现MinIO于Kubernetes的融合. minio官方支持通过简单的快速部署,以便于进行基础测试: curl ht ...
- JS 希尔排序完全理解
希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 ...
- MVC @Html.TextBox 属性
MVC中设置文本框不可修改(@Html.TextBox) mvc前台: @Html.TextBox("id","name", new {@Readonly = ...