Microsoft MVP성태의 닷넷 이야기
Windows: 63. 윈도우 서버 2012 - Hyper-V의 새로운 기능 Live Migration [링크 복사], [링크+제목 복사]
조회: 14855
글쓴 사람
정성태 (kevin13@chol.net)
홈페이지
첨부 파일
 

윈도우 서버 2012 - Hyper-V의 새로운 기능 Live Migration

24GB 메모리로 퍽퍽하게 구성했던 테스트 시스템에 64GB 메모리의 시스템이 새롭게 추가되어 마음이 넉넉해졌는데요. ^^

64GB 램을 가진 새로운 작업 PC
; https://www.sysnet.pe.kr/0/0/442

더욱 즐거운 것은, 새롭게 2012에 추가된 "Live Migration" 기능으로 시스템 간 VM 이동이 너무나 간편해졌다는 점입니다. 기존의 Windows Server 2008 R2 에서는 VM 이동을 하려면 우선 VM 인스턴스를 중지시키고 "Export..." 메뉴를 선택하여 내보내기 한 다음, 그것을 대상 컴퓨터에 복사한 후 거기서 다시 "Import Virtual Machine..." 메뉴를 이용하여 가져오기를 하는 복잡한 절차를 거쳤습니다.

그런데, 이제는 Hyper-V 관리 콘솔에서 "Move..." 메뉴를 선택함으로써 VM 이동이 가능하다는 것 자체도 편리한데, 거기에다 VM 인스턴스를 멈출 필요가 없어 서비스가 중지되지 않는다는 대단한 장점이 있습니다. (물론, VMWare 의 vSphere 같은 제품들에서는 이미 지원하던 기능이었지만, Hyper-V는 윈도우 라이선스만 있으면 무료라는 차이점이 있습니다.)

실제로 Live migration을 사용해 보니, 그 관리의 편이성에 웃음이 다 나왔습니다. ^^




우선, Live migration이 되려면 Hyper-V가 설치된 양측 컴퓨터 모두 "Live migration" 설정이 되어 있어야 합니다. 이 말인즉, 양쪽의 컴퓨터 모두 Windows Server 2012 이어야만 가능한 기능입니다.

설정 방법은 Hyper-V 관리자에서 "Enable incoming and outgoing live migrations" 옵션을 켜주시면 됩니다.

hyper-v_live_mig_1.png

세부 옵션을 통해서, 동시 마이그레이션을 할 인스턴스의 수와 IP를 지정할 수 있습니다. 이 중에서 IP 옵션 지정은 쓸만합니다. 왜냐하면, 호스트 머신에서 VM을 위해 할당된 네트워크 카드로 "live migration"을 지정하면 네트워크 대역폭에 문제가 발생할 여지가 있기 때문입니다. VM 인스턴스가 보통 수십~수백GB 에 달하기 때문에, 서비스 중인 VM들의 원활한 통신을 위해서는 별도의 네트워크 카드를 양측 Hyper-V 머신에 추가해서 분리된 네트워크 망을 이용하는 것이 권장됩니다. (또는, cross-cable 등으로 직접 연결하거나.)

참고로, 만약 sender PC에서 "Live migration" 설정이 안된 경우 다음과 같은 오류가 나오고,

Live migrations are not enabled on this computer.

This computer is not configured for live migration of virtual machines. To enable live migration, modify the Hyper-V settings.


receiver PC 에서 설정이 안된 경우에는 다음과 같은 오류가 "Move..." 기능을 사용할 때 발생합니다.

The destination computer "..." is not configured to send or receive live migrations of virtual machines. To fix this problem, modify the Hyper-V settings on the destination computer.

The destination computer is not configured to send or receive live migrations of virtual machines.


그 외, 강제사항은 아니지만 2가지 정도 구성을 맞춰주는 것이 좋은데요. 하나는, Hyper-V 호스트 측의 하드 디스크 구성입니다. 예를 들어, 이동하려는 VM이 sender PC 에서는 "E:\" 드라이브에 있었는데, receiver PC에서는 C와 D드라이브만 있다면 "Move..." 기능 사용시에 다음과 같은 오류 화면이 나옵니다.

There was an error during move operation.

Virtual machine migration operation failed at migration destination.

Failed to create planned Virtual Machine at migration destination.

Failed to create external configuration store at 'E:\...\win2008r2': The system cannot find the path specified.. (0x80070003)


오류라고는 하지만, 위의 메시지를 뿌려준 후 새롭게 복사될 폴더를 지정할 수 있는 화면이 제공되기 때문에 마이그레이션 작업에는 영향이 없지만, 그래도 관리의 편이성을 생각하면 양측 모두 유사한 디스크 환경을 마련해 주는 것이 좋을 듯 싶습니다.

또 다른 하나도 마찬가지 형식의 오류인데요. 보통 Hyper-V 호스트 측에서 네트워크 카드를 VM 측에 가상화로 제공해 주면서 "Virtual Switch"를 만드는데, sender PC 의 Hyper-V에서는 "TestNet" 이라는 이름으로 제공한 경우, receiver PC의 Hyper-V 에 그 이름의 "Virtual Switch"가 없다면 오류가 발생합니다. 역시나 오류 화면이 뜨지만, receiver PC에서 제공되는 "Virtual Switch"를 지정할 수 있는 화면이 이어서 제공되기 때문에 마이그레이션을 계속할 수는 있지만, 관리상으로 보면 둘 다 똑같은 것이 좋기 때문에 역시 맞춰주는 것이 좋겠습니다.

이것으로 양측의 hyper-v 에 대한 설정은 끝이 납니다.




이후, live migration을 하는 것은 너무나 쉽습니다. sender PC 측의 hyper-v 관리자에서 대상 VM을 선택하고 "Move..." 메뉴를 선택하는 것으로 시작되는데요.

hyper-v_live_mig_2.png

VM 을 옮길 것인지 / VM에 속한 storage 파일(예: vhd)을 옮길 것인지를 선택할 수 있습니다.

hyper-v_live_mig_3.png

제 경우에는 VM으로 진행하고, 각각의 VM 이 별도의 폴더로 관리되도록 "Move the virtual machine's data by selecting where to move the items." 옵션을 선택했습니다.

hyper-v_live_mig_4.png

마지막으로, VHD 파일은 VM 과 같은 경로에 놓이도록 "Move the virtual machine's data automatically"로 지정하면,

hyper-v_live_mig_5.png

이후, VM 이 대상 Hyper-V 머신으로 이동을 합니다. 물론 ^^ 번개처럼 이동하지는 않기 때문에 다음과 같이 진행상태를 Hyper-V 관리 콘솔을 이용해서 확인할 수 있고,

hyper-v_live_mig_6.png

위의 작업이 모두 완료되면, 원본 Hyper-V 에서는 VM이 자동으로 삭제되고, 대상 Hyper-V 에서 VM 이 서비스를 계속하게 됩니다.

오~~~ 너무 멋지지 않나요? ^^





[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 9/27/2012 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:kevin13@chol.com

비밀번호

댓글 쓴 사람
 



2012-09-26 11시26분
[Lyn] 와... 이게 된단말이에요?
[손님]
2012-09-27 12시30분
"Lyn" 님... 그러게요. 이런게 된다네요. ^^ 세상 많이 좋아졌습니다.
정성태
2012-09-27 03시59분
[Lyn] 글을 읽으면서 제 머리속에선 "이런걸 주문받았으면 내가 구현할 수 있었을까?" 라는 함수에서 No를 리턴하고 있습니다 (...)
[손님]
2012-09-27 01시40분
^^ 운영체제 기술을 가지고 있다는 것이 대단한 것 같습니다.
정성태
2012-09-28 02시56분
[wafe] 이번에 윈도우8을 깔고 Hyper-V 세팅을 해 봤는데 Move... 메뉴가 있더군요. 윈8에서도 되나 보죠?
[손님]
2012-09-29 02시08분
"wafe"님 덧글 보고 ^^ 윈도우 8을 살펴봤는데, Live migration 기능이 부분적으로 제공됩니다. 즉, Storage 만 옮길 수 있는 것으로, 운영 중에 VHD 파일만 다른 서버로 옮기는 것이 가능합니다. 그렇게 되면, 해당 VHD 파일을 기반으로 대상 서버에서 다시 VM 을 만들어 주는 식으로 복원이 됩니다. 윈도우 8 이 클라이언트 운영체제라는 것을 감안하면, 그 정도 기능이면 충분하지 않을까 싶습니다. ^^
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
11872정성태4/17/201958.NET Framework: 819. (번역글) .NET Internals Cookbook Part 4 - Type members파일 다운로드1
11871정성태4/16/201995.NET Framework: 818. (번역글) .NET Internals Cookbook Part 3 - Initialization tricks [3]파일 다운로드1
11870정성태4/16/201946.NET Framework: 817. Process.Start로 실행한 콘솔 프로그램의 출력 결과를 얻는 방법파일 다운로드1
11869정성태4/15/201998.NET Framework: 816. (번역글) .NET Internals Cookbook Part 2 - GC-related things파일 다운로드1
11868정성태4/15/201969.NET Framework: 815. CER(Constrained Execution Region)이란?파일 다운로드1
11867정성태4/15/201962.NET Framework: 814. Critical Finalizer와 SafeHandle의 사용 의미파일 다운로드1
11866정성태4/9/2019106Windows: 159. 네트워크 공유 폴더(net use)에 대한 인증 정보는 언제까지 유효할까요?
11865정성태4/9/201937오류 유형: 529. 제어판 - C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools is not accessible.
11864정성태4/9/201936오류 유형: 528. '...' could be '0': this does not adhere to the specification for the function '...'
11863정성태4/9/201968디버깅 기술: 127. windbg - .NET x64 EXE의 EntryPoint
11862정성태4/7/2019103개발 환경 구성: 437. .NET EXE의 ASLR 기능을 끄는 방법
11861정성태4/6/201987디버깅 기술: 126. windbg - .NET x86 CLR2/CLR4 EXE의 EntryPoint
11860정성태4/5/201983오류 유형: 527. Visual C++ 컴파일 오류 - error C2220: warning treated as error - no 'object' file generated
11859정성태4/4/201983디버깅 기술: 125. WinDbg로 EXE의 EntryPoint에서 BP 거는 방법
11858정성태3/27/2019138VC++: 129. EXE를 LoadLibrary로 로딩해 PE 헤더에 있는 EntryPoint를 직접 호출하는 방법파일 다운로드1
11857정성태3/26/2019161VC++: 128. strncpy 사용 시 주의 사항(Linux / Windows)
11856정성태3/25/201994VS.NET IDE: 134. 마이크로소프트의 CoreCLR 프로파일러 리눅스 예제를 Visual Studio F5 원격 디버깅하는 방법파일 다운로드1
11855정성태3/25/201988개발 환경 구성: 436. 페이스북 HTTPS 인증을 localhost에서 테스트하는 방법
11854정성태3/25/2019111VS.NET IDE: 133. IIS Express로 호스팅하는 사이트를 https로 접근하는 방법
11853정성태3/24/2019183개발 환경 구성: 435. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면? - 두 번째 이야기
11852정성태3/20/2019184개발 환경 구성: 434. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면?파일 다운로드1
11851정성태3/19/2019180Linux: 8. C# - 리눅스 환경에서 DllImport 대신 라이브러리 동적 로드 처리
11850정성태3/18/2019234.NET Framework: 813. C# async 메서드에서 out/ref/in 유형의 인자를 사용하지 못하는 이유
11849정성태3/18/2019172.NET Framework: 812. pscp.exe 기능을 C#으로 제어하는 방법파일 다운로드1
11848정성태3/17/2019156스크립트: 14. 윈도우 CMD - 파일이 변경된 경우 파일명을 변경해 복사하고 싶다면?
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...