我一直在尝试ZFS + DRBD +实时迁移(我想充分理解它,以便在ganeti
再次开始使用openstack之前编写自己的自动化脚本cinder
)。我的ZFS + DRBD(在双主模式下)可以很好地用于共享存储。
但是,实时迁移仅部分起作用。
我有两台主机,具有相同的libvirt和drbd配置,甚至具有相同的VM ZVOL专用“卷”池(两个2x1TB镜像池-重新使用旧备份池中的一些旧磁盘),以及VM的相同配置(命名为“ dtest”)
“ indra”是在华硕Sabertooth 990FX m / b上具有16GB RAM的AMD FX-8150
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 nodeid_msr topoext perfctr_core perfctr_nb cpb hw_pstate vmmcall arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
“ surya”是AMD Phenom II X4 940,在ASUS M3A79-T DELUXE m / b上具有8GB RAM
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid eagerfpu pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt hw_pstate vmmcall npt lbrv svm_lock nrip_save
两者都运行debian sid,具有完全相同版本的软件包(包括libvirt* 2.0.0-1:amd64
和qemu-system-x86 1:2.6+dfsg-3
),并且具有相同的liquorix内核:
Linux indra 4.6-2.dmz.2-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.6-3 (2016-06-19) x86_64 GNU/Linux
Linux surya 4.6-2.dmz.2-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.6-3 (2016-06-19) x86_64 GNU/Linux
VM本身正在运行debian sid,并带有一个普通的debian 4.6.0-1内核:
Linux dtest 4.6.0-1-amd64 #1 SMP Debian 4.6.3-1 (2016-07-04) x86_64 GNU/Linux
我可以在任一主机上启动VM,并且运行良好。
我可以毫无问题地将虚拟机从surya迁移到indra。当我尝试将虚拟机从indra迁移到surya时,迁移似乎成功完成,但是虚拟机挂起,CPU使用率达到100%(对于分配给它的单个核心)。
VM是在indra上启动然后迁移到surya(挂起的位置)还是在surya上启动,再迁移到indra(到目前为止还可以)然后再迁移回surya(挂起),这没有什么区别。
当VM挂起时,我唯一可以做的就是virsh destroy
(强制关机)或virsh reset
(强制重启)。
我尝试用以下方式禁用kvm_steal_time:
<qemu:commandline>
<qemu:arg value='-cpu'/>
<qemu:arg value='qemu64,-kvm_steal_time'/>
</qemu:commandline>
但这不能解决问题。
没有任何登录或从虚拟机本身登录。我得到的任何问题的唯一迹象是/var/log/libvirt/qemu/dtest.log
surya上的以下消息。
2016-07-18T12:56:55.766929Z qemu-system-x86_64: warning: TSC frequency mismatch between VM and host, and TSC scaling unavailable
这可能是由于tsc_scale
cpu功能-8150 CPU(indra)上的功能,而x4 940(surya)上缺少此功能。
有人知道是什么问题吗?或如何解决?或调试建议?
它甚至可以修复,还是在几代历史的Phenom II x4 940中出现CPU错误?
我找到了解决方案。
正如我所怀疑的那样,问题的原因tsc_scale
是surya的CPU的功能标记不足。
事实证明,你可以从一个主机迁移虚拟机,而不tsc_scale
与它一台主机,但虚拟机与主机上运行tsc_scale
可以只迁移与另一台主机。
是时候提交错误报告了。
我创建了另一个基于ZFS ZVOL的DRBD,这次是在surya和网络上的另一台机器(我的主服务器)之间ganesh
。
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr cpb hw_pstate vmmcall npt lbrv svm_lock nrip_save pausefilter
我可以在surya和ganesh之间来回迁移VM,没有问题,也可以将虚拟机从surya或ganesh迁移到indra。但是我无法将虚拟机从indra迁移到surya或ganesh。
我现在可以忍受这个。ganesh将在新AMD Zen处理器发布时进行升级,而surya将获得ganesh当前的主板和RAM。我将同时购买新的FX-6300或FX-8320,因此所有机器都将有tsc_scale
。
我在网络上有一台带有FX-8320 CPU(也具有该tsc_scale
功能)的计算机(kali )。我已经计划在ganesh上将主zpool升级(从4x1TB RAIDZ升级到镜像的2x4TB)并释放更多的旧磁盘后,立即将其添加到ZVOL + DRBD +实时迁移实验中。在indra和kali之间,或在surya和ganesh之间来回迁移VM。
我的VM实验计划的下一个阶段是编写脚本,以完全自动化设置VM以便在ZVOL上使用DBRD并在主机之间迁移VM的过程。
当我运行良好时,我将废弃它并开始使用ganeti,它已经完成了我计划编写的工作(但更加完整和更好)。
最后,当我厌倦了这一点时,我将切换到openstack并使用cinder进行卷管理。我很想跳过ganeti并直接进入openstack,但是ganeti是一种很酷的技术,我想使用它一段时间。...我已经好几年没有使用它了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句