驱动程序故障后的重新初始化

https://blueprints.launchpad.net/cinder/+spec/driver-initialization-after-fail

本规范提出支持在启动失败后重新初始化卷驱动程序。

问题描述

在 Cinder 初始化期间,由于多种原因,存储后端可能未就绪且未响应。在这种情况下,即使阵列在之后立即可用,驱动程序也不会被加载。

由于 Cinder 卷服务中没有重试机制,即使后端存储稍后准备就绪,Cinder 卷服务也无法自行恢复。需要用户手动重启卷服务。

用例

当 Cinder 卷服务启动时,有时其对应的存储服务未准备就绪。但随后存储服务变为就绪状态。结果,卷服务无法正常工作,也无法自行恢复。但管理员可能更希望 Cinder 能够自动从临时故障中恢复,而无需手动干预重启服务。

提议的变更

该提案是

  • 允许在驱动程序初始化失败时重新初始化。

  • 提供一个配置项来设置最大重试次数。

  • 重试间隔将呈指数退避。每个间隔是重试次数的指数。第一个间隔为 1s,第二个间隔为 2s,第三个间隔为 4s,依此类推。

  • 重试将在 init_host 中处理。

为此,需要以下额外的配置选项

  • ‘reinit_driver_count’ (默认值:3)

    设置卷初始化失败时重新初始化驱动程序的最大次数。默认值为 3。

备选方案

  • 我们还可以区分是否应该使用异常进行重试。例如,导入错误、配置错误,可能不需要重试。但收益并不显著,并且实现差异化需要在每个驱动程序中进行工作。因为驱动程序不会区分此类错误和后端存储错误。

数据模型影响

REST API 影响

无。

Cinder 客户端影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

在驱动程序初始化失败且错误可恢复的情况下,用户无需重启卷服务。

性能影响

无。

其他部署者影响

无。

开发人员影响

实现

负责人

主要负责人

Lisa Li (xiaoyan.li@intel.com)

工作项

  • 添加选项 ‘reinit_driver_count’。

  • 在驱动程序初始化失败时重试初始化卷驱动程序。

  • 添加相关的单元测试用例。

依赖项

测试

  • 添加单元测试以涵盖此更改。

文档影响

  • 添加管理员文档,以宣传 ‘reinit_driver_count’ 选项,用于驱动程序重新初始化,并解释应如何使用它。

参考资料