支持在实时迁移期间迁移控制台日志¶
https://blueprints.launchpad.net/nova/+spec/support-console-log-migration
在 libvirt 驱动程序中实现实时迁移期间的控制台日志迁移
问题描述¶
目前,在带有 kvm 超visor 的 libvirt 驱动程序中,控制台输出被写入 console.log。Nova 响应 get-console-log 请求时会提供此文件的内容,这对于调试启动过程中的问题很有用。但是,在实时迁移期间,源节点中的文件内容会被丢弃。
有两个问题在此起作用。
目标节点中的新 kvm 进程将已经开始使用一个空的控制台日志。
在迁移过程中,源节点中的 VM 将继续写入控制台日志。
提议的变更¶
我们在此蓝图(blueprint)中提出以下解决方案,无需依赖 kvm。
要求不要设置 VIR_MIGRATE_UNDEFINE_SOURCE。而是等待实例在源节点上关机的条件。
在实时迁移后,将控制台日志从源节点复制到目标节点,并保存为 console.log.1。如果实现了日志轮转,则需要对所有轮转的文件进行一次轮转。
更改 get-console-log 函数,以便将 console.log 和 console.log.1 合并到响应中(在 MAX_CONSOLE_BYTES 限制内)。如果实现了日志轮转,则该函数需要读取尽可能多的文件来填充 MAX_CONSOLE_BYTES 限制。
一旦数据库使用新的主机名更新,源 VM 将被周期性任务取消定义。
备选方案¶
更改 qemu 以移动文件内容
将控制台输出流式传输到共享位置
如果实现了 spec/libvirt-serial-console,我们可以利用该机制来触发轮转并将其移动到目标节点。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
在 VM 在目标节点激活到实时迁移后完成之间存在一个短暂的窗口。在此窗口期间,任何 nova console-log 请求都将返回几乎为空的内容。
其他部署者影响¶
如果人们正在使用 VIR_MIGRATE_UNDEFINE_SOURCE,则需要删除此选项才能获得此功能。如果存在此标志,我们将回退到不迁移控制台日志。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
parthipan
工作项¶
更改实时迁移,如果未设置标志 VIR_MIGRATE_UNDEFINE_SOURCE,则等待关机状态。
更改 get_console_log 以处理轮转的日志文件
在实时迁移后实现控制台日志迁移
依赖项¶
无
测试¶
应添加 Tempest 测试,以测试响应中是否合并了控制台日志,并捕获其他边缘情况。
文档影响¶
我们预计将进行以下文档更改
迁移标志更改以迁移控制台日志
在迁移的最后阶段,VM 离线期间预计控制台日志为空