使用热引擎的两步伸缩

https://blueprints.launchpad.net/sahara/+spec/heat-two-step-scaling

在集群伸缩失败的情况下,Heat 会回滚删除所有资源。之后,Sahara 会要求 Heat 再次删除它们。“回滚删除后再删除”这一步看起来是不必要的。

问题描述

当使用热引擎的 Sahara 伸缩集群失败时,会发生以下场景

  1. 用户请求集群伸缩

  2. Sahara 运行 Hadoop 节点退役

  3. Sahara 运行 heat stack 更新,同时包含添加和删除的节点,并且 rollback_on_failure=True

  4. 如果第 3 步失败,Heat 会将所有已删除的节点恢复回来

  5. Sahara 运行 heat stack 更新,仅包含删除的节点

  6. Heat 再次删除节点

因此,在第 4 步,Heat 恢复了稍后将被删除的节点。

提议的变更

可以通过两步伸缩来避免上述问题。因此,最终流程如下

  1. 用户请求集群伸缩

  2. Sahara 运行 Hadoop 节点退役

  3. Sahara 运行 heat stack 更新,仅包含删除的资源,并且 rollback_on_failure=False

  4. Sahara 运行 heat stack 更新,包含新的资源,并且 rollback_on_failure=True

在这种情况下,如果第 4 步失败,Heat 将不会尝试恢复已删除的资源。它将回滚到资源已经删除的状态。

如果第 3 步失败,Sahara 无法做任何事情。集群将被移动到“Error”状态。

替代方案

无需采取任何措施,因为问题仅出现在伸缩失败的罕见情况下。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

无。

Sahara-dashboard / Horizon 影响

无。

实现

负责人

主要负责人

alazarev (Andrew Lazarev)

其他贡献者

工作项

  • 执行更改

  • 测试集群伸缩失败时的回滚是否按预期工作

依赖项

无。

测试

手动。

文档影响

无。

参考资料

无。