Xen은 리눅스 커널에서 사용할 수 있는 가상화 기술로서 원래 시스템에 피해를 주지 않고도 기존 환경에서 리눅스가 실행되는 것처럼 새로운 업그레이드를 마무리 및 테스트할 수 있는 기술이다. 이 글에서 Fedora Core를 사용하여 Xen을 설치하는 방법을 설명하겠다. 설치한 후에는 어느 배포판의 Xen이나 똑같이 작동된다. 리눅스의 가상화를 연구하고 새로운 소프트웨어의 테스트에 샌드박스를 사용할 때의 이점과 이 샌드박스를 같은 리눅스 박스에 여러 가상 머신들을 실행하는 장소로 사용하는 것에 대해 설명하겠다.


기존 소프트웨어의 꾸준한 향상과 버그 픽스(bug fixes)가 이루어지는 오픈 소스 세계는 유동적이다. 최첨단 소프트웨어 업그레이드는 전력 투구해야 하는 작업이다. 소프트웨어 업그레이드의 난점은 업그레이드가 완료된 후에 애플리케이션이 어떻게 작동할지 예상할 수 없다는 점이다. 대부분의 소프트웨어 패키징 시스템은 롤백(rollback) 기능을 제공하지만 이것으로 충분하지 않다. 새로운 업데이트들을 아무것에도 영향을 끼치지 않는 환경에서 테스트 및 실행해보는 것이 가장 이상적일 것이다.


운동장에 뛰노는 아이들처럼, 여러분에게도 마음껏 뛰놀 수 있는 샌드박스(sandbox)라는 것이 있다.


가상화(Virtualization)는 애플리케이션과 시스템을 같은 하드웨어에 있는 다른 것들과 분리시키는데 활용된다. 리눅스는 하드웨어 에뮬레이터(hardware emulators )부터 순수한 하드웨어 가상화까지 여러 가지 형태의 가상화를 지원한다. 최근 급부상하고 있는 기술이 캠브리지 대학교에서 개발한 Xen이다. Xen은 전대미문의 퍼포먼스와 보안성 때문에 주목을 끌고 있다.


Xen


캠브리지 대학교의 연구 프로젝트로 개발된 Xen은 오픈 소스 커뮤니티에서 많은 도움을 받았다. Xen은 paravirtualizing VMM (Virtual Machine Monitor)이다. OS가 선택 영역에서 변경되어 하이퍼바이저(hypervisor)로 호출되지만, 그 OS에서 실행되는 애플리케이션은 변경되지 않는다. VMWare 같은 가상화 시스템이(실행 OS를 변경할 필요가 없는) 진정한 가상화를 표방하지만, 퍼포먼스에 영향을 미칠 수 있는 머신 코드는 여전히 변환해야 한다.


Xen은 변경된 OS가 필요하기 때문에, Xen 아키텍쳐로 포팅되지 않는 한 현재 리눅스 커널을 Xen 하이퍼바이저(hypervisor)에서 실행할 수 없다. 하지만 현재 시스템이 Xen 아키텍쳐로 포팅된 새로운 리눅스 커널을 사용할 수 있다면 기존 시스템을 변경 하지 않고 실행할 수 있다.


그림 1. Xen 아키텍쳐
The simple Xen architecture

Xen 찾기


Xen의 소스 코드는 프로젝트 페이지(참고자료)를 참조하기 바란다. 리눅스를 이미 실행하고 있다면, 패키지 업데이트 또는 설치를 통해 Xen을 설치할 수 있다. 다음은 Xen을 포함하고 있는 배포판이다.



여러분의 배포판을 체크하라. 위 리스트에 있는 것이 아니라면, 소스코드를 직접 사용해야 한다. 배포판의 설치 프로시저 외에도 어떤 배포판의 Xen에서도 모든 것이 똑같이 작동한다.


Fedora Core


내 컴퓨터는 Fedora Core 3을 실행하고 있기 때문에, Fedora Core를 설치하여 실행하는 것에 대해 설명하겠다.


Fedora는 Xen 사용자 커뮤니티를 이미 형성하고 있다. 비록 패키지들은 최근에야 개발 채널로 옮겨졌다. Fedora에서 Xen을 사용하는 사람들이 많기 때문에, 온라인에서 많은 성공 스토리를 참조할 수 있다.

















위로



Xen 설치하기


빠른 설치와 실행을 위해 이 섹션에서는 참고자료 섹션의 Quick Start Guide에 초점을 맞추겠다. Quick Start Guide도 매번 변경된다.


이 기본 머신에 최소한의 서버를 설치하는 것으로 시작한다. 기본 머신은 하이퍼바이저(hypervisor)이고, 어떤 서버 애플리케이션도 실행하지 않는다. 이 머신 상단에서 실행되는 Xen 서버에 원하는 패키지들을 설치할 기회가 생길 것이다. 그렇게 되면 아직 실행하지 않아도 되는 애플리케이션은 설치 할 필요가 없다.


시스템을 실행시켰다면 Fedora의 최신 개발 버전(rawhide)으로 업데이트 해야 할 것이다. /etc/yum.repos.d/ 디렉토리의 엘리먼트로 가서 fedora-devel.repo를 제외한 모든 것을 enabled=0으로 변경한다. fedora-devel.repo는 enabled=1로 변경한다.


이제 여러분만의 yum 리파지토리(repository)가 설정 되었으니, 머신을 업데이트하여 최신 Xen 릴리스를 사용할 수 있다.


Listing 1. FC3를 업데이트하여 Xen 패키지 설치하기




yum update

yum install xen kernel-xen0 kernel-xenU



다음에는 더미 파일시스템(dummy filesystem)을 만든다.


Listing 2. Xen 서버 파일시스템 포맷팅 및 설치




mkdir -p /xen/base
dd if=/dev/zero of=/root/base.img bs=1M count=1 seek=1024
mkfs.ext3 /root/base.img
mount -o loop /root/base.img /xen/base


Xen 서버 파일시스템이 포맷 및 마운트(mount) 되면, 이 파일시스템에서 실행될 패키지들을 설치한다. Xen 서버에서 웹 서버를 실행하려면, 웹 서버 패키지 세트를 설치해야 한다. (경고: 시간이 조금 걸린다. yum을 실행시킨 다음 산책을 다녀와라.)


Listing 3. Xen 서버 패키지 설치하기




yum --installroot=/xen/base -y groupinstall web-server \
--enablerepo=base --disablerepo=development


(잘 되었는지 확인하라.)


이제 모든 패키지들을 설치했지만, 간단한 fstab 파일을 살펴봐야 한다. 이것은 Xen 서버들에게 루트(root) 장치 sda1이 될 것을 말해준다. 이 루트 디바이스는 실제로 하이퍼바이저(hypervisor)에서 온 가상화된 장치이다. 하지만 여러분의 서버는 이것을 인식하지 못한다.


Listing 4. Xen 서버 fstab 파일




/dev/sda1		/		ext3	defaults	1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0


정상적인 Fedora 설치 없이는 어떤 fstab도 만들어지지 않는다. Fedora의 향후 버전에는 이 문제를 다루는 툴이 포함될 것이다.


마지막으로 시스템을 올바르게 실행할 해킹 작업이 필요하다. Xen은 현재 initrd 문제가 있다. 따라서 시스템을 부팅하려면 몇 가지 장치 코드를 만들어야 한다. 그런 다음 원활히 작동하도록 하기 위해 TLS 라이브러리를 이동한다. 이들은 Xen과의 인터랙팅(interact)이 잘 안된다. 그럴 경우 이 파일시스템을 언마운트(unmount) 할 수 있다.


Listing 5. 마지막 해킹




for i in console null zero ; do MAKEDEV -d /xen/base/dev -x $i ; done

mv /lib/tls /lib/tls.disabled
mv /xen/base/lib/tls /xeb/base/lib/tls.disabled

umount /xen/base/


















위로



Xen 실행하기


힘들게 설정했기 때문에 머신을 재부팅하고, Xen 커널을 사용하기 시작한다. 아마도 과도한 프린트아웃을 보게 될 것이다. TLS 라이브러리에 대한 무시무시한 메시지도 보게 될 것이다. (그 메시지 때문에 이전 섹션으로 다시 가야 할지도 모른다.)


Xen에는 실행하는 각 서버 마다 설정 파일이 필요하다. 모든 서버에 하나의 동적 설정 파일을 만들 수 있지만, 두 개의 정적 설정 파일을 만들 것을 권한다. 여러분도 알다시피, 이 디스크 레이블은 파일 이미지가 sda1 장치라는 것을 알려준다.


Listing 6. Xen 서버 설정 파일




/etc/xen/base
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "BaseServer"
nics = 1
disk = ['file:/root/base.img,sda1,w']
root = "/dev/sda1 ro"

/etc/xen/test
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "TestServer"
nics = 1
disk = ['file:/root/test.img,sda1,w']
root = "/dev/sda1 ro"



서버를 실행하려면 xend start 명령어로 Xen 서비스를 시작하고, xm create base 명령어로 베이스 config 파일에서 BaseServer를 만든다. 이렇게 하면 Xen 게스트가 될 수 있고 부팅된 것을 볼 수 있다. 게스트 콘솔(guest console)에서 나가려면 Ctrl-]을 누르고 하이퍼바이저 콘솔(hypervisor console)로 간다.

















위로



Xen 사용하기


이제 설정을 편집하고 시스템이 두 개의 Xen 서버를 실행하도록 설정할 것이다. 이런 힘든 작업에 대한 보상은 무엇일까?


같은 커널에서 실행되는 시스템이 두 개가 되었다. BaseServer가 웹 서비스를 정상적으로 실행하기 원하는 안정적인 환경을 나타낸다면 TestServer는 Fedora가 제공하는 최신 소프트웨어 업데이트를 나타낸다. 이 테스트서 시스템을 지속적으로 업그레이드 하여, 모든 새로운 버전의 소프트웨어를 업데이트 한다. 이 TestServer를 BaseServer로서 실행할 수 있다.


BaseServer 설정하기


BaseServer가 실행될 때가 아파치 httpd 서비스를 설정할 좋은 때이다. ssl.conf 파일을 /etc/httpd/conf.d/ 디렉토리에서 빼내어 ssl을 종료한다. 그렇지 않으면 이 서버에 대한 인증을 만들어야 한다. 또한 아파치 사용자를 이 시스템에 추가해야 한다.


Xen 하이퍼바이저(hypervisor)는 가상 네트워크 장치를 자동으로 제공한다. 이 서비스에서 dhcp를 실행할 수 있다면, dhclient eth0만 실행하라. BaseServer에 대한 IP 주소가 생긴다.


TestServer 설정하기


BaseServer를 설정했다면 BaseServer 콘솔에서 poweroff를 실행하여 인스턴스(instance)를 중지한다. BaseServer에서 이미 로그아웃 했다면 xm console BaseServer를 사용하여 액세스 권한을 다시 얻는다.


cp /root/base.img /root/test.img를 사용하여 기본 이미지 파일을 복사하여, 같은 파일시스템의 중복 파일을 가질 수 있다. xm create -c test를 실행할 때 BaseServer와 같은 서버를 실행한다. 이를 TestServer라 한다. TestServer에 로그인하여 Xen 설치하기 섹션에서 했던 것과 같이 지원한다. 그리고 yum update를 실행한다.


TestServer 인스턴스(instance)는 BaseServer와 같은 구성을 갖지만, Fedora가 제공하는 최신 패키지로 업그레이드 한다. 여기에서 웹 사이트가 작동하는지를 확인한다.

















위로



맺음말


간단한 설명과 예제로 Xen을 설치하여 시행하는데 도움이 될 수 있길 바란다. LVM의 활용법이나 머신 간 Xen 서버의 네트워크 마이그레이션 방법은 다루지 않았다. Xen에 대한 자세한 내용은 아래 참고자료 섹션을 참조하기 바란다.

리눅스 Xen. xenU 커널 활용

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다