Microsoft MVP성태의 닷넷 이야기
Windows: 63. 윈도우 서버 2012 - Hyper-V의 새로운 기능 Live Migration [링크 복사], [링크+제목 복사]
조회: 22787
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)
(시리즈 글이 10개 있습니다.)
Windows: 63. 윈도우 서버 2012 - Hyper-V의 새로운 기능 Live Migration
; https://www.sysnet.pe.kr/2/0/1356

개발 환경 구성: 211. Hyper-V - Generation 2 유형의 VM 생성 시 ISO 부팅이 안된다면?
; https://www.sysnet.pe.kr/2/0/1603

개발 환경 구성: 236. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법
; https://www.sysnet.pe.kr/2/0/1742

개발 환경 구성: 317. Hyper-V 내의 VM에서 다시 Hyper-V를 설치: Nested Virtualization
; https://www.sysnet.pe.kr/2/0/11218

개발 환경 구성: 405. Hyper-V 가상 머신에서 직렬 포트(Serial Port, COM Port) 사용
; https://www.sysnet.pe.kr/2/0/11720

.NET Framework: 798. C# - Hyper-V 가상 머신의 직렬 포트와 연결된 Named Pipe 간의 통신
; https://www.sysnet.pe.kr/2/0/11722

디버깅 기술: 169. Hyper-V의 VM에 대한 메모리 덤프를 뜨는 방법
; https://www.sysnet.pe.kr/2/0/12284

개발 환경 구성: 608. Hyper-V 가상 머신에 Console 모드로 로그인하는 방법
; https://www.sysnet.pe.kr/2/0/12859

개발 환경 구성: 664. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/13246

Windows: 259. Hyper-V Generation 1 유형의 VM을 Generation 2 유형으로 바꾸는 방법
; https://www.sysnet.pe.kr/2/0/13564




윈도우 서버 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이 서비스를 계속하게 됩니다.

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





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

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/24/2024]

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

비밀번호

댓글 작성자
 



2012-09-26 11시26분
[Lyn] 와... 이게 된단말이에요?
[guest]
2012-09-27 12시30분
"Lyn" 님... 그러게요. 이런게 된다네요. ^^ 세상 많이 좋아졌습니다.
정성태
2012-09-27 03시59분
[Lyn] 글을 읽으면서 제 머리속에선 "이런걸 주문받았으면 내가 구현할 수 있었을까?" 라는 함수에서 No를 리턴하고 있습니다 (...)
[guest]
2012-09-27 01시40분
^^ 운영체제 기술을 가지고 있다는 것이 대단한 것 같습니다.
정성태
2012-09-28 02시56분
[wafe] 이번에 윈도우8을 깔고 Hyper-V 세팅을 해 봤는데 Move... 메뉴가 있더군요. 윈8에서도 되나 보죠?
[guest]
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)
13498정성태12/23/20232810닷넷: 2186. 한국투자증권 KIS Developers OpenAPI의 C# 래퍼 버전 - eFriendOpenAPI NuGet 패키지
13497정성태12/22/20232291오류 유형: 885. Visual Studiio - error : Could not connect to the remote system. Please verify your connection settings, and that your machine is on the network and reachable.
13496정성태12/21/20232305Linux: 66. 리눅스 - 실행 중인 프로세스 내부의 환경변수 설정을 구하는 방법 (gdb)
13495정성태12/20/20232315Linux: 65. clang++로 공유 라이브러리의 -static 옵션 빌드가 가능할까요?
13494정성태12/20/20232497Linux: 64. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) - 두 번째 이야기
13493정성태12/19/20232535닷넷: 2185. C# - object를 QueryString으로 직렬화하는 방법
13492정성태12/19/20232259개발 환경 구성: 699. WSL에 nopCommerce 예제 구성
13491정성태12/19/20232231Linux: 63. 리눅스 - 다중 그룹 또는 사용자를 리소스에 권한 부여
13490정성태12/19/20232337개발 환경 구성: 698. Golang - GLIBC 의존을 없애는 정적 빌드 방법
13489정성태12/19/20232132개발 환경 구성: 697. GoLand에서 ldflags 지정 방법
13488정성태12/18/20232066오류 유형: 884. HTTP 500.0 - 명령행에서 실행한 ASP.NET Core 응용 프로그램을 실행하는 방법
13487정성태12/16/20232379개발 환경 구성: 696. C# - 리눅스용 AOT 빌드를 docker에서 수행 [1]
13486정성태12/15/20232193개발 환경 구성: 695. Nuget config 파일에 값 설정/삭제 방법
13485정성태12/15/20232088오류 유형: 883. dotnet build/restore - error : Root element is missing
13484정성태12/14/20232160개발 환경 구성: 694. Windows 디렉터리 경로를 WSL의 /mnt 포맷으로 구하는 방법
13483정성태12/14/20232295닷넷: 2184. C# - 하나의 resource 파일을 여러 프로그램에서 (AOT 시에도) 사용하는 방법파일 다운로드1
13482정성태12/13/20232810닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232261개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232575개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232282개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232464닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232199닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232257닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232117개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
13473정성태12/5/20232306닷넷: 2179. C# - 값 형식(Blittable)을 메모리 복사를 이용해 바이트 배열로 직렬화/역직렬화파일 다운로드1
13472정성태12/4/20232133C/C++: 164. Visual C++ - InterlockedCompareExchange128 사용 방법
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...