驱动程序故障后的重新初始化¶
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’ 选项,用于驱动程序重新初始化,并解释应如何使用它。
参考资料¶
无