新的 nova API 调用以将 nova-compute 标记为宕机¶
https://blueprints.launchpad.net/nova/+spec/mark-host-down
需要一个新的 API 调用来立即更改 nova-compute 服务的状态为宕机。这允许在没有延迟的情况下使用 evacuate API。此外,由于外部系统调用该 API 将确保没有虚拟机仍在运行,因此不会出现破坏共享存储或再次使用相同 IP 的可能性。API 的使用主要适用于将单个主机映射到 nova-compute 的情况。像 Ironic 或 vSphere 这样的情况将超出范围。
问题描述¶
对于故障或无法访问的主机,nova-compute 状态更改缓慢,并且不能可靠地表明主机是否宕机。无法快速进行疏散,并且由于虚拟机可能仍在运行,可能会导致重用相同的 IP 以及在共享存储的情况下导致数据损坏。此外,由于能够将虚拟机调度到故障主机,可能会对云的稳定性产生影响。
用例¶
作为用户,我希望在 nova-compute 宕机时快速疏散虚拟机。
作为用户,我希望信任虚拟机将被调度到健康的计算节点。
作为用户,我希望信任在报告 nova-compute 宕机时,不会有虚拟机继续运行。如果外部系统可以在检测到故障时标记 nova-compute 宕机,就可以信任相应的虚拟机也确实已宕机。
作为部署者,我希望部署外部故障监控系统,该系统可以检测可以转换为主机故障的不同问题,并将其告知 OpenStack,并确保主机被隔离(关机)。监控系统可以监控接口、链路、服务、内存、CPU、HW、hypervisor、OpenStack 服务等,并据此采取行动。
项目优先级¶
Liberty 优先级尚未确定。
提议的变更¶
引入新的服务 API 扩展,用于设置 nova-compute 的电源状态为开启或关闭。
作为未来的工作,可能还会制作与此相关的其他 BP
新的服务状态更改通知。
与主机上运行的实例相关,也可以制作 BP
可以有一个 API 来为与单个主机相关的所有虚拟机设置“power_state: shutdown”。
目前有一个 API 可以逐个重置虚拟机状态。可以有一个 API 对与单个主机相关的所有虚拟机执行相同的操作。
备选方案¶
没有有吸引力的替代方案来检测所有不同的主机故障,而不是拥有一个外部工具来检测不同的主机故障。为了使这种工具存在,Nova 需要一个新的 API 来报告故障。目前一定已经实现了一些变通方法,因为无法足够快地信任或获取 OpenStack 的状态。
数据模型影响¶
Nova DB 服务表将有一个新的布尔列 forced_down,默认值为 false。数据库 servicegroup 驱动程序的 is_up 方法需要更新为在值为 true 时使用它来确定服务状态为宕机。否则,预计将使用基于当前时间戳的使用方式。只有当 forced_down 标志被设置回 false 时,nova-compute 才会被允许启动并报告状态为开启。
REST API 影响¶
新的计算 API 以更改 nova-compute forced_down 标志的值为 true 或 false
请求
PUT /v2.1/{tenant_id}/os-services/force-down { "binary": "nova-compute", "host": "host1", "forced_down": true }response
200 OK { "service": { "host": "host1", "binary": "nova-compute", "forced_down": true } }请求
PUT /v2.1/{tenant_id}/os-services/force-down { "binary": "nova-compute", "host": "host1", "forced_down": false }response
200 OK { "service": { "host": "host1", "binary": "nova-compute", "forced_down": false } }
服务模式将具有新的可选参数
forced_down: parameter_types.boolean
这将包含在对 forced_down 请求的响应消息中。
除了新的调用之外,服务列表的响应还将包含有关 forced_down 字段状态的信息。
安全影响¶
可配置的策略,默认情况下为 admin 角色。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
部署者可以使用任何外部系统来检测主机故障并将其报告给 OpenStack。
开发人员影响¶
无
实现¶
负责人¶
主要负责人:Tomi Juvonen 其他贡献者:Ryota Mibu, Roman Dobosz
工作项¶
测试用例。
REST API 和服务更改。实现:https://review.openstack.org/#/c/184086/
CLI API 更改。
文档。
依赖项¶
无。
测试¶
需要添加单元和功能测试用例。
文档影响¶
需要记录新的 API
计算 API 扩展文档。https://developer.openstack.org/api-ref-compute-v2.1.html
nova.compute.api 文档。https://docs.openstack.org/developer/nova/api/nova.compute.api.html
参考资料¶
OPNFV Doctor 项目:https://wiki.opnfv.org/doctor
OpenStack 实例 HA 提案:http://blog.russellbryant.net/2014/10/15/openstack-instance-ha-proposal/
OpenStack HA 的不同方面:http://blog.russellbryant.net/2015/03/10/the-different-facets-of-openstack-ha/