
# MRS集群Task节点弹性伸缩概述
在大数据应用，尤其是实时分析处理数据的场景中，常常需要根据数据量的变化动态调整集群节点数量以增减资源。
MRS支持根据集群负载对集群的Task节点进行弹性伸缩。如果数据量是按照周期进行有规律的变化，用户可以按照固定时间段来自动调整Task节点数量范围，从而在数据量变化前提前完成集群的扩缩容。
- 根据集群负载配置Task节点弹性伸缩：根据集群实时负载指标或集群资源池指标对Task节点数量进行调整，数据量变化后触发扩缩容，有一定的延后性。支持配置的指标请参见[MRS集群节点弹性伸缩指标说明]。
- 根据时间段配置Task节点弹性伸缩：按时间段设置Task节点数量范围，若数据量变化存在周期性规律，则可通过资源计划在数据量变化前提前完成集群的扩缩容，避免出现增加或减少资源的延后。
- 自动化脚本：当某些业务场景要求在集群扩缩容之后，根据节点数量的变化对资源分配或业务逻辑进行更改时，手动扩缩容的场景客户可以登录集群节点进行操作。对于弹性伸缩场景，MRS支持通过自定义弹性伸缩自动化脚本来解决。自动化脚本可以在弹性伸缩前后执行相应操作，自动适应业务负载的变化，免去了人工操作。同时，自动化脚本给用户实现个性需求提供了途径，完全自定义的脚本与多个可选的执行时机基本可以满足用户的各项需求，使弹性伸缩更具灵活性。自动化脚本相关配置操作请参考[配置MRS集群节点引导操作](https://support.huaweicloud.com/usermanual-mrs/mrs_01_24565.html)。
用户可根据集群负载或根据时间段配置Task节点弹性伸缩，两者必须至少配置其中一种，也可以叠加使用。根据集群负载与时间段叠加使用可以使得集群节点的弹性更好，足以应对偶尔超出预期的数据峰值出现。
 #### MRS集群节点弹性伸缩指标说明
- **节点组维度策略**
  在添加规则时，可以参考[表1]配置相应的指标。
  - [表1]中指标数值类型为百分比或比率时，有效数值可精确到百分位。其中百分比类型指标数值为去除百分号（%）后的小数值，如16.80即代表16.80%。
  
  - 混合集群支持分析集群和流式集群的所有指标。
  
  
   表1弹性伸缩指标列表 
  | 集群类型 | 指标名称                                                 | 数值类型 | 说明                                                                                                            |
  |:---|:---|:---|:---|
  | 流式集群 | StormSlotAvailable                                   | 整型   | Storm组件的可用slot数。 取值范围为\[0～2147483646\]。                                       |
  | 流式集群 | StormSlotAvailablePercentage                         | 百分比  | Storm组件可用slot百分比。是可用slot数与总slot数的比值。 取值范围为\[0～100\]。                           |
  | 流式集群 | StormSlotUsed                                        | 整型   | Storm组件的已用slot数。 取值范围为\[0～2147483646\]。                                         |
  | 流式集群 | StormSlotUsedPercentage                              | 百分比  | Storm组件已用slot百分比。是已用slot数与总slot数的比值。 取值范围为\[0～100\]。                           |
  | 流式集群 | StormSupervisorMemAverageUsage                       | 整型   | Storm组件Supervisor的内存平均使用量。 取值范围为\[0～2147483646\]。                              |
  | 流式集群 | StormSupervisorMemAverageUsagePercentage             | 百分比  | Storm组件Supervisor进程使用的内存占系统总内存的平均百分比。 取值范围\[0 \~ 100\]。                         |
  | 流式集群 | StormSupervisorCPUAverageUsagePercentage             | 百分比  | Storm组件Supervisor进程使用的CPU占系统总CPU的平均百分比。 取值范围\[0 \~ 6000\]。                   |
  | 分析集群 | YARNAppPending                                       | 整型   | YARN组件挂起的任务数。 取值范围为\[0～2147483646\]。                                          |
  | 分析集群 | YARNAppPendingRatio                                  | 比率   | YARN组件挂起的任务数比例。是YARN挂起的任务数与YARN运行中的任务数比值。 取值范围为\[0～2147483646\]。                |
  | 分析集群 | YARNAppRunning                                       | 整型   | YARN组件运行中的任务数。 取值范围为\[0～2147483646\]。                                          |
  | 分析集群 | YARNContainerAllocated                               | 整型   | YARN组件中已分配的container个数。 取值范围为\[0～2147483646\]。                                 |
  | 分析集群 | YARNContainerPending                                 | 整型   | YARN组件挂起的container个数。 取值范围为\[0～2147483646\]。                                  |
  | 分析集群 | YARNContainerPendingRatio                            | 比率   | YARN组件挂起的container比率。是挂起的container数与运行中的container数的比值。 取值范围为\[0～2147483646\]。 |
  | 分析集群 | YARNCPUAllocated                                     | 整型   | YARN组件已分配的虚拟CPU核心数。 取值范围为\[0～2147483646\]。                                      |
  | 分析集群 | YARNCPUAvailable                                     | 整型   | YARN组件可用的虚拟CPU核心数。 取值范围为\[0～2147483646\]。                                      |
  | 分析集群 | YARNCPUAvailablePercentage                           | 百分比  | YARN组件可用虚拟CPU核心数百分比。是可用虚拟CPU核心数与总虚拟CPU核心数比值。 取值范围为\[0～100\]。                 |
  | 分析集群 | YARNCPUPending  | 整型   | YARN组件挂起的虚拟CPU核心数。 取值范围为\[0～2147483646\]。                                      |
  | 分析集群 | YARNMemoryAllocated                                  | 整型   | YARN组件已分配内存大小。单位为MB。 取值范围为\[0～2147483646\]。                                   |
  | 分析集群 | YARNMemoryAvailable                                  | 整型   | YARN组件可用内存大小。单位为MB。 取值范围为\[0～2147483646\]。                                   |
  | 分析集群 | YARNMemoryAvailablePercentage                        | 百分比  | YARN组件可用内存百分比。是YARN组件可用内存大小与YARN组件总内存大小的比值。 取值范围为\[0～100\]。                     |
  | 分析集群 | YARNMemoryPending                                    | 整型   | YARN组件挂起的内存大小。 取值范围为\[0～2147483646\]。                                           |
     
  
- **资源池维度策略**
  仅以下版本支持配置资源池维度弹性伸缩：
  - 普通版集群：MRS 3.1.5及之后版本。
  
  - LTS版集群：MRS 3.3.0-LTS及之后版本。
   
  在添加规则时，可以参考[表2]配置相应的指标。
   表2规则配置项说明 
  | 集群类型       | 指标名称                                  | 数值类型                                      | 说明                                                                                              |
  |:---|:---|:---|:---|
  | 分析集群/自定义集群 | ResourcePoolMemoryAvailable           | 整型                                        | 资源池YARN组件可用内存大小。单位为MB。 取值范围为\[0～2147483646\]。                    |
  | 分析集群/自定义集群 | ResourcePoolMemoryAvailablePercentage | 百分比                                       | 资源池YARN组件可用内存百分比。是YARN组件可用内存大小与YARN组件总内存大小的比值。 取值范围为\[0～100\]。    |
  | 分析集群/自定义集群 | ResourcePoolCPUAvailable              | 整型                                        | 资源池YARN组件可用的虚拟CPU核心数。 取值范围为\[0～2147483646\]。                      |
  | 分析集群/自定义集群 | ResourcePoolCPUAvailablePercentage    | 百分比  | 资源池YARN组件可用虚拟CPU核心数百分比。是可用虚拟CPU核心数与总虚拟CPU核心数比值。 取值范围为\[0～100\]。 |
     
  在添加资源计划时，可以参考[表3]配置相应的参数。
   表3资源计划配置项说明 
  | 配置项    | 示例              | 说明                                                                                                                                                         |
  |:---|:---|:---|
  | 生效日期   | **周一**          | 资源计划的生效日期。默认是每日生效，也可以选择周一至周日任意一天或几天生效。                                                                                                                     |
  | 时间范围   | **08:00-10:00** | 资源计划的起始时间和结束时间，精确到分钟，取值范围\[00:00, 23:59\]。例如资源计划开始于早上8:00，结束于10:00，则配置为8:00-10:00。结束时间必须晚于开始时间至少30分钟。                                                      |
  | 节点数量范围 | **4-5**         | 资源计划内的节点数量上下限，取值范围\[0,500\]，在资源计划时间内，集群Task节点数量小于最小节点数时，弹性伸缩会将集群Task节点一次性扩容到最小节点数。在资源计划时间内，集群Task节点数量大于最大节点数时，弹性伸缩会将集群Task节点一次性缩容到最大节点数。最小节点数必须小于或等于最大节点数。 |
     
  - 当启用资源计划时，弹性伸缩配置中的"默认节点数量范围"将在资源计划外的时间段内强制生效。例如"默认节点数量范围"配置为1\~2，配置资源计划：08:00-10:00之间节点数量范围为4\~5，则在一天中的非资源计划时间段（0:00-8:00以及10:00-23:59）内，Task节点会被强制限制在1个到2个中间，若节点数量大于2则触发自动缩容，若节点数量小于1则触发自动扩容。
  
  - 当不启用资源计划时，节点数量范围的"默认范围"会在全部时间范围生效，如果节点数量不在"节点数量范围"的默认范围，主动增减Task节点数量到默认范围内。
  
  - 资源计划间时间段不可交叉，时间段交叉意为某个时间点存在两个生效的资源计划，例如配置资源计划1在08:00-10:00生效，资源计划2在09:00-11:00生效，则两个资源计划存在时间段交叉，交叉时间段09:00-10:00。
  
  - 资源计划不能跨天配置，例如要配置23:00至次日01:00的资源计划，请配置时间段为23:00-00:00和00:00-01:00的两个资源计划。
   
- **自动化脚本**
  在添加自动化脚本时，可以参考[表4]配置相应参数。
   表4自动化脚本配置说明 
  | 配置项  | 示例                        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
  |:---|:---|:---|
  | 名称   | test                      | 自动化脚本的名称。 - 只能由数字、英文字符、空格、中划线和下划线组成，且不能以空格开头。  - 可输入的字符串长度为1～64个字符。  - 同一集群内，不允许配置相同的名称。不同集群之间，可以配置相同的名称。                                                                                                                                                                                                                                                                                                                           |
  | 脚本路径 | obs://mrs-samples/test.sh | 脚本的路径。路径可以是OBS文件系统的路径或虚拟机本地的路径。 - OBS文件系统的路径，必须以obs://开头，以.sh结尾。例如：obs://mrs-samples/xxx.sh  - 虚拟机本地的路径，脚本所在的路径必须以'/'开头，以.sh结尾。例如，安装Zepelin的示例脚本路径如下：/opt/bootstrap/zepelin/zepelin_install.sh                                                                                                                                                                                                                                                                                                   |
  | 执行节点 | Master节点                  | 选择自动化脚本所执行的节点类型。 如果选择Master节点，您可以通过开关选择是否只在Active Master节点执行此脚本。 - 如果选择开启此功能，表示只在Active Master节点上执行。  - 如果选择关闭，表示在所有Master节点执行。默认关闭。                                                                                                                                                                                                                                                                                                                                |
  | 参数   | -                         | 自动化脚本参数，支持通过传入以下预定义变量获得弹性伸缩相关信息： - ${mrs_scale_node_num} ：弹性伸缩节点数量，总是正数  - ${mrs_scale_type} ：弹性伸缩类型，扩容为"scale_out"，缩容为"scale_in"  - ${mrs_scale_node_hostnames} ：弹性伸缩节点的主机名，多个主机名之间以","隔开  - ${mrs_scale_node_ips} ：弹性伸缩节点的IP，多个IP之间以","隔开  - ${mrs_scale_rule_name}：触发弹性伸缩的规则名，如果是资源计划则为"resource_plan"   |
  | 执行时机 | 扩容前                       | 选择自动化脚本执行的时间。支持"扩容前"、"扩容后"、"缩容前"、"缩容后"四种类型。 假设执行节点类型中包含Task节点： - 执行时机为扩容前的脚本不会在将要扩容出的Task节点上执行。  - 执行时机为扩容后的脚本会在扩容出的Task节点上执行。  - 执行时机为缩容前的脚本会在即将被删除的Task节点上执行。  - 执行时机为缩容后的脚本不会在已经被删除的Task节点上执行。                                                                                                                                       |
  | 失败操作 | 继续                        | 该脚本执行失败后，是否继续执行后续脚本和扩缩容操作。 - 建议您在调试阶段设置为"继续"，无论此脚本是否执行成功，则集群都能继续扩缩容操作。  - 若脚本执行失败，请到集群虚拟机的"/var/log/Bigdata/Bootstrap"路径下查看失败日志。  - 由于缩容成功不可回滚，缩容后执行的脚本失败操作只能选择"继续"。                                                                                                                                                                                                                                                             |
     
  自动化脚本只在弹性伸缩时触发，手动调整集群节点时不会运行。
  
 
