가상화 · 6 min read · Dec 08, 2025
CentOS 6.3에서 Xen을 이용한 가상화 (파라가상화 및 하드웨어 가상화)
CentOS 6.3에서 Xen을 이용한 가상화 (파라가상화 및 하드웨어 가상화)
버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요
이 튜토리얼은 CentOS 6.3 (x86_64) 시스템에 Xen (버전 4.1.x)을 설치하는 방법에 대한 단계별 지침을 제공합니다.
Xen을 사용하면 호스트 운영 체제(dom0) 아래에서 게스트 운영 체제(*nix 운영 체제인 Linux 및 FreeBSD와 같은)를 생성할 수 있습니다. 이들 게스트 운영 체제를 “가상 머신” 또는 domU라고 부릅니다. Xen을 사용하면 애플리케이션을 서로 독립적인 여러 가상 머신으로 분리할 수 있습니다(예: 메일 서버용 가상 머신, 트래픽이 많은 웹사이트용 가상 머신, 고객 웹사이트를 제공하는 또 다른 가상 머신, DNS용 가상 머신 등). 이렇게 하면 동일한 하드웨어를 사용하면서 비용을 절감할 수 있으며, 더 중요한 것은 보안이 강화됩니다. DNS 서버의 가상 머신이 해킹당하더라도 다른 가상 머신에는 영향을 미치지 않습니다. 또한 가상 머신을 한 Xen 서버에서 다른 서버로 이동할 수 있습니다.
저는 호스트 OS(dom0)와 게스트 OS(domU) 모두에 CentOS 6.3 (x86_64)를 사용할 것입니다.
이 문서는 실용적인 가이드를 목적으로 하며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 다른 많은 문서에서 다루어지고 있습니다.
이 문서는 어떤 종류의 보증 없이 제공됩니다! 이는 이러한 시스템을 설정하는 유일한 방법이 아님을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이 방법이 귀하에게도 작동할 것이라는 보장을 하지 않습니다!
1. 사전 주의 사항
이 가이드는 이미지 기반 가상 머신과 LVM 기반 가상 머신을 설정하는 방법을 설명합니다.
SELinux가 비활성화되었거나 허용 모드인지 확인하십시오:
vi /etc/sysconfig/selinux| # 이 파일은 시스템에서 SELinux의 상태를 제어합니다. # SELINUX=은 다음 세 가지 값 중 하나를 가질 수 있습니다: # enforcing - SELinux 보안 정책이 적용됩니다. # permissive - SELinux가 적용되는 대신 경고를 출력합니다. # disabled - SELinux가 완전히 비활성화됩니다. SELINUX=disabled # SELINUXTYPE= 사용 중인 정책의 유형. 가능한 값은: # targeted - 오직 타겟 네트워크 데몬만 보호됩니다. # strict - 전체 SELinux 보호. SELINUXTYPE=targeted |
/etc/sysconfig/selinux를 수정해야 했다면 시스템을 재부팅하십시오:
reboot2. 네트워크 브리지 생성
가상 머신이 네트워크의 물리적 시스템처럼 다른 호스트에서 접근할 수 있도록 서버에 네트워크 브리지를 설정해야 합니다.
이를 위해 bridge-utils 패키지를 설치합니다…
yum install bridge-utils… 그리고 브리지를 구성합니다. /etc/sysconfig/network-scripts/ifcfg-br0 파일을 생성합니다( /etc/sysconfig/network-scripts/ifcfg-eth0 파일의 IPADDR, PREFIX, GATEWAY, DNS1 및 DNS2 값을 사용하십시오); TYPE=Bridge를 사용하고 TYPE=Ethernet을 사용하지 않도록 하십시오:
vi /etc/sysconfig/network-scripts/ifcfg-br0| DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0" |
/etc/sysconfig/network-scripts/ifcfg-eth0를 다음과 같이 수정합니다(BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1 및 DNS2를 주석 처리하고 BRIDGE=br0를 추가합니다):
vi /etc/sysconfig/network-scripts/ifcfg-eth0| DEVICE="eth0" #BOOTPROTO=none NM_CONTROLLED="yes" ONBOOT=yes TYPE="Ethernet" UUID="73cb0b12-1f42-49b0-ad69-731e888276ff" HWADDR=00:1E:90:F3:F0:02 #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" BRIDGE=br0 |
네트워크를 재시작합니다…
/etc/init.d/network restart… 그리고 실행합니다
ifconfig이제 네트워크 브리지(br0)가 표시되어야 합니다:
[root@server1 ~]# ifconfig
br0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:460 (460.0 b) TX bytes:2298 (2.2 KiB)
eth0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18455 errors:0 dropped:0 overruns:0 frame:0
TX packets:11861 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26163057 (24.9 MiB) TX bytes:1100370 (1.0 MiB)
Interrupt:25 Base address:0xe000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2456 (2.3 KiB) TX bytes:2456 (2.3 KiB)
[root@server1 ~]#3. Xen 설치
먼저 CPU가 하드웨어 가상화를 지원하는지 확인하십시오 - 이 경우 명령어
egrep '(vmx|svm)' --color=always /proc/cpuinfo는 다음과 같은 내용을 표시해야 합니다:
[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
[root@server1 ~]#아무것도 표시되지 않으면 프로세서가 하드웨어 가상화를 지원하지 않는 것입니다. 이는 Xen과 함께 파라가상화만 사용할 수 있음을 의미하며, 하드웨어 가상화는 사용할 수 없습니다.
CentOS 6은 RedHat 6을 기반으로 하며, RedHat은 6 버전에서 Xen에 대한 지원을 중단했으므로, 우리는 제3자 저장소에서 Xen을 가져와야 합니다. 다음과 같이 저장소를 활성화할 수 있습니다:
yum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpm이제 Xen을 설치하려면 다음 명령어를 실행합니다:
yum install kernel-xen xen이렇게 하면 CentOS 시스템에 Xen과 Xen 커널이 설치됩니다.
Xen 커널로 시스템을 부팅하기 전에 GRUB 부트로더 구성을 확인하십시오. /boot/grub/menu.lst를 엽니다:
vi /boot/grub/menu.lst첫 번째로 나열된 커널은 방금 설치한 Xen 커널이어야 합니다:
| [...] title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet initrd /initramfs-2.6.32.57-2.el6xen.x86_64.img [...] |
그 섹션을 수정하여 Xen 하이퍼바이저가 먼저 로드되도록 해야 합니다. kernel /vmlinuz… 줄에서 첫 번째 단어 kernel을 module로 바꾸십시오. 다음 줄에서도 마찬가지로 initrd /initramfs… 줄의 첫 번째 단어를 module로 바꾸십시오. 그런 다음 root 줄 다음에 kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin 줄을 추가하십시오(여러 CPU 코어가 있는 경우 dom0_max_vcpus에 1이 아닌 다른 숫자를 지정할 수 있습니다). 최종 커널 섹션은 다음과 같아야 합니다:
| [...] title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet module /initramfs-2.6.32.57-2.el6xen.x86_64.img [...] |
기본값을 0으로 변경하여 첫 번째 커널(즉, Xen 커널)이 기본적으로 부팅되도록 합니다:
| [...] default=0 [...] |
완전한 /boot/grub/menu.lst는 다음과 같아야 합니다:
| # grub.conf는 anaconda에 의해 생성되었습니다. # 이 파일을 수정한 후 grub를 다시 실행할 필요는 없습니다. # NOTICE: /boot 파티션이 있습니다. 이는 모든 커널 및 initrd 경로가 /boot/에 상대적임을 의미합니다. 예: # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg_server1-LogVol00 # initrd /initrd-[generic-]version.img #boot=/dev/sde default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet module /initramfs-2.6.32.57-2.el6xen.x86_64.img title CentOS (2.6.32-279.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-279.el6.x86_64.img |
재부팅하기 전에 libvirt 및 python-virtinst(나중에 Xen VM을 설치하는 데 사용할 virt-install 도구가 포함되어 있습니다) 패키지를 설치합니다:
yum install libvirt python-virtinstCentOS 6/RedHat 6의 libvirt 패키지는 Xen을 지원하지 않으므로, Xen 지원으로 다시 빌드해야 합니다. 이를 위해 몇 가지 필수 구성 요소를 지금 설치합니다:
yum groupinstall 'Development Tools'yum install python-devel xen-devel libxml2-devel xhtml1-dtds readline-devel ncurses-devel libtasn1-devel gnutls-devel augeas libudev-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl-devel avahi-devel libselinux-devel cyrus-sasl-devel parted-devel device-mapper-devel numactl-devel libcap-ng-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel libblkid-devel scrub우리의 libvirt 버전을 확인해 봅시다:
rpm -qa | grep libvirt[root@server1 ~]# rpm -qa | grep libvirt
libvirt-client-0.9.10-21.el6_3.3.x86_64
libvirt-0.9.10-21.el6_3.3.x86_64
libvirt-python-0.9.10-21.el6_3.3.x86_64
[root@server1 ~]#버전은 0.9.10이므로, 적절한 src.rpm 패키지를 /root/src에 다운로드하고 설치합니다:
mkdir /root/src
cd /root/src
wget http://vault.centos.org/6.3/os/Source/SPackages/libvirt-0.9.10-21.el6.src.rpm
rpm -i libvirt-0.9.10-21.el6.src.rpm마지막 명령은 무시할 수 있는 몇 가지 경고를 표시합니다:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root이제 libvirt 소스에 Xen 지원을 패치합니다:
wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch
cd /root/rpmbuild/SPECS
cp -a libvirt.spec libvirt.spec.orig
patch -p0 < ~/src/libvirt-spec-rhel6-enable-xen.patch이제 새로운 libvirt 패키지를 빌드합니다:
rpmbuild -bb libvirt.spec빌드 프로세스가 끝나면 다음과 같은 내용이 표시됩니다:
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-lock-sanlock-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.9.10-21.el6.x86_64.rpm새 패키지가 생성된 디렉토리(이 경우 /root/rpmbuild/RPMS/x86_64/)로 이동합니다…
cd /root/rpmbuild/RPMS/x86_64/… 그리고 다음과 같이 Xen 지원이 포함된 새로운 libvirt 패키지를 설치합니다:
rpm -Uvh --force libvirt-0.9.10-21.el6.x86_64.rpm libvirt-client-0.9.10-21.el6.x86_64.rpm libvirt-python-0.9.10-21.el6.x86_64.rpm그 후 시스템을 재부팅합니다:
reboot시스템이 이제 새로운 Xen 커널로 자동으로 부팅되어야 합니다. 시스템이 부팅된 후 다음을 실행하여 확인할 수 있습니다:
uname -r[root@server1 ~]# uname -r
2.6.32.57-2.el6xen.x86_64
[root@server1 ~]#정말로 새로운 Xen 커널을 사용하고 있습니다!
이제 다음을 실행하여 Xen이 시작되었는지 확인할 수 있습니다:
xm listDomain-0(dom0)가 나열되어야 합니다:
[root@server1 ~]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 1 r----- 18.9
[root@server1 ~]#이제 xm 명령 대신 virsh 명령을 사용하여 Xen VM을 관리할 것입니다. 이는 libvirt를 사용하고 있으므로 선호되는 방법입니다.
virsh list다음과 같이 표시되어야 합니다:
[root@server1 ~]# virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
[root@server1 ~]#새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.