검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 시스템
참조 원문 : 20 essential virtualization tips & techniques
관련 글 : 우분투 10.10에서 KVM으로 가상화 돌리기

  가상화에 있어서 제품이나 벤더와는 무관한 보편적이고 기본적인 팁을 소개합니다. 단, 몇 가지는 VMware에 한정된 내용입니다. 이 팁들은 성능 향상과 관련된 내용이 주를 이루며 VM(가상 머신)의 수가 50개 이상인 중대형급 규모에서 효과적입니다.

1. 일회성 시스템에 VM을 활용하라
  VM은 하니팟, 악성 코드 테스트 시스템에 사용하기에 최적입니다. 템플릿으로부터 VM을 만들어('호스트 시스템을 계속 패치하라'참조) 그런 격리용 시스템으로 활용하는 것은 좋은 방법입니다. 바이러스가 악성 코드를 다룰 때는 네트워크 인터페이스를 비활성화하여 VM 내에서만 활동하게 할 수 있습니다. 이 목적을 위해 윈도우 VM을 사용할 경우 시스템 복구 기능을 꺼서 시스템을 다시 켰을 때 테스트 중에 변경하거나 파괴했던 파일들이 계속 남아있지 않도록 합니다.

2. VM 템플릿을 활용하라
  VM 템플릿은 가상화 관리자로 하여금 새로운 VM을 빠르고 일관성 있게 설치할 수 있도록 해줍니다. 템플릿이란 패치, 업데이트, 게스트 OS에 필요한 프로그램을 포함하여 설치해서 바로 사용할 수 있도록 만든 VM을 뜻합니다.

3. VM 호스트 만들기
  가상 호스트 하드웨어는 64비트의 멀티 프로세서, 여러 VM을 지원하기 위한 대용량 램, 확장성을 위한 거대한 디스크 공간, 기가비트 네트워크 인터페이스로 구성되어야 합니다. VM 트래픽 처리와 격리된 백업 인터페이스를 위해 다수의 네트워크 인터페이스가 필요합니다. 대부분의 서버급 하드웨어는 이런 조건에 만족합니다. 만약 구형 장비를 사용한다면 최소한 64비트의 멀티프로세서 사용 여부, 8GB 이상으로 램 확장 가능 여부를 확인해야 합니다. 8GB는 가상 호스트 시스템으로써 최소 조건에 속합니다.

4. 가상 디스크에 Thick 프로비저닝을 사용하라
  새로운 VM을 프로비저닝하거나 VM을 위한 새로운 디스크를 생성할 때 성능이 중요하거나 디스크 내용이 자주 변경될 거라면 Thick 프로비저닝을 사용합니다. Thick 프로비저닝이란 가상 디스크에 공간을 할당할 때 고정으로 할당하는 것을 뜻합니다. 예를 들어 30GB의 가상 디스크를 만든다면 스토리지 풀에서 정확히 30GB의 용량을 사용하는 겁니다. 이것의 반대 개념으로는 Thin 프로비저닝(=동적 확장 디스크)이 있습니다. 이것은 처음 만들 때 최소의 용량만 사용하고 데이터가 증가함에 따라 그에 맞춰 사용량도 증가하며 만들 때 지정한 크기까지 확장이 가능한 방식을 뜻합니다. Thin 프로비저닝은 디스크 공간을 아낄 수 있지만 성능이 떨어집니다. 그러므로 가상 디스크에 최적화된 성능이 필요하거나 쓰기 작업이 자주 일어날 경우에는 Thick 프로비저닝을 사용하는 것이 좋습니다.

5. 작업량이 많다면 디스크 이미지를 다른 곳에 나눠서 저장하라
  VM이 성능이 많이 떨어진다면 디스크 이미지들을 서로 다른 스토리지 공간에 저장합니다. 예를 들어 OS, 데이터 스토리지, 로그에 각각 하나씩 가상 디스크를 사용하고 있고 그 가상 디스크 3개를 모두 동일한 LUN에 있는 디스크들에 저장한 데이터베이스 시스템이 있다면 3개의 가상 디스크를 각각 다른 LUN에 있는 디스크들에 저장하여 성능을 높일 수 있습니다.

6. 물리적인 머신과 동일한 보안 규칙을 적용하라
  VM이라고 해서 물리적인 실제 머신과 보안적으로 다를 건 없습니다. 패치, 서비스 팩, 업데이트 등 모든 면에서 물리적인 시스템과 동일하게 VM을 보호해야 합니다. 안티 바이러스 스포트, 안티 스파이웨어 소프트, 방화벽 역시 모두 필요합니다. 사용하지 않는 서비스는 제거하거나 비활성화시키고 안전한 프로토콜만 허용해야 합니다. 모든 서비스에 대해 가능한 보안적인 버전을 사용하도록 합니다. 예를 들어 Telnet, RCP, FTP, HTTP 대신 SSH, SCP, SFTP, HTTPS를 사용합니다.

7. SAN 스토리지
  거대한 가상화 시스템은 SAN 스토리지 없이는 이뤄질 수 없습니다. SAN(Storage Area Network)은 현대의 서버 시스템들이 디스크 공간을 사용하는 방법 중 하나입니다. 거대한 디스크 어레이들이 HBA(Host Bus Adapter), 광 케이블, SAN 스위치들을 통해 시스템과 연결됩니다. SAN 시스템은 데이터베이스, 로그 등 쓰기 속도가 중요한 프로그램에 알맞은 수준의 빠른 디스크 액세스를 제공합니다. 디스크로는 SCSI와 SATA가 있는데 SCSI의 성능이 더 좋습니다. 둘이 동시에 쓰이는 경우도 자주 있지만 용도는 서로 다릅니다. SCSI 기반의 SAN과 SATA 기반의 SAN 모두 듀얼 광채널 설정으로 인해 다양한 RAID 구성이 가능하고 SPOF(Single Point of Failure: 죽으면 시스템 전체가 서비스 불능이 되는 부분)의 존재를 막을 수 있어 로컬 디스크 스토리지보다 뛰어납니다.

8. P2V 마이그레이션과 서비스
  가동 중인 물리적인 시스템을 가상 시스템으로 마이그레이션하기 전에 물리적인 시스템의 모든 서비스를 비활성화시켜 파일시스템의 컨텐츠에 변화를 모두 반영시키고 더 이상 변화가 일어나지 않도록 만듭니다. 데이터베이스, 주요 서비스, 로그는 파일시스템에 계속해서 쓰기 작업을 진행하기 때문에 마이그레이션으로 인해 VM과 물리적인 시스템의 불일치가 발생할 가능성이 있습니다. 변환 과정에서 약간의 불일치는 감수해야겠지만 최소화해야 합니다. 물리적인 시스템을 가상 시스템으로 변환할 때 부팅 가능한 변환용 디스크(bootable conversion disk: 마이그레이션 툴이 있는 부팅 가능한 CD)를 사용한다면 물리적인 시스템의 OS가 정지한 상태로 마이그레이션이 진행되기 때문에 변환 전에 서비스를 비활성화시킬 필요가 없습니다. 이 방법은 빠르고 효율적이지만 VM으로 변환할 시스템에 대해 물리적인 접근을 할 수 있어야 합니다.

9. VMware ESX/vSphere에서는 VMXNET 타입2나 타입3 네트워크 어댑터는 사용하라
  새로운 윈도우 VM을 생성하거나 P2V(Physical to Virtual) 마이그레이션을 진행할 때 새로 생성한 VM의 네트워크 인터페이스 드라이버는 범용성을 이유로 AMD PCNET이나 E1000으로 잡힐 겁니다. VM의 OS가 구형(윈도우 NT, 윈도우 2000, 윈도우 9x)이라거나 꼭 이 드라이버를 사용해야 할 이유가 있는 것이 아니라면 드라이버를 VMXNET 2나 VMXNET 3를 바꾸는 것이 좋습니다. 이 드라이버들은 더욱 실제 물리적인 장비의 드라이버처럼 작동합니다. P2V 마이그레이션에서 이전에 존재하던 드라이버가 VM으로 옮겨가서 IP 주소 정보를 입력할 때 IP 주소 충돌 경고가 발생하는 경우가 있습니다. 예전 드라이버들은 VM에 숨겨진 하드웨어로 이전됩니다. 이런 드라이버들을 VM에서 완전히 삭제하려면 다음 과정을 진행합니다.
1. 커맨드 프롬프트를 열어 아래의 명령어를 입력한다.
SET DEVMGR_SHOW_NONPRESENT_DEVICES = 1 <ENTER>

2. 계속해서 아래의 명령어를 입력한다.
DEVMGMT.MSC <ENTER>

3. View를 눌러 Show Hidden Devices를 선택. Network Adapters를 찾아 회색으로 된 물리 장치를 제거한다.

10. VMware에서 SAN 포맷팅
  VM에 SAN을 사용하기 위해 포맷을 할 때 해당 LUN에 존재할 가장 큰 크기의 가상 디스크 파일을 수용할 수 있도록 최대한 큰 블록 크기를 사용합니다. VMFS-3는 VMFS의 현재 버전으로 리눅스의 ext3와 동일한 기능과 한계점을 가지고 있습니다. VMFS-3에서 가장 큰 단일 파일의 크기는 2TB입니다. 파일 사이즈에 대한 VMware의 블록 사이즈는 아래와 같습니다.
Largest file    VMFS block size
256 GB          1 MB
512 GB          2 MB
1024 GB         4 MB
2048 GB         8 MB
  만약 알맞은 블록 크기를 선택하지 않는다면 해당 LUN에 있을 수 있는 단일 파일의 최대 크기가 제한됩니다. 예를 들어 1MB의 블록 크기로 포맷된 LUN에는 300GB의 가상 디스크 파일이 존재할 수 없습니다. 실제로 여유 공간이 충분한데도 불구하고 장치에 공간이 충분하지 않다는 에러 메시지를 보게 됩니다.

11. 가상 네트워크로 실제(Production) 네트워크를 복제하라
  물리적인 인프라스트럭쳐를 가상 인프라스트럭쳐로 마이그레이션 할 때 디자인과 레이아웃도 가상이 물리를 흉내내서 구현되어야 합니다. 기업용 가상화 소프트웨어는 완벽한 마이그레이션을 위해 가상 스위치, 가상 LAN(VLAN), 사설 네트워크를 생성할 수 있습니다. 모든 경로와 트래픽 흐름을 복제하기 위해 물리적/논리적 네트워크 다이어그램을 분석해야 합니다.

12. 가상화 도구, 성능 향상 프로그램, 게스트 부가 프로그램을 설치하라
  게스트 부가 프로그램에는 VM 성능 향상, 마우스 포인터 통합, 디스플레이 드라이버, 게스트-호스트 시간 동기화 유틸리티 소프트웨어가 포함되어 있습니다. 대부분의 OS마다 각각의 게스트 부가 프로그램이 존재합니다. 꼭 필요하진 않지만 VM 성능과 사용성에 있어서 차이가 큽니다.

13. VM의 화면 보호기를 꺼라
  VM은 화면 보호기가 필요 없습니다. 화면 보호기는 시스템 자원(CPU)을 소모하며 특히 3차원 화면 보호기의 경우 더욱 그렇습니다. 리소스를 잡지 않는 화면 보호기 방식이 필요하다면 '비어 있음(blanking)'을 사용하세요.

14. 호스트 하드웨어에 최신 BIOS 업데이트를 설치하라
  정기적으로 제조사의 웹사이트를 확인해서 시스템 BIOS(Basic Input/Output System) 업데이트를 하여 가상 호스트의 하드웨어에 최신의 시스템 향상 업데이트를 적용합니다. BIOS 업데이트는 자주 있지 않기 때문에 업데이트를 위한 총 다운타임 역시 크지 않습니다. BIOS 업데이트는 가상화 지원, 새로운 장치 지원, 성능 향상 같은 신기능을 제공합니다. 업데이트를 하기 전에 업데이트 유틸리티를 통해 현재 BIOS를 백업하도록 합니다. 잘못된 업데이트나 업데이트 실패는 시스템 BIOS를 다시 설치하기 전까지 시스템을 사용하지 못하게 만듭니다.

15. 서버끼리의 통신을 위해 사설 네트워크를 개설하라
  VM끼리 통신을 위해 사설 응용 네트워크를 개설하는 것은 가상화에 특화된 기능입니다. 이 서버 간의 통신은 가상 호스트 시스템 내부에 존재하기 때문에 매우 빠르고 안전하여 여러 단계를 거치는 프로그램들(multi-tiered applications)을 사용하는데 최적입니다. 엔드 유저가 백엔드 데이터베이스를 직접 접근해야 할 일은 거의 없기 때문에 이런 접근 방식은 프로그램하고만 통신하는 격리된 데이터베이스에 최적의 솔루션입니다.

16. 가능하다면 존(Zone)을 활용하라
  완전한 가상화 게스트 대신 존을 사용하면 더 높은 유연성과 성능을 얻을 수 있으며 자원을 더 현명하게 사용할 수 있습니다. 게다가 사용에 특별한 하드웨어를 필요로 하지도 않습니다. 리눅스 시스템에서 존을 사용하려면 새로운 OpenVZ 커널이 필요합니다. 차선책으로는 기능상 존과 비슷한 chroot의 'jails'는 더 간단하고 더 적은 시스템 개입을 제공합니다. OS 레벨의 가상화라고도 불리는 존은 공유된 커널 환경에서 프로그램을 실행할 수 있는 격리된 유저 공간의 인스턴스를 제공합니다. 프로그램은 마치 하나의 독립된 시스템에서 유일하게 실행되는 것처럼 동작합니다.

17. 호스트 시스템을 계속해서 패치하라
  VM은 관리자와 사용자가 계속해서 사용하는 시스템이기 때문에 패치와 업데이트를 해야 한다는 사실을 기억하기가 쉽습니다. 그와 반대로 호스트 시스템은 패치와 업데이트를 하는 것을 잊어버리기 쉽습니다. 대부분의 가상 시스템은 호스트 레벨에서 침입을 당합니다. 패치하지 않은 호스트는 해커의 1차 대상이 됩니다. 호스트 시스템이 믿을 수 있는 저장소로부터 정기적으로 업데이트를 받도록 설정합니다. 호스트 시스템이 침입당했다는 것은 그 안에 있는 모든 VM이 해킹, 크랙, 셧다운, 제거를 당할 수 있다는 것이기 때문에 호스트 레벨에서 패치되지 않은 취약점은 극히 위험합니다.

18. VM에 큰 변화를 일으키기 전에는 스냅샷이나 클론을 떠라
  변화는 모든 서버 환경에서 일어나는 일이지만 이에 있어서 VM은 물리적인 시스템에 비해 한 가지 장점을 가지고 있습니다. VM 어떤 큰 변화를 주기 전에 스냅샷이나 클론을 떠서 상태를 보존해놓을 수 있습니다. 거대한 환경에서라면 모든 VM에 대해 그런 일을 할 수 없겠지만 중요한 VM들에 대해 이것은 일반적인 백업을 대체할 수 있으며 속도도 훨씬 빠릅니다. 전통적인 클로닝 방법으로는 VM을 종료한 후 단순히 VM이 있는 디렉토리를 복사를 하는 겁니다. 예를 들면 '# cp -Rp Ubuntu_10.04 Ubuntu_10.04_Backup'처럼 말이죠. 이 명령어로 'Ubuntu_10.04' 디렉토리 전체를 퍼미션을 유지한 체 복사함으로써 나중에 VM을 원래의 상태로 복구할 수 있게 됩니다. 복구를 할 때는 원래 디렉토리를 지우고 복사해놨던 디렉토리의 이름만 원래 디렉토리 이름으로 바꾸면 됩니다.

19. VM을 삭제할 때 VM 디스크 이미지도 삭제하라
  VM을 삭제할 때 가상 디스크 이미지도 삭제하지 않으면 디스크 공간을 낭비하게 되고 스토리지가 사용하지 않는 디스크 이미지들로 난장판이 됩니다. 가상 머신을 삭제할 때 해당 가상 머신의 모든 가상 디스크를 함께 삭제하여 사용하지 않는 가상 디스크가 남는 것을 방지해야 하며 스크립트를 통해 주기적으로 스토리지에 검사하여 사용하지 않는 가상 디스크가 있는지 확인해야 합니다. 예를 들어 이 스크립트는 윈도우의 PowerShell 스크립트로서 사용하지 않는 VMware용 가상 디스크를 찾는 작업을 수행합니다.

20. 게스트의 시간을 호스트의 시간에 동기화
  시간 동기화는 시스템과 가상화 관리자에게 있어서 골칫거리 문제입니다. 네트워크 시간 프로토콜(NTP: Network Time Protocol)은 시스템 시간 동기화에 대한 해결책입니다. 하지만 그보다 더 쉬운 방법이 있습니다. 게스트와 호스트 간의 동기화는 여러 방법을 통해 해결할 수 있습니다. 게스트 부가 프로그램('가상화 도구, 성능 향상 프로그램, 게스트 부가 프로그램을 설치하라' 참조)을 설치하여 시간 동기화를 할 수도 있지만 게스트 OS 레벨에서 동기화를 해결할 수도 있습니다. 아래에서 2가지 방법을 설명하고 있습니다. 첫 번째는 젠(Xen) 호스트에 있는 리눅스 게스트를 호스트에 맞춰 동기화하는 겁니다.
# echo 0 > /proc/sys/xen/independent_wallclock
  위 명령어의 효력은 리붓 전까지만 유효합니다. 따라서 /etc/sysctl.conf 파일에 아래의 줄을 추가해서 리붓 후에도 계속 동기화를 하도록 만듭니다.
xen.independent_wallclock=0
  두 번째로 VMware 게스트 툴을 설치한 VMware 게스트는 호스트와 시간을 동기화하는 옵션을 사용할 수 있게 됩니다.

2010/12/19 19:35 2010/12/19 19:35