Watcher Overload 标准差算法

https://blueprints.launchpad.net/watcher/+spec/watcher-overload-sd

问题描述

集群过载是一个复杂的问题,可以通过将虚拟机从一个节点迁移到另一个节点来解决。迁移的决策基于虚拟机的参数,例如 CPU 利用率或内存利用率。我们为 Watcher 提出了一种策略,用于监控集群中某些主机上的负载是否高于其他主机,并重新平衡主机之间的工作负载,以最小化集群中负载的标准差。

该策略的主要目的是选择最佳的 VM:dest_host 对,以最大程度地减少集群中的标准差。

此规范与蓝图相关:https://blueprints.launchpad.net/watcher/+spec/watcher-overload-sd

最初实现此算法的代码(不在 Watcher 的上下文中)发布于此处:https://github.com/joker946/nova/commits/drs

用例

作为 管理员,我希望通过使用工作负载稳定化 目标 触发 Watcher 优化,从而创建包含推荐操作列表的 行动计划,以减少 集群 的负载。可以使用 watcher 输入参数(例如阈值、权重、指标)来配置此策略。然后我批准建议的行动计划,其中包含一组 VM 实时迁移操作。

项目优先级

不相关,因为 Watcher 目前不在大型帐篷内。

提议的变更

新的工作负载稳定化策略允许确定集群中主机负载是否存在异常值,并通过将 VM 迁移到平均集群负载来响应它。输入:可以使用 Ceilometer 获取有关每个 VM 工作负载的信息。为此,使用过去 10 分钟的 CPU 和 RAM 利用率的平均值(可配置)。然后,可以通过加总每个节点上所有 VM 的工作负载来计算每个节点的超visor 工作负载。了解每个节点上的总 CPU 和 RAM 量允许对 CPU 和 RAM 负载进行归一化。之后,计算集群的 CPU 和 RAM 负载的平均值。所有这些信息使得能够计算 CPU 或 RAM 的标准差。在为 CPU 和 RAM 计算标准差后,该策略将 sd 值与 cpu_threshold 和 ram_threshold 进行比较(这些由 watcher 输入参数提供)。如果其中一个值大于阈值,该策略将运行集群稳定化过程,通过执行 VM 的实时迁移来减少集群负载。伪代码

load_for_node = {'compute1': {'cpu', 'ram'}, 'compute2': ...}
for all vm in node:
    load_for_vm = {'uuid', 'cpu_util', 'memory.resident', 'vcpus'}
    load_for_vm[cpu_util] = transform_vm_cpu_util_to_host_cpu_util()
    load_for_node += load_for_vm
load_for_cluster = normalize load_for_node

for all node in cluster:
    compute deviation for each node against load_for_cluster.
    Then choose the src vm and dest host.

transform_vm_cpu_util_to_host_cpu_util 函数的实现方式在集群稳定化过程段落中描述。

集群稳定化过程:对于每个活动 VM,我们通过重新计算源节点和目标节点的工作负载来模拟迁移到集群的另一个节点。以下代码显示了模拟的一般情况

new_hosts[src_hp_id][metric] -= vm_load[metric]
new_hosts[dst_hp_id][metric] += vm_load[metric]

与此同时,由于节点 vcpu 数量的可能差异,上述代码不适用于 cpu_util 指标。因此,我们将 VM CPU 利用率转换为整体主机 CPU 利用率。以下伪代码显示了正确的转换方式

\(cpu_{impact} = cpu_{util} * {vm_vcpus}/{host_vcpus}\)

之后,对节点的负载值进行归一化,并使用它们计算新的标准差。总标准差计算为加权算术平均值

\(\sum weight_{metric}*sd_{metric}\),其中

  • weight_metric 是指标的权重。权重的取值范围为 (0, 1)。每个指标的权重由 watcher 输入参数 设置。

  • sd_metric 是集群中指标的计算标准差。

从将 VM 移动到其他节点的所有选项中,我们选择使集群中的标准差最小化的选项。该选项被添加到迁移选项的映射中,然后按标准差升序排序。从结果列表中,我们迭代地取一个主机/vm 对并将其放入包含操作“MIGRATION”的解决方案中。我们将 CPU 和 RAM 的结果偏差与阈值进行比较。如果结果偏差小于阈值,则循环停止并将结果行动计划发送到 Watcher Applier。

备选方案

此方法的替代方案是使用 Watcher 中定义的不同的目标和相关策略。

数据模型影响

无预期。

REST API 影响

这不会影响 REST API。

安全影响

无预期。

通知影响

预计没有与执行特定策略相关的特定通知。(通知可能会由结果操作产生,但这些可能由 Watcher 的其他部分处理)。

其他最终用户影响

此功能不会对 API 或 python-watcherclient 产生任何特定影响。

性能影响

预计没有特定的性能影响。

其他部署者影响

预计没有特定的部署器影响。

开发人员影响

这不会影响正在 OpenStack 上工作的其他开发人员。

实现

负责人

主要负责人

Alexander Chadin <alexchadin>

其他贡献者

Alexander Stavitskiy <alexstav>

工作项

此任务可以被认为是原子的。它只需要开发和测试一个类。此策略的主要 WorkloadStabilization 类继承自 BaseStrategy 类。

依赖项

它依赖于 BP 优化阈值

测试

将提供几个单元测试来测试各种场景。

文档影响

需要向文档添加与这个新的目标和策略相关的新内容。

参考资料

没有参考资料。

历史

没有历史记录。