如果看了官方介绍的话,VictoriaMetrics 对于集群的处理只有vmstorage 是有状态的,其他节点(vmselect,vminsert都是无状态的)
但是一些细节上的目前官方没有很清晰的说明,以下是一些简单的说明
vmselect 以及vminsert 的storagenode 配置
VictoriaMetrics 集群模式在设计的时候区分了写以及读(当然很大程度上和prometheus remote protocol 有关系)
默认:8400 为写入地址(即vminsert的网络存储连接端口),:8401 为读取地址(即vmselect的网络存储连接端口)
实际上这个文档都是有写到的,而且cli 的帮助也有提示
vmstorage 数据写入的处理
目前目前看到的是支持多存储,直接配置多个就可以了,实际上数据的写入是有规则的
大致的流程是基于一致性hash算法,同时当出现存储故障的时候也会尝试写入可用的存储,数据的存储是结合用户以及项目id还有label
基于xxhash 算法选择后端存储,整体的一个原则就是可以保证有可用后端存储的时候数据是可以写入的
vmstorage 数据读取的处理
这个如果按照包含故障的模式就稍有复杂了,因为可能存在存储不可能的时候的数据查询处理,但是vmselect简化了查询,获取查询发送到所有可用的vmstorage节点,然后合并去重,这样就简单好多了
参考资料
https://github.com/VictoriaMetrics/VictoriaMetrics/blob/cluster/app/vminsert/netstorage/insert_ctx.go#L169
https://github.com/VictoriaMetrics/VictoriaMetrics/blob/cluster/app/vmselect/README.md