Openstack 中的负载均衡

在大型云系统中,自动平衡计算资源负载的问题尤其严重。 Tionix(云服务开发商和运营商,Rostelecom 公司集团的一部分)也解决了这个问题。

而且,由于我们的主要开发平台是Openstack,而我们和所有人一样都很懒,所以决定选择一些已经包含在平台中的现成模块。 我们选择了 Watcher,我们决定使用它来满足我们的需求。
Openstack 中的负载均衡
首先,让我们看一下术语和定义。

术语和定义

目标 是必须实现的人类可读、可观察和可测量的最终结果。 有一个或多个策略来实现每个目标。 策略是能够为给定目标找到解决方案的算法的实现。

行动 是一个基本任务,改变OpenStack集群的目标托管资源的当前状态,例如:迁移虚拟机(migration)、改变节点的电源状态(change_node_power_state)、改变nova服务的状态(change_nova_service_state) )、更改风格(调整大小)、注册 NOP 消息(nop)、在一定时间长度内缺乏操作 - 暂停(睡眠)、磁盘传输(volume_migrate)。

行动计划 - 为了实现特定目标而按一定顺序执行的特定行动流程。 该行动计划还包含通过一组绩效指标衡量的全球绩效。 Watcher 在成功审核后生成行动计划,其结果是所使用的策略找到了实现目标的解决方案。 行动计划由一系列连续行动组成。

审计 是优化集群的请求。 执行优化是为了在给定集群中实现一个目标。 对于每次成功的审核,Watcher 都会生成一份行动计划。

审核范围 是执行审计的一组资源(可用区、节点聚合器、单个计算节点或存储节点等)。 每个模板中都定义了审核范围。 如果不指定审计范围,则审计整个集群。

审核模板 — 用于启动审核的一组保存的设置。 需要模板来使用相同的设置多次运行审核。 模板必须包含审核的目的;如果未指定策略,则选择最合适的现有策略。

是提供计算、存储和网络资源并由同一个 OpenStack 管理节点管理的物理机的集合。

集群数据模型 (CDM) 是集群管理的资源的当前状态和拓扑的逻辑表示。

效率指标 - 指示如何执行使用此策略创建的解决方案的指示器。 绩效指标特定于特定目标,通常用于计算最终行动计划的总体有效性。

功效规格 是与每个目标相关的一组特定功能,定义了实现相应目标的策略在其解决方案中必须实现的各种绩效指标。 事实上,在计算其全局有效性之前,该策略提出的每个解决方案都将根据规范进行检查。

评分引擎 是一个可执行文件,具有明确定义的输入、明确定义的输出,并执行纯数学任务。 这样,计算就独立于执行它的环境——它在任何地方都会给出相同的结果。

观察者规划师 - 观察者决策引擎的一部分。 该模块采用策略生成的一组操作,并创建一个工作流程计划,该计划定义如何及时安排这些不同的操作以及每个操作的先决条件是什么。

观察者目标和策略

目标
战略。

虚拟目标
虚拟策略 

使用示例评分引擎的虚拟策略

具有调整大小的虚拟策略

节能
节能策略

服务器整合
基本的离线服务器整合

虚拟机工作负载整合策略

工作负载平衡
工作负载平衡迁移策略

存储容量平衡策略

工作负载稳定

吵闹的邻居
吵闹的邻居

热优化
基于出口温度的策略

气流优化
统一气流迁移策略

硬件维护
区域迁移

未分类
执行器

虚拟目标 — 用于测试目的的保留目标。

相关策略:虚拟策略、使用示例评分引擎的虚拟策略和具有调整大小的虚拟策略。 Dummy策略是通过Tempest进行集成测试时使用的虚拟策略。 该策略不提供任何有用的优化,其唯一目的是使用 Tempest 测试。

使用示例评分引擎的虚拟策略 - 该策略与前一个策略类似,唯一的区别是使用示例“评分引擎”,该引擎通过机器学习方法进行计算。

带调整大小的虚拟策略 - 该策略与前一种策略类似,唯一的区别是使用更改风味(迁移和调整大小)。

未在生产中使用。

节能 — 最大限度地减少能源消耗。 这一目标的节能策略与虚拟机工作负载整合策略(服务器整合)一起,能够提供动态电源管理 (DPM) 功能,即使在资源利用率低的时期,也可以通过动态整合工作负载来节省能源:虚拟机移至更少的节点,并且禁用不必要的节点。 整合后,该策略根据指定的参数提供打开/关闭节点的决策:“min_free_hosts_num” - 等待加载的空闲启用节点的数量,“free_used_percent” - 空闲启用主机占总负载的百分比机器占用的节点数。 为了使该策略发挥作用,必须 启用并配置 Ironic 以处理节点上的电源循环。

策略参数

参数
类型
默认情况下
描述

免费使用百分比
联系电话
10.0
空闲计算节点数与拥有虚拟机的计算节点数之比

最小空闲主机数
诠释
1
最小空闲计算节点数

云必须至少有两个节点。 使用的方法是更改​​节点的电源状态(change_node_power_state)。 该策略不需要收集指标。

服务器整合 - 最大限度地减少计算节点的数量(整合)。 它有两种策略:基本离线服务器整合策略和虚拟机工作负载整合策略。

基本离线服务器整合策略最大限度地减少了使用的服务器总数,并最大限度地减少了迁移次数。

基本策略需要以下指标:

指标
办公室
外挂程式
一条评论

计算.节点.cpu.百分比
云高仪
没有
 

cpu_util
云高仪
没有
 

策略参数:migration_attempts - 搜索潜在关闭候选者的组合数量(默认值,0,无限制),period - 从指标数据源获取静态聚合的时间间隔(以秒为单位)(默认值,700)。

使用的方法:迁移、改变nova服务状态(change_nova_service_state)。

VM 工作负载整合策略基于首次拟合启发式算法,重点关注测量的 CPU 负载,并尝试在给定资源容量限制的情况下尽量减少负载过多或过少的节点。 该策略提供了一种解决方案,通过以下四个步骤更有效地利用集群资源:

  1. 卸载阶段——处理过度使用的资源;
  2. 整合阶段——处理未充分利用的资源;
  3. 解决方案的优化——减少迁移次数;
  4. 禁用未使用的计算节点。

该策略需要以下指标:

指标
办公室
外挂程式
一条评论

记忆
云高仪
没有
 

磁盘根目录大小
云高仪
没有
 

以下指标是可选的,但如果可用,将提高策略的准确性:

指标
办公室
外挂程式
一条评论

内存驻留
云高仪
没有
 

cpu_util
云高仪
没有
 

策略参数: period — 从指标数据源获取静态聚合的时间间隔(以秒为单位)(默认为 3600)。

使用与之前策略相同的方法。 更多细节 这里.

工作负载平衡 — 平衡计算节点之间的工作负载。 目标有三个策略:工作负载平衡迁移策略、工作负载稳定、存储容量平衡策略。

工作负载平衡迁移策略根据主机虚拟机工作负载运行虚拟机迁移。 只要节点的 CPU 或 RAM 利用率百分比超过指定阈值,就会做出迁移决定。 在这种情况下,移动的虚拟机应该使节点更接近所有节点的平均工作负载。

需求

  • 使用物理处理器;
  • 至少两个物理计算节点;
  • 安装并配置了在每个计算节点上运行的 Ceilometer 组件 - ceilometer-agent-compute 和 Ceilometer API,并收集以下指标:

指标
办公室
外挂程式
一条评论

cpu_util
云高仪
没有
 

内存驻留
云高仪
没有
 

策略参数:

参数
类型
默认情况下
描述

度量

'cpu_util'
底层指标是:“cpu_util”、“memory.resident”。

门槛
联系电话
25.0
迁移的工作负载阈值。

期间
联系电话
300
累积时间段云高计。

使用的方法是迁移。

工作负载稳定是一种旨在使用实时迁移稳定工作负载的策略。 该策略基于标准差算法,判断集群是否存在拥塞,并通过触发机器迁移来响应,以稳定集群。

需求

  • 使用物理处理器;
  • 至少两个物理计算节点;
  • 安装并配置了在每个计算节点上运行的 Ceilometer 组件 - ceilometer-agent-compute 和 Ceilometer API,并收集以下指标:

指标
办公室
外挂程式
一条评论

cpu_util
云高仪
没有
 

内存驻留
云高仪
没有
 

存储容量平衡策略(从 Queens 开始实施的策略) - 该策略根据 Cinder 池上的负载转移磁盘。 每当池利用率超过指定阈值时,就会做出传输决策。 移动的磁盘应该使池更接近所有 Cinder 池的平均负载。

要求和限制

  • 至少两个 Cinder 池;
  • 磁盘迁移的可能性。
  • 集群数据模型 - Cinder 集群数据模型收集器。

策略参数:

参数
类型
默认情况下
描述

音量阈值
联系电话
80.0
用于平衡卷的磁盘阈值。

使用的方法是磁盘迁移(volume_migrate)。

嘈杂的邻居 - 识别并迁移“嘈杂的邻居” - 一种低优先级虚拟机,该虚拟机通过过度使用末级缓存对 IPC 方面的高优先级虚拟机的性能产生负面影响。 自己的策略:Noisy Neighbor(使用的策略参数是cache_threshold(默认值为35),当性能下降到指定值时,开始迁移。为了使该策略起作用,启用 LLC(末级缓存)指标, 支持 CMT 的最新英特尔服务器,以及收集以下指标:

指标
办公室
外挂程式
一条评论

cpu_l3_缓存
云高仪
没有
需要英特尔 CMT.

集群数据模型(默认):Nova 集群数据模型收集器。 使用的方法是迁移。

通过仪表板实现这一目标在皇后区尚未完全实现。

热优化 — 优化温度状况。 出口(排气)温度是测量服务器热量/工作负载状态的重要热遥测系统之一。 目标有一种策略,即基于出口温度的策略,当源主机的出口温度达到可配置阈值时,该策略决定将工作负载迁移到热有利的主机(最低出口温度)。

为了使该策略发挥作用,您需要一台安装并配置了 Intel Power Node Manager 的服务器 3.0 或更高版本,以及收集以下指标:

指标
办公室
外挂程式
一条评论

hardware.ipmi.node.outlet_温度
云高仪
智能制造管理接口
 

策略参数:

参数
类型
默认情况下
描述

门槛
联系电话
35.0
迁移的温度阈值。

期间
联系电话
30
从监控数据源获取统计聚合的时间间隔(秒)。

使用的方法是迁移。

气流优化 ——优化通气模式。 自己的策略 - 使用实时迁移的统一气流。 每当服务器风扇的气流超过指定阈值时,该策略就会触发虚拟机迁移。

为了使该策略发挥作用,您需要:

  • 硬件:计算节点<支持NodeManager 3.0;
  • 至少两个计算节点;
  • 在每个计算节点上安装和配置的 ceilometer-agent-compute 和 Ceilometer API 组件,可以成功报告气流、系统功率、入口温度等指标:

指标
办公室
外挂程式
一条评论

硬件.ipmi.node.airflow
云高仪
智能制造管理接口
 

硬件.ipmi.节点.温度
云高仪
智能制造管理接口
 

hardware.ipmi.node.power
云高仪
智能制造管理接口
 

为了使该策略发挥作用,您需要一台安装并配置了 Intel Power Node Manager 3.0 或更高版本的服务器。

限制:该概念不适用于生产。

建议将此算法与连续审核一起使用,因为每次迭代仅计划迁移一个虚拟机。

实时迁移是可能的。

策略参数:

参数
类型
默认情况下
描述

阈值气流
联系电话
400.0
迁移气流阈值 单位为0.1CFM

阈值入口_t
联系电话
28.0
用于迁移决策的入口温度阈值

阈值功率
联系电话
350.0
用于迁移决策的系统功率阈值

期间
联系电话
30
从监控数据源获取统计聚合的时间间隔(秒)。

使用的方法是迁移。

硬件维护 ——硬件维护。 与此目标相关的策略是区域迁移。 该策略是在需要硬件维护时有效自动、最小化虚拟机和磁盘迁移的工具。 战略根据权重制定行动计划:权重较大的一组行动将先于其他行动计划。 有两个配置选项:action_weights 和并行化。

限制:需要配置动作权重和并行化。

策略参数:

参数
类型
默认情况下
描述

计算节点
排列
不包含
用于迁移的计算节点。

存储池
排列
不包含
用于迁移的存储节点。

并行总数
整数
6
必须并行执行的活动总数。

每个节点并行数
整数
2
每个计算节点并行执行的操作数。

每个池并行
整数
2
每个存储池并行执行的操作数。

优先
对象
不包含
虚拟机和磁盘的优先级列表。

带附加卷
布尔

False — 迁移所有磁盘后将迁移虚拟机。 正确 — 迁移所有连接的磁盘后,将迁移虚拟机。

计算节点数组的元素:

参数
类型
默认情况下
描述

源节点
绳子
不包含
从中迁移虚拟机的计算节点(必需)。

目标节点
绳子
不包含
计算虚拟机要迁移到的节点。

存储节点数组元素:

参数
类型
默认情况下
描述

源池
绳子
不包含
从中迁移磁盘的存储池(必需)。

目标池
绳子
不包含
磁盘迁移到的存储池。

源类型
绳子
不包含
原始磁盘类型(必需)。

目标类型
绳子
不包含
生成的磁盘类型(必需)。

对象优先级元素:

参数
类型
默认情况下
描述

项目
排列
不包含
项目名称。

计算节点
排列
不包含
计算节点名称。

存储池
排列
不包含
存储池名称。

计算
枚举
不包含
虚拟机参数 [“vcpu_num”、“mem_size”、“disk_size”、“created_at”]。

存储
枚举
不包含
磁盘参数[“size”,“created_at”]。

采用的方法有虚拟机迁移、磁盘迁移。

未分类 - 用于促进战略制定过程的辅助目标。 不包含任何规范,并且可以在策略尚未与现有目标关联时使用。 这个目标也可以作为一个过渡点。 与此目标相关的策略是 Actuator。   

制定新目标

观察者决策引擎 有一个“外部目标”插件接口,可以集成可以使用策略实现的外部目标。

在创建新目标之前,您应该确保现有目标没有满足您的需求。

创建一个新插件

要创建新目标,您必须:扩展目标类、实现类方法 获取名称() 返回您要创建的新目标的唯一 ID。 该唯一标识符必须与您稍后声明的入口点名称匹配。

接下来需要实现类方法 获取显示名称() 返回要创建的目标的翻译后的显示名称(不要使用变量返回翻译后的字符串,以便翻译工具可以自动收集它。)。

实现一个类方法 get_translatable_display_name()返回新目标的翻译键(实际上是英文显示名称)。 返回值必须与翻译成 get_display_name() 的字符串匹配。

实施他的方法 获取功效规格()返回目标的效率规范。 get_efficacy_specation() 方法返回 Watcher 提供的 Unclassified() 实例。 该绩效规范在制定目标的过程中非常有用,因为它对应于空规范。

在这里阅读更多

观察者架构(更多细节) 这里).

Openstack 中的负载均衡

组件

Openstack 中的负载均衡

观察者API - 实现Watcher提供的REST API的组件。 交互机制:CLI、Horizo​​n 插件、Python SDK。

观察者数据库 — 观察者数据库。

观察者应用者 — 执行由观察者决策引擎组件创建的行动计划的组件。

观察者决策引擎 - 负责计算一组潜在优化操作以实现审核目标的组件。 如果未指定策略,组件将独立选择最合适的策略。

观察者指标发布者 - 收集和计算一些指标或事件并将其发布到 CEP 端点的组件。 该组件的功能也可以由 Ceilometer 发布者提供。

复杂事件处理 (CEP) 引擎 — 复杂事件处理引擎。 出于性能原因,可能有多个 CEP 引擎实例同时运行,每个实例处理特定类型的指标/事件。 在Watcher系统中,CEP触发两种类型的动作: - 在时间序列数据库中记录相应的事件/指标; - 当事件可以影响当前优化策略的结果时,向观察者决策引擎发送适当的事件,因为Openstack集群不是静态系统。

组件使用 AMQP 协议进行交互。

配置观察者

与Watcher的交互方案

Openstack 中的负载均衡

观察者测试结果

  1. 在优化 - 行动计划 500 页面(无论是在纯 Queen 上还是在带有 Tionix 模块的展台上),它仅在启动审核并生成行动计划后才会出现;空的页面会正常打开。
  2. 操作详细信息选项卡上存在错误,无法获取审核目标和策略(无论是在纯 Queens 上还是在带有 Tionix 模块的支架上)。
  3. 正常创建并启动以虚拟(测试)为目的的审核,并生成行动计划。
  4. 不会创建对未分类目标的审核,因为该目标不起作用,并且用于创建新策略时的中间配置。
  5. 已成功创建用于 Workload Balancing(存储容量平衡策略)的审核,但未生成操作计划。 无需存储池优化。
  6. Workload Balancing 目标(Workload Balance 迁移策略)的审核已成功创建,但未生成操作计划。
  7. Workload Balancing(工作负载稳定策略)审核失败。
  8. 已成功创建对“吵闹邻居”目标的审核,但未生成行动计划。
  9. 用于硬件维护的审核已成功创建,但未完整生成行动计划(生成性能指标,但未生成行动列表本身)。
  10. 在计算和控制节点上的 nova.conf 配置(默认部分compute_monitors = cpu.virt_driver)中进行编辑不会更正错误。
  11. 针对服务器整合(基本策略)的审核也失败。
  12. 用于服务器整合(VM 工作负载整合策略)的审核失败并出现错误。 日志中获取源数据时出现错误。 错误的讨论,特别是 这里.
    我们尝试在配置文件中指定 Watcher(它没有帮助 - 由于所有优化页面上都出现错误,返回配置文件的原始内容并不能纠正这种情况):

    [watcher_strategies.basic] 数据源 = ceilometer、gnocchi
  13. 节能审核失败。 从日志来看,问题仍然是缺少 Ironic;如果没有裸机服务,它就无法工作。
  14. 热优化审核失败。 回溯与服务器整合(VM 工作负载整合策略)相同(源数据错误)
  15. 以气流优化为目的的审核因错误而失败。

还会遇到以下审核完成错误。 Decision-engine.log 日志中的回溯(未定义集群状态)。

→ 错误的讨论 这里

结论

经过两个月的研究,我们得出了明确的结论:为了获得一个成熟的、可工作的负载均衡系统,我们必须在这一部分中密切合作,完善 Openstack 平台的工具。

Watcher 已被证明是一个认真且快速发展的产品,具有巨大的潜力,充分利用它需要大量认真的工作。

但本系列的下一篇文章将对此进行更多介绍。

来源: habr.com

添加评论