列式存储

理解 Victoria Logs 设计与实现

Victoria Logs 简单易上手,非常适合中小团队使用,同时也适用于成本敏感的场景。

官方建议:如果可以接受在单节点上垂直扩展来满足业务需求,那么就不必使用集群模式。

本文包含大量源码片段,若不关注细节,可只阅读 架构概览存储模型

架构概览 #

Victoria Logs 的集群架构如下:

Victoria Logs 架构图
Victoria Logs 架构图
  • 通过 vlagent 完成类似 Replica 的功能,将日志数据复制到多个 vlstorage 组件中,实现高可用和数据冗余。
  • 通过 vlinsert 执行日志数据的写入策略。
  • 通过 vlselect 来聚合多个 vlstorage 组件中的日志数据,实现查询功能。
  • 通过 vlstorage 可以无缝的实现扩展存储容量,而不用考虑数据迁移(rebalance)。

vlstorage 的缩容稍微复杂一些,这里提供一种方案:

  1. 先将需要缩容的 vlstorage 节点从 vlinsert 的 storageNode 列表中移除,vlselect 中保留;
  2. 利用 Victoria Logs 的数据保留功能,让数据随逐步过期,直到待删除节点上的数据全部过期;
  3. 最后将其从 vlselect 中移除,并释放 vlstorage 节点。

也可以参考 Partitions lifecycle,手动执行数据迁移。

vlagent #

vlagent 是 Victoria Logs 的代理组件(类似 OpenTelemetry 的 Agent),位置更靠近日志源,同时也是一层缓冲区,负责接收日志数据并将其发送到 vlinsert 组件。

它可以将数据写入到不同的 Victoria Logs 实例中,实现数据的多写(复制),是实现高可用的必要组件。

...

访问量 访客数