victoriametrics集群可用性和集群组件运维
集群可用性
-
如果满足以下条件,VictoriaMetrics 集群将保持可用:
-
HTTP 负载均衡器必须停止将请求路由到不可用的vminsert节点vmselect(vmauth停止将请求路由到不可用的节点)。
-
vminsert集群中必须至少保留一个节点来处理数据提取工作负载。其余活动vminsert节点必须具有足够的计算能力(CPU、RAM、网络带宽)来处理当前的数据提取工作负载。如果其余活动vminsert节点没有足够的资源来处理数据提取工作负载,则数据提取期间可能会出现任意延迟。有关更多详细信息,请参阅容量规划和集群大小调整文档。
-
vmselect集群中必须至少保留一个节点来处理查询工作负载。其余活动vmselect节点必须具有足够的计算能力(CPU、RAM、网络带宽、磁盘 IO)来处理当前查询工作负载。如果其余活动vmselect节点没有足够的资源来处理查询工作负载,则查询处理期间可能会发生任意故障和延迟。有关更多详细信息,请参阅容量规划和集群大小调整文档。
-
vmstorage集群中必须至少保留一个节点,用于接受新提取的数据和处理传入的查询。其余活动vmstorage节点必须具有足够的计算能力(CPU、RAM、网络带宽、磁盘 IO、可用磁盘空间)来处理当前工作负载。如果其余活动节点vmstorage没有足够的资源来处理查询工作负载,则在数据提取和查询处理期间可能会发生任意故障和延迟。有关更多详细信息,请参阅容量规划和集群大小调整文档。
-
-
vmstorage当某些节点不可用时,集群按以下方式工作:
-
vminsert将新摄取的数据从不可用节点重新路由vmstorage到剩余的健康vmstorage节点。如果健康vmstorage节点有足够的 CPU、RAM、磁盘 IO 和网络带宽来处理增加的数据摄取工作负载,这可以保证新摄取的数据得到正确保存。 vminsert将额外的数据均匀分布在健康vmstorage节点之间,以便均匀分布这些节点上增加的负载。在重新路由期间,健康节点将经历更高的资源使用率和活动时间序列vmstorage的数量增加。
-
vmselect如果至少有一个vmstorage节点可用,则继续提供查询。它将响应标记为来自剩余健康 vmstorage节点的查询的部分响应,因为此类响应可能会丢失存储在暂时不可用的vmstorage节点上的历史数据。每个部分 JSON 响应都包含"isPartial": true选项。如果您更喜欢一致性而不是可用性,则使用命令行标志运行vmselect节点。在这种情况下,如果至少有一个节点不可用,则返回错误。另一个选项是将查询参数传递给节点的请求。-search.denyPartialResponsevmselectvmstoragedeny_partial_response=1vmselect
-
vmselect还接受-replicationFactor=N命令行标志。此标志指示vmselect如果查询期间不可用的节点少于-replicationFactorvmstorage 个,则返回完整响应,因为它假定剩余 vmstorage节点包含完整数据。
-
-
vmselect对于返回原始数据点的API 处理程序,不会提供部分响应,因为用户通常希望这些数据始终是完整的。以下处理程序返回原始样本:
- /api/v1/export*端点
- /api/v1/query当query包含系列选择器 以方括号中的某个持续时间结尾时。例如,/api/v1/query?query=up[1h]&time=2024-01-02T03:00:00Z
更新/重新配置集群节点
所有节点类型 - vminsert、vmselect和vmstorage都可以通过正常关闭进行更新。向相应进程发送SIGINT信号,等待其完成,然后使用新配置启动新版本。
-
1、无停机策略
- 1、重启vmstorage节点。
- 2、重启vminsert节点。
- 3、重启vmselect节点。
-
如果满足以下条件,此策略允许在不停机的情况下升级集群:
- 集群至少有一对节点(每种类型 、vminsert和 ),vmselect因此vmstorage当单个节点在重启期间暂时不可用时,它可以继续接受新数据并处理传入请求。有关详细信息,请参阅集群可用性文档。
- vminsert当任何类型的单个节点( 、vmselect或vmstorage)在重启期间暂时不可用时,集群具有足够的计算资源(CPU、RAM、网络带宽、磁盘 IO)来处理当前工作负载。
- 更新后的配置/升级后的二进制文件与集群中的其余组件兼容。请参阅CHANGELOG了解不同版本之间的兼容性说明。
-
如果至少一个条件不满足,则滚动重启可能会导致在配置更新/版本升级期间集群不可用。在这种情况下,建议采用以下策略。
-
2、最小停机时间策略
- 1、正常地并行停止所有vminsert和vmselect节点。
- 2、优雅地并行重启所有vmstorage节点。
- 3、并行启动所有vminsert和节点。vmselect
-
执行上述步骤时,集群无法进行数据提取和查询。通过在上述每个步骤中并行重启集群节点,可以最大限度地减少停机时间。与策略minimum downtime相比,该策略具有以下优势:no downtime
- 当先前的配置/版本与新的配置/版本不兼容时,它允许以最小的中断执行配置更新/版本升级。
- 当集群没有足够的计算资源(CPU、RAM、磁盘 IO、网络带宽)进行滚动升级时,它允许以最小的 中断执行配置更新/版本升级。
- 它允许最小化具有大量节点的集群的配置更新/版本升级的持续时间,对于具有大vmstorage节点的集群,这可能需要很长时间才能实现平滑重启。
提高重启期间的重新路由性能
vmstorage在滚动重启期间,节点的 CPU、RAM 和磁盘 IO 使用率可能会增加 ,因为当vmstorage集群中某些节点暂时不可用时,它们需要处理更高的负载。
-
可以使用以下方法来减少vmstorage滚动重启期间节点的资源使用:**
-
将-disableReroutingOnUnavailable命令行标志传递给vminsert节点,以便它们在vmstorage节点重新启动时暂停数据提取,而不是将提取的数据重新路由到其他可用节点。请注意,当某些节点长时间不可用时,该-disableReroutingOnUnavailable标志可能会导致vmstorage长时间暂停数据提取。
-
将更大的vmstoragevmstoragevminsert值传递给节点(从v1.95.0-storage.vminsertConnsShutdownDuration开始可用) 。在这种情况下,在正常关闭期间逐渐关闭连接的间隔会增加。这减少了重启期间数据提取的减速。
-
确保-storage.vminsertConnsShutdownDuration小于管理系统vmstorage (例如 Docker、Kubernetes、systemd 等)配置的正常关闭超时。否则系统可能会vmstorage在完成逐步关闭vminsert连接之前杀死节点。
-