VictoriaMetrics 中文教程系列文章:

集群版简介

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/tenants url获取已注册租户列表。
  • 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)集群版介绍的更多相关文章

  1. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  2. 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    原文地址:http://www.cnblogs.com/baiboy/p/orc1.html 阅读目录 目录 集群概念介绍 什么是集群 为什么搭建数据库集群 数据库集群的分类 可扩展的分布式数据库架构 ...

  3. 转载:【Oracle 集群】RAC知识图文详细教程(一)--集群概念介绍

    文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...

  4. spring cloud系列教程第六篇-Eureka集群版

    spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...

  5. 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数

    超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...

  6. 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)

    Oracle 11G RAC集群安装(七) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总. ...

  7. 【转】【Oracle 集群】Oracle 11G RAC教程之集群安装(七)

    原文地址:http://www.cnblogs.com/baiboy/p/orc7.html 阅读目录 目录 集群安装 参考文献 相关文章 Oracle 11G RAC集群安装(七) 概述:写下本文档 ...

  8. Redis单机版以及集群版的安装搭建以及使用

    1,redis单机版 1.1   安装redis n  版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install g ...

  9. shiro的单机版 和 集群版

    在我们的开发当中  我们一般权限都是个 比较繁琐 但又必不可少的 一部分 [不管我们的 数据库设计  还是我们采用何种技术 我们的权限库表 大多都是大同小异  业务逻辑也是如此] 在我们不使用任何框架 ...

  10. windows集群简单介绍

    windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...

随机推荐

  1. 破局SAP实施难题、降低开发难度,定制化需求怎样快速上线?

    前言 SAP 是全球领先的业务流程管理软件供应商之一,其提供广泛的模块化解决方案和套件,所开发的软件解决方案面向各种规模的企业,帮助客户规划和设计业务流程.分析并高效设计整个价值链,以更好的了解和响应 ...

  2. IntelliJ IDEA 2024.2 发布:Spring Data JPA即时查询、自动补全cron表达式

    今早看到,IntelliJ IDEA 2024.2 发布的邮件提示,看了一眼这个版本更新的新特性真的太适合我了!也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下.下面就来一起看看这个 ...

  3. Linux统计文件目录下文件的数目命令

    Linux下有三个命令:ls.grep.wc.通过这三个命令的组合可以统计目录下文件及文件夹的个数. 1.ls -l | grep "^-" | wc -l:统计当前目录下文件的个 ...

  4. Linux下如何在程序中获取某个命令执行的结果?【附源码】

    在工作中遇到一个问题,就是想获取某个函数执行之后打印的字符串信息. 这个功能应用场景挺多的, 特地整理了一下相关知识点分享给大家. 1. 使用临时文件 1) 使用shell的重定向 将命令输出重定向到 ...

  5. 8. 从0学ARM-内联汇编、混合汇编、ATPCS规则

    一.gcc 内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编. 程序中使用饱和算术运算(Satu ...

  6. P4823 [TJOI2013] 拯救小矮人

    感觉这个题的操作很新奇,做个记录. P4823 [TJOI2013] 拯救小矮人 大概题面: 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决 定搭一个人梯.即:一个小矮人站在另一小矮人 ...

  7. .NET+WPF 桌面快速启动工具 GeekDesk

    前言 大家在平时工作中,是不是经常为了找某个文件或者应用而在电脑桌面上来回翻找?桌面图标乱七八糟,每次找东西都像在大海捞针一样. 今天给大家介绍一个开源项目 GeekDesk,它能够让桌面焕然一新,工 ...

  8. Mac 使用 Caps Lock 键切换输入法失灵问题解决

    Mac 上的 Caps Lock 键对于多语言用户来说,除了切换输入大小写的作用外还承担着切换输入法的功能.正常情况下,轻按一下 Caps Lock 键是切换输入法,长按是切换输入大小写.然而有时这个 ...

  9. 禁止 SSH 传递 locale 环境变量

    SSH 在连接远程机器时默认会传递一些环境变量,其中就包括你本机的 locale 变量.这会导致远程机器的 locale 配置变成和你本地主机一样.有时候我们不希望这种行为,我们可以通过修改 SSH ...

  10. Kubernetes-6:Pod生命周期介绍(init Container)

    Pod生命周期 生命周期 1.API server调用kubelet下达Pod创建指令 2.容器环境初始化 3.进入Pod生命周期内(Pod开始创建) 4.Pod只要创建,就会自动生成一个pause容 ...