가상화에 대해서 관심은 점점 증대되지만, 제대로 알고 있는 경우는 많지 않은 것 같습니다. 이번 글에서는 가상화에 대해 탐구를 해보도록 하겠습니다.
수년 간 하드웨어 성능은 놀랄만큼 향상 되었습니다. 이런 향상된 서버의 자원을 제대로 활용하는지 들여다보면, 대부분의 경우는 15-20% 이상의 CPU, 메모리 자원밖에 사용하지 않은 걸 쉽게 알 수 있습니다. 서버 1대가 차지하는 전원, IDC 공간, 관리 노력 등을 생각하면 큰 손실이 아닐 수 없습니다. 이런 서버를 여러개의 조각으로 나누어 활용할 수 있다면, 즉 3-4대의 서버를 한 대의 물리적 서버로 운영할 수 있다는 이야기가 되겠지요.
간단히 말해서, 가상화는 한 대의 컴퓨터에 여러개의 OS를 구동하도록 하는 기술이라고 할 수 있습니다. 마이크로소프트는 워크스테이션을 위해 Virtual PC 프로덕트를 출시했고, 최근에는 서버를 위해 Virtual Server 2005와 2005 R2를 출시했습니다. 여기서는 IT 부서에서 얻을 수 있는 여러가지 이점과 Virtual Server의 아키텍쳐에 대해 설명하도록 하겠습니다.
Virtual Server 2005는 본질적으로 윈도우 서버 2003에서 구동됩니다. Virtual Server를 사용하면 64개의 가상머신(VM)까지 올릴 수 있고, 개별 가상머신은 별개의 OS를 구동합니다.
Figure 1. (Virtual Server Architecture)

가상화 아키텍쳐
한대의 서버위에 4개의 OS가 있는 것을 봐주시기 바랍니다. (한개의 호스트 OS와 세개의 가상머신)
각 VM은 별개의 물리적 하드웨어에서 돌아가는 것처럼 완전히 분리되어 있습니다. 가상화 계층, 즉 Virtual Server 2005 서비스가 VM과 실제 하드웨어 사이의 통신(call)을 중계합니다.
여기서, 이런 의문이 들 수 있겠죠? 성능에 문제가 없나요? 가상화를 사용할 때 CPU, 메모리, 디스크, 네트웍의 오버헤드가 분명히 있을 것 같은데요? (때때로, 이것을 가상화 세금이라고 합니다).
가상화의 오버헤드에 대해서는 특별히 알려지지 않았고, 여러분 서버에서 가장 사용량이 많은 업무에 가상화를 사용해도 문제가 없다는 것을 알게 될 것입니다. 물론, 확장성과 성능 테스트는 당연히 해봐야겠죠. 엔터프라이즈의 미션 크리티컬한 업무에 가상화를 사용하고 있는 예를 얼마든지 찾아볼 수 있습니다.
Virtual Server 2005는 윈도우 서버 2003과 윈도우 XP 프로페셔널에서 사용할 수 있습니다.(XP는 운영서버로 지원되지 않습니다) 워크스테이션 위에 하나 또는 2-3개의 가상 머신을 구동하기 원하면 Virtual PC를 사용하면 됩니다. Virtual Server 2005는 웹 기반의 관리 인터페이스가 필요하고, 호스트 OS에 IIS가 설치되어야 하며 Virtual Server를 리모트에서 관리하기 위해서는 vmrc.exe가 설치되어야 합니다.
전체적인 가상 머신의 성능은 호스트 컴퓨터의 물리적인 CPU, 메모리, 하드디스크 스펙에 의해 좌우됩니다. 마이크로소프트는 인텔과 AMD의 단일, 멀티코아 CPU를 지원하고 Virtual Server 2005 R2는 x64 비트 윈도우를 지원합니다. 최소 CPU 속도는 550MHz 이지만, 1.0GHz이거나 넘는 CPU를 추천합니다.
설치와 설정
가상머신 배포를 계획할 때, 호스트 서버의 물리적 RAM이 가장 중요한 고려요인 입니다. 각 게스트 OS에 어느 정도의 메모리를 할당 할 지 생각해야 합니다. 그리고 Virtual Server 2005는 설정할 때 32MB의 물리적인 메모리가 필요하다는 것을 기억하십시요. 그리고, 실제 메모리를 초과해서 할당할 수 없습니다. (가상머신에 할당된 총 메모리의 합은 서버의 물리적 메모리를 초과할 수 없다) 가상 머신의 수는 가용한 시스템 자원에 따라 달라지지만, 이론적 한계는 64개 입니다.
Virtual Server 2005를 설치하는 것은 쉽습니다. 인스톨러가 설치해줍니다. 한가지, IIS가 설치되어 있어야 합니다. 설치 중 새로운 Virtual Server 관리 웹사이트가 설정됩니다. (포트 1024) 또한, Virtual Server 서비스가 서버에 추가됩니다. Virtual Server에 접근하려면 Virtual Server Admin 웹사이트 Shortcut 아이콘을 이용하거나, 브라우저에 http://Servername:PortNumber/VirtualServer/VSWebApp.exe로 연결할 수 있습니다.
Figure 2. Virtual Server 2005 관리 웹사이트

디폴트 셋팅으로도 Virtual Server 2005는 사용 준비가 되었지만, 몇 가지 셋팅을 바꿔보겠습니다.
첫째, Virtual Machine Remote Console (VMRC)를 활성화 하겠습니다. 설치 중인동안 가상머신과 통신할 수 있게해줍니다. 둘째, 서버에 검색 경로를 설정해야 합니다. 가상머신 하드 디스크와 설정파일을 어디에 저장할 지를 알려줍니다. 추가로, VM 셋업 옵션과 웹사이트 자동 리프레쉬 간격을 설정할 수 있습니다.
가상머신 설정
여러가지 면에서, 가상머신을 실제 물리적인 서버처럼 다뤄야 합니다. 각 VM은 개별 OS 라이센스가 필요하고, 물리적 서버와 똑같은 운영 및 관리가 필요합니다. 새로운 VM을 생성하는 것은 쉽습니다. Virtual Machine의 왼쪽 메뉴에서 VM 생성을 클릭하면 되고, VM의 이름, 기본 메모리, 가상 하드디스크와 네트웍 셋팅을 해주면 됩니다. (Figure 3)

Figure 3 가상머신 생성
다음 단계는 OS를 설치하는 것입니다. 미디어를 이용해서 설치할 수도 있고, Virtual Server 2005는 VM에 ISO 디스크 이미지 파일을 설정하거나, 호스트 컴퓨터의 플로피, CD, DVD 드라이브를 사용할 수도 있습니다. 또는 설치 시간을 단축하기 위해 마이크로소프트의 ADS(Automated Deployment Services) 툴을 이용할 수 있습니다. OS를 설치한 후에는 Virtual Machine Additions를 설치해야 합니다.VM Additions은 OS의 성능을 향상시켜주고, 게스트 및 호스트 OS간 BIOS 클락 동기화, 마우스 위치 보정 등을 도와줍니다.
자, 이제 VM을 사용할 준비가 됐습니다. 이제 이게 가상머신이라는 것을 잊어버려도 됩니다. (서비스팩 및 업데이트를 설치하셔야 합니다). 이제 이 VM을 가지고 Virtual Hard Drive(.vhd)파일로 만들어서 다음 가상머신 배포에 활용하시면 됩니다. (각 인스턴스는 개별 라이센스가 필요하다는 것을 기억하세요.)
가상머신 관리하기
웹 기반의 관리툴을 이용하여 VM의 하드웨어 설정을 쉽게 변경할 수 있습니다. 하드디스크를 추가하거나, 네트웍 어댑터 설정, 메모리 조정등. 어떤 변경은 시스템 실행 중 바꿀 수 있으나, 어떤 값들은 VM을 리부팅이 필요합니다. (Figure 4)

Figure 4 Virtual Machine 속성들
VM을 켜고 끄는데 여러가지 옵션이 있습니다. Reset은 물리적인 기계의 전원을 켜고 끄는 것과 유사합니다. 일반적으로 게스트 OS를 Shutdown (윈도우 게스트 OS를 셧다운), Save State(스탠바이 모드) 할 수 있습니다. 게스트 OS에서 Shutdown, Restart, Stand by, Hibernate 등의 명령어를 사용할 수도 있습니다.
Virtual Server 2005에서는 VM의 위치를 쉽게 이전할 수 있습니다. 먼저, VM의 설정파일의 위치를 잘 기록하세요. 디폴트 폴더는 C:\Documents and Settings\All Users\Documents\ folder, 이곳 입니다.
VM을 옮기기 전에, 반드시 shutdown 하거나 save state 하셔야 합니다. 실제 작업은 파일을 옮기는 것과 동일하고, 적절한 .vmc 설정파일을 추가하기만 하면 됩니다. 만약 .vhd 파일의 경로가 변경되면, 새로운 위치를 수작업으로 변경해 주어야 합니다. Source와 destination 서비스들은 같은 프로세서 타입이어야 하며, 만약 다르다면 게스트 OS의 설정을 조정해주어야 합니다.
Virtual Hard Disks(VHD)
처음에는 다양한 옵션이 조금 혼란스러울 수 있지만, Virtual Server의 강점은 virtual hard disk의 설정을 바꿀 수 있는데 있습니다. Virtual 디스크는 virtual IDE나 SCSI 컨트롤러에 붙일 수 있습니다. Virtual Server 2005는 다음의 5가지 형태를 지원합니다.
1. 동적으로 확장
- 물리적 디스크 공간을 호스트에만 할당하는 방식. 가상머신에 10G의 디스크 공간을 할당해도, 실제로는
호스트 OS에 3G만 사용하고, 사용량이 늘어날 때 추가로 할당하는 방식
2. 고정사이즈
- 물리적 하드디스크에 할당된 공간을 그대로 사용하는 방식. 파일을 확장하는데 오버헤드가 없으므로 고정
디스크 방식의 성능이 더 좋음.
3. 연계 (Linked)
- 호스트 컴퓨터의 전체 물리적 하드디스크를 가리키도록 함. 현재의 물리적 하드 디스크를 virtual hard
disk로 전환하는 프로세스에서 주로 사용됨
4. Undo
- 변화가 virtual disk에 직접 쓰이지 않도록, 별도의 파일에 변화를 저장하는 방식
5. Differencing
- 모든 차이를 새로운 가상 디스크에 기록함으로써 디스크의 계층화를 생성해 줌 (Figure6. 참조)
Differencing 디스크는 여러분에게 기본 .vhd (예를들면 OS)를 만들고, 이후에 발생하는 값은 새로운 가상 디스크에 씁니다. Differencing 디스크는 별도의 어플리케이션이나 설정들을 저장하고 있을 것입니다. 여러가지 복잡하고 유용한 시나리오로 활용할 수 있겠지요. Figure6은 Differencing 디스크가 어떻게 계층화를 생성하여 사용될 수 있는지 보여줍니다. 여러분은 Inspect Virtual Disk 명령어를 이용하여 하드디스크의 타입을 바꿀 수 있습니다. (고정 및 동적 타입을 변경하거나, 동적 가상디스크의 사용하지 않는 공간 회수 등)

Figure 6 Differencing Disk 계층
Virtual Networks
Virtual Server는 유연한 네트웍 설정 옵션을 제공합니다. 각 VM은 4개의 네트웍 어댑터까지 할당 가능하고, 각 어댑터는 별개의 Virtual 네트웍에 연결될 수 있습니다. 새로운 가상 네트웍을 만들 때, 여러분은 호스트 컴퓨터의 물리적 네트웍 어댑터에 가상 네트웍을 연결할 수 있습니다. 이것이 VM을 물리적 네트웍의 일부가 되게 하고, 유일한 IP 어드레스를 할당할 수 있도록 해줍니다. 또한 VM들이 서로 통신하거나, 통신하지 못하도록 설정할 수 있습니다.
Virtual Server 2005는 내장 DHCP(Dynamic Host Configuration Protocol) 서버를 제공하므로, 네트웍 설정을 쉽게 해줍니다. (Figure 7) 또한, VM의 개별 설정값 변경을 통해 가상 네트웍의 인터페이스 카드(NIC)의 MAC 어드레스를 설정할 수도 있습니다.

Figure 7. DHCP 속성 설정
성능 튜닝
Virtual Server는 시스템 자원을 설정 및 할당할 수 있는 다양한 옵션을 제공합니다. 호스트와 게스트 OS를 모니터링 할 수 있는 Performance Monitor counter를 사용할 수 있고, 2개의 Windows Management Instrumentation(WMI) 기반의 객체를 지원합니다.
VirtualMachine for 모니터링 (디스크,메모리, CPU 및 다른 성능 통계값)과 VirtualNetwork for 모니터링 (네트웍 관련된 통계값)이 그것 입니다.
Virtual Server 관리자 사이트의 Resource Allocation 페이지를 통해 CPU 로드를 관리할 수 있고, 각 VM이 사용가능한 총 프로세서의 양을 조정할 수도 있습니다.
네트웍 측면에서는 Gigabit 이더넷 네트웍 인터페이스 카드를 사용하여 전체적인 성능을 획기적으로 향상시킬 수 있습니다. 여러개의 VM을 돌린다면, 게스트 OS당 100Mb 연결밖에 사용할 수 없지만, 성능은 눈에 뛰게 좋아집니다.
대부분의 가상화 환경에서 디스크 처리량은 가장 중요한 병목 현상의 원인이 됩니다. (다양한 가상 OS들이 같은 디스크 자원을 사용하려고 하므로)
호스트 서버가 표준 IDE를 사용하는 것보다는 Serial-ATA 디스크가 더 나은 성능을 보이고, SCSI 하드디스크가 제일 좋은 성능을 나타냅니다. RAID 기반의 파일시스템을 사용하거나, 별개의 디스크 콘트롤러 및 축(Spindles)을 추가하거나, 네트웍 기반의 스토리지 시스템을 사용하면 디스크 성능을 획기적으로 향상시킬 수 있습니다. Virtual Server 2005 RTM 버전이 .vhd, .vmc를 저장하는데 Storage Area Network), NAS(Network Attached Storage)등의 Native Support는 아니지만, 사용할 수 있습니다. 성능 향상을 위한 이런 작업들은 실제 운영환경에 적용하기 위해서는 철저히 검증하여야 합니다.
스크립팅과 자동화
웹 기반의 관리 툴은 몇 대의 서버의 수 개의 VM을 셋업하는 것까지는 괜찮지만, 여러 다양한 옵션을 자동화 하고 스케쥴링하는게 훨씬 편리할 것입니다.Virtual Server 2005는 여러가지 반복되는 작업을 스크립트화 할 수 있도록 해줍니다. 이 모델은 Virtual Server 프로그래머 가이드에 문서화 되어 있습니다. (Virtual Server 설치 시 자동으로 인스톨 되어 있음)
로컬 서버의 VM의 시작하는 간단한 스크립트 입니다.
Set objVirtualServer = CreateObject( _
"VirtualServer.Application")
Set colVirtualMachines = _
objVirtualServer.VirtualMachines
Dim objVirtualMachine
For Each objVirtualMachine in _
colVirtualMachines
objVirtualMachine.Startup()
WScript.Sleep(10000)
Next
이 스크립트는 VM의 콜렉션을 루핑돌면서, 시작 명령어를 보내줍니다. 10초간 중지했다가 다시 동작합니다. 서버 부담을 줄이기 위해서겠죠. 물론 Virtual Server 기반의 어플리케이션을 .NET Framework을 사용해 개발할 수도 있습니다.
또한, 특정 VM에 이벤트가 발생했을 때 구동하는 커맨드라인 스크립트를 만들 수도 있습니다. 예를들면, VM의 전원이 나갔을 때나, 디스크 부족 에러가 발생했을 때 통보하도록 하는 경우 등입니다.
이정도로 설명을 마치겠습니다.
감사합니다.