ganeti
저는 ZFS + DRBD + 라이브 마이그레이션을 시도해 왔습니다( 다시 사용하기 전에 자체 자동화 스크립트를 작성하고 openstack 을 작성할 만큼 충분히 이해하고 싶습니다 cinder
). 공유 저장소에 ZFS + DRBD(이중 마스터 모드)가 있습니다.
그러나 실시간 마이그레이션은 전체 이야기의 일부일 뿐입니다.
libvirt 및 drbd 구성이 동일한 두 개의 호스트가 있고 심지어 동일한 VM ZVOL 개인 "볼륨" 풀(둘 다 2x1TB 미러링 풀 - 이전 백업 풀의 일부 이전 디스크 재사용) 및 동일한 VM 구성( "d- 시험")
"indra"는 ASUS Sabertooth 990FX m/b로 구동되는 16GB RAM을 갖춘 AMD FX-8150입니다.
- CPU 로고:
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
- CPU 로고:
"surya"는 8GB RAM을 갖춘 AMD Phenom II X4 940이며 ASUS M3A79-T DELUXE m/b로 구동됩니다.
- CPU 로고
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
- CPU 로고
libvirt* 2.0.0-1:amd64
둘 다 debian sid를 실행하고, 패키지 버전( 및 포함)이 정확히 동일하며 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 4.6.0-1 커널과 함께 debian sid를 실행하고 있습니다.
Linux dtest 4.6.0-1-amd64 #1 SMP Debian 4.6.3-1 (2016-07-04) x86_64 GNU/Linux
어느 호스트에서든 가상 머신을 시작할 수 있으며 정상적으로 실행됩니다.
아무 문제 없이 가상 머신을 수리야에서 인드라로 마이그레이션할 수 있습니다. indra에서 surya로 가상 머신을 마이그레이션하려고 하면 마이그레이션이 성공적으로 완료된 것처럼 보이지만 가상 머신이 100% CPU 사용량(할당된 단일 코어에 대해)으로 중단됩니다.
VM이 Indra에서 시작된 다음 수리야로 마이그레이션되었는지(멈추는 위치), 수리야에서 시작하고 인드라로 마이그레이션한 다음(지금까지는 괜찮음) 다시 수리야로 이동했는지(멈추는 위치)에는 차이가 없습니다. .
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
수리야에 대한 다음 메시지입니다.
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 버그입니까?
답변1
해결책을 찾았습니다.
내가 의심한 대로 문제의 원인은 tsc_scale
수리야의 CPU에 기능 플래그가 누락되었기 때문이었습니다.
tsc_scale
VM이 없는 호스트 에서 VM이 있는 호스트로 VM을 이동할 수 있지만 VM이 있는 호스트에서 실행 중인 VM은 tsc_scale
이동할 수 있습니다.오직이와 함께 다른 호스트로 마이그레이션하십시오.
이제 버그 보고서를 제출할 시간입니다.
이번에는 surya와 네트워크(내 메인 서버)의 다른 시스템 사이에 ZFS ZVOL을 기반으로 또 다른 DRBD를 만들었습니다 ganesh
.
- ganesh는 ASUS Sabertooth 990FX m/b로 구동되는 32GB RAM을 갖춘 AMD Phenom II 1090T입니다.
- CPU 플래그:
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
- CPU 플래그:
아무 문제 없이 수리야와 가네시 간에 VM을 앞뒤로 마이그레이션할 수 있고 수리야 또는 가네쉬에서 인드라로 VM을 마이그레이션할 수 있습니다. 하지만Indra에서 Surya 또는 ganesh로 가상 머신을 마이그레이션할 수 없습니다..
이제 이걸로 살 수 있어요. 새로운 AMD Zen CPU가 출시되면 ganesh가 업그레이드되고 surya는 ganesh의 현재 마더보드와 RAM을 갖게 됩니다. 동시에 새 FX-6300 또는 FX-8320을 구입할 예정이므로 모든 기계에 해당 기능이 적용됩니다 tsc_scale
.
FX-8320 CPU(해당 기능도 있음)가 있는 네트워크에 다른 컴퓨터(kali)가 있습니다 tsc_scale
. ganesh의 메인 zpool을 업그레이드하고(4x1TB RAIDZ에서 2x4TB 미러로) indra와 kali 사이를 전환할 수 있도록 더 많은 오래된 디스크를 확보하자마자 ZVOL+DRBD+실시간 마이그레이션 실험에 이를 추가할 계획입니다. 또는 surya와 ganesh 간에 가상 머신을 앞뒤로 마이그레이션합니다.
가상 머신 랩 계획의 다음 단계는 ZVOL에서 DBRD를 사용하도록 가상 머신을 설정하고 호스트 간에 가상 머신을 마이그레이션하는 프로세스를 완전히 자동화하는 스크립트를 작성하는 것입니다.
잘 작동하게 되면 이를 폐기하고 내가 작성하려고 했던 작업을 이미 수행하고 있는(그러나 더 완전하고 더 나은) ganeti를 사용하기 시작할 것입니다.
결국 이것에 질리면 OpenStack으로 전환하고 볼륨 관리를 위해 cinder를 사용할 것입니다. ganeti를 건너뛰고 바로 openstack으로 가고 싶은 유혹이 있지만 ganeti는 멋진 기술이고 한동안 가지고 놀고 싶습니다... 몇 년 동안 사용하지 않았습니다.