通过服务器组实现反亲和性¶
https://blueprints.launchpad.net/sahara/+spec/anti-affinity-via-server-groups
服务器组是 OpenStack 实现反亲和性的一种方式。 在 nova 引入服务器组之前,Sahara 已经实现了反亲和性。 现在是时候用通用的方案来替换自定义解决方案了。
问题描述¶
直接引擎使用手动调度提示来实现反亲和性。
Heat 引擎具有有限的反亲和性支持,并且也使用调度提示 (https://bugs.launchpad.net/sahara/+bug/1268610)。
Nova 具有用于此目的的通用机制。
提议的变更¶
建议的解决方案是将两个引擎都切换到使用服务器组的实现。
当前的服务器组实现有一个限制,即每个服务器只能属于一个服务器组。 我们可以通过每个集群拥有一个服务器组来处理这个限制。 在这种情况下,每个具有受影响进程的实例都将包含在此服务器组中。 因此,即使它们没有共同的进程,也不会在同一主机上出现多个受影响的实例。 这种实现完全符合我们关于反亲和性的所有文档。
我们需要保持直接引擎的向后兼容性。 用户应该能够扩展在 Icehouse 版本上部署的集群。 Sahara 应该相应地更新已经生成的虚拟机。 建议的解决方案 - Sahara 应该在扩展期间检查服务器组是否存在,如果服务器组丢失,则更新整个集群。
我们不关心 Heat 引擎的向后兼容性。 它在 Icehouse 版本中处于 Beta 状态,并且存在其他破坏它的更改。
替代方案¶
我们只能在 Heat 引擎中通过服务器组实现反亲和性。 我们将在未来停止支持直接引擎。 因此,我们可以冻结直接引擎的当前行为,直到它被弃用和删除为止。
数据模型影响¶
无
REST API 影响¶
无
其他最终用户影响¶
在涉及多个进程的情况下,反亲和性行为会发生变化。 在更改之前,有可能在同一主机上生成具有受影响(但不同)进程的多个实例。 更改后,所有具有受影响进程的实例都将被调度到不同的主机。
部署者影响¶
无
开发者影响¶
无
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
无
实现¶
负责人¶
- 主要负责人
alazarev
工作项¶
实施更改
依赖项¶
无
测试¶
将由当前的集成测试覆盖。
文档影响¶
需要在升级说明中添加关于反亲和性行为更改的说明。