我能够在运行模式下从一个节点到另一个节点执行KVM实时迁移。但是当我尝试使用Cassandra压力工具从另一个节点向当前主机节点Cassandra强调时,它正在尝试迁移它。它会导致以下显示失败。
我该如何解决?
Unable to migrate guest: operation failed: domain is no longer running
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 90, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/migrate.py", line 438, in _async_migrate meter=meter)
File "/usr/share/virt-manager/virtManager/domain.py", line 1488, in migrate
self._backend.migrate(libvirt_destconn, flags, None, interface, 0)
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 1535, in migrate
if ret is None:raise libvirtError('virDomainMigrate() failed', dom=self)
libvirtError: operation failed: domain is no longer running
答案 0 :(得分:1)
实时迁移必须将所有来宾内存页面从源主机复制到目标主机。这需要的时间取决于可用的网络带宽,以及较低程度的CPU性能(如果libvirt正在加密迁移数据)。在进行此复制时,访客可能仍在修改其内存,因此可能需要复制相同的内存页面。再次。如果访客弄脏内存页面的速度比QEMU通过网络传输速度快,那么迁移将永远不会完成。
像Cassandra这样运行密集型工作负载很可能导致迁移无法完成。有许多选项可以打开以使其工作,但最有用的是"自动融合"这限制了客户CPU以减缓内存弄脏的速度,并且"发布副本"它将guest虚拟机立即切换到目标主机,并进行copy-on-write以从源端拉出页面。
复制后是在有限的时间内完成迁移的最有效方法,但如果在复制完成之前源主机或网络中断,则完全丢失VM的风险很小。如果您的KVM版本中没有可用的后期复制,或者您不愿意承担复制后丢失虚拟机的小风险,则自动聚合是一个很好的第二选择。
我不相信virt-manager中有任何一个可用,因此您必须使用virsh触发迁移才能使用这些功能。