支持在实时迁移期间迁移控制台日志

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 离线期间预计控制台日志为空

参考资料