강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

[SULINUX 강좌#13] 가상머신 관리하기(KVM)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

[SULINUX 강좌#13] 가상머신 관리하기(KVM) 





가상화(가상장치 관리자)

 

SULinux는 가상화 하이퍼바이저로 KVM을 제공합니다. KVM(Kernel-based Virtual Machine)은 레드햇 2008년에 인수한 Qumranet에서 2006년에 전가상화 방식을 사용하여 개발한 하이퍼바이저입니다. KVMCPU에서 가상화(Intel-VT, AMD-V)를 지원해야 합니다. KVM20072월에 릴리즈 된 Kernel 2.6.20부터 커널 메인라인에 들어간 커널 모듈형태입니다. 호스트 서버에서 보면 게스트 서버는 하나의 프로세스로 간주되기 때문에 오버헤더가 거의 없어 전가상화와 반가상화의 장점만 모아놓은 하이퍼바이저로 평가됩니다.

KVMLinux, BSD, Solaris, Windows, Haiku, ReactOS, Plan 9, AROS Research Operating System등 다양한 게스트 OS를 지원하며, QEMU-KVM을 이용하면 Mac OS X 또한 게스트 OS로 지원합니다.

 

KVM은 특정 장치에 대해 반가상화(Paravirtualization)를 제공합니다. VirIO 프레임 워크를 사용하여 반가상화 이더넷 카드, 반가상화 Disk I/O 컨트롤러, 메모리 사용량 조정을 위한 풍선(balloon) 장치를 제공합니다. SPICE 또는 VMware 드라이버를 사용하여 VGA 그래픽 인터페이스 반가상화를 지원합니다.

 

리눅스 커널은 커널 모드와 사용자 모드로 구분됩니다. KVM은 리눅스에서 사용하는 모드를, 가상화를 위해 하나 더 추가 하였습니다. 그것이 게스트 운영체제 실행에 사용되는 게스트 모드입니다. 이 모드에서는 가상머신이 자체 커널 모드와 사용자 모드를 가질 수 있습니다. KVM은 에뮬레이션을 수행하지 않는 대신 단순히 /dev/kvm 인터페이스를 노출합니다. 가상머신 프로세스는 게스트 모드에서 실행되어 /dev/kvm 인터페이스를 통해서만 메모리 주소공간을 가집니다. 그리고 /dev/kvm 인터페이스를 통해 펌웨어 이미지를 공급받고, 시뮬레이션된 I/O 제공하며, 비디오 데이터를 호스트 머신에 표시합니다.

(참고자료 : http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine)

 

사용자 모드

(응용프로그램)

 

 

게스트 운영체제

 

 

사용자 모드

(응용프로그램)

(가상머신)

QEMU

/dev/kvm

 

 

하이퍼바이저

하드웨어

 

KVM을 이용하여 단일 서버에 여러 개의 가상 서버를 운영하는 것을 가상화(virtualization)라고 합니다.

 

 

 

가상화가 가지는 특징들은 다음과 같습니다.

- native hardware에 근접한 성능

- 물리적 호스트간 운영 중인 가상 머신의 실시간 이전

- 뛰어난 하드웨어 지원

 

가상화의 장점들은 다음과 같습니다.

- 서버 통합

- 서버 자원 활용성 증대

- 동시에 여러 개의 OS 시스템을 하나의 호스트 머신에서 구동

- 하나의 하드웨어 플렛폼에서 다양한 어플리케이션 사용

- 커널 개발 등 개발 용도로 활용

- 클러스터 컴퓨팅

 

 

 

시작하기

 

(1) CPU 가상화 모드 지원 확인

 

앞에서 설명하였듯 KVMCPU에서 가상화를 지원해야합니다. 컵퓨터의 CPU가 가상화를 제공하는지는 CPU 제조사 사이트의 CPU 스펙을 통해서 확인 할 수 있으며, 다음 리눅스 명령어를 통해서도 확인 할 수 있습니다.

 

[root@SULinux-Virt ~]# egrep "vmx|svm" /proc/cpuinfo

 

위 명령은 CPU정보를 담고 있는 cpuinfo 파일에서 "vmx" 또는 “svm" CPU 플래그를 확인한 것입니다. 둘 중 하나는 있어야 가상화를 지원하는 CPU라고 볼 수 있습니다. 만약 플래그가 확인 되었는데도 KVM이 작동하지 않는다면, BIOS에서 CPU 가상화 기능을 활성화 해 주어야 합니다.

 

 

(2) 가상화 프로그램 설치

 

SULinux Server는 가상화 관련 패키지가 초기에 모두 설치됩니다. 다음과 같은 패키지 그룹의 패키지들이 설치됩니다.

Virtualzation 그룹 :

- qemu-kvm : KVM의 사용자 공간 구성요소

Virtualzation Client 그룹:

- python-virtinst : 가상머신을 설치하기 위한 Python 모듈 및 유틸리티

- virt-manager : 가상머신 매니저 프로그램(GUI)

- virt-viewer : 가상머신 뷰어

- virt-top : top과 비슷한 가상머신 상태를 확인하기 위한 CUI 프로그램

Virtualzation Platform 그룹:

- libvirt : 간단한 가상화 API를 제공하기 위한 라이브러리

- libvirt-client : 사용자 환경에서의 libvirt 라이브러리 및 유틸리티

 

(3) libvirtd 시작

 

하이퍼바이저 관리를 위해 "libvirtd" 데몬을 실행시켜 줍니다.

[root@SULinux-Virt ~]# systemctl start libvirtd

 

 

(4) 네트워크 브릿지 설정

 

가상머신을 생성하고 기존 네트워크 인터페이스를 공유하는 경우가 많이 있습니다. 이러한 경우 브릿지를 생성해 주어야 합니다. 브릿지를 생성하지 않으면 하나의 호스트 머신위에 올라가는 여러 가상머신사이의 통신이 되지 않습니다. 물론 호스트 머신과 가상머신 사이에도 통신이 되지 않습니다. 다음과 같이 브릿지를 생성합니다.

 

/etc/sysconfig/network-scripts/ifcfg-br0 파일을 생성하여 다음과 같이 편집합니다.

DEVICE=br0

ONBOOT=yes

TYPE=Bridge

IPADDR=IP주소

NETMASK=넷마스크

NETWORK=네트워크주소

GATEWAY=기본게이트웨이 주소

 

위에서 생성할 br0 인터페이스와 연결될 실제 인터페이스를 다음과 같이 설정합니다.

/etc/sysconfig/network-scripts/ifcfg-eth1 파일을 편집하여 다음과 같이 수정합니다.

DEVICE=eth1

ONBOOT=yes

BRIDGE=br0

위와 같이 설정하면 실제 인터페이스 eth0과 연결되는 브릿지 인터페이스 br0를 설정하는 것입니다. 위와 같이 설정하였다면 다음과 같이 네트워크를 재시작합니다.

[root@SULinux-Virt ~]# systemctl restart network

 

위와 같이 설치가 되었다면, KVM의 가상머신, 가상 스토리지, 가상 네트워크등 대부분의 자원 및 기능을 libvirt를 통해 관리하게 될 것입니다. libvirtvirt-manager에 인터페이스를 제공하게 되고 이 virt-manager를 이용하여 편리하게 가상화를 관리할 수 있습니다.

 

 

가상머신 생성 및 게스트 OS 설치

 

(1) 가상머신 생성

 

가상머신을 생성하는 방법은 여러 가지가 있지만 위에서 설치한 virt-manager를 사용하여 가상머신 생성 및 게스트 OS를 설치해 보도록 합니다.

 

먼저 Xwindow 상태에서 가상머신 관리자를 실행 시켜 보도록 합니다.

[root@SULinux-Virt ~]# virt-manager

이 가상머신 관리자는 libvirtAPI를 이용하여 하이퍼바이저(Xen, KVM)를 관리합니다. 여러 하이퍼바이저에 접속할 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644998796_7423.png
 

위 그림은 가상머신 관리자를 실행 시킨 메인 화면입니다. 먼저 localhost의 하이퍼바이저에 연결합니다. 이후 새로운 가상머신을 생성하기 위해 를 클릭합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998811_9704.png 

가상머신의 이름을 입력하고, 운영체제를 설치하는 방법을 선택합니다. 운영체제를 설치하는 방법은 다음과 같다. 여기서는 다운로드 받아놓은 운영체제 설치CDISO이미지를 사용하기로 합니다.

로컬설치매체 : 운영체제의 ISO이미지 또는 로컬 DVDROM를 이용한 설치

네트워크 설치 : 운영체제 설치 파일이 있는 서버에 HTTP, FTP, NFS 프로토콜을 이용하여 설치

네트워크 부트 : PXE를 이용한 네트워크 부트

기본 디스크 이미지 : 이미 운영체제가 설치된 디스크 이미지를 불러 온다. 이 방법은 다음에 나오는 디스크 이미지를 생성하지 않고 기존에 사용되던 이미지를 이용하여 가상머신을 생성하는 방법

 

8981409a36269487e41dd29ffd6a290d_1644998864_0937.png

 

 

설치 방법을 ISO 이미지 또는 CDROM을 선택하였기 때문에 위와 같이 로컬 CDROM 또는 ISO 파일을 선택할 수 있습니다. 이미 서버에 다운로드 받아놓은 경로를 검색하여 위 그림과 같이 지정해 줍니다.

다음으로 운영체제 종류를 선택합니다. Windows, UNIX, Solaris, Linux, Others를 선택할 수 있습니다. 다음으로 각 운영체제의 버전을 선택합니다. 운영체제의 버전까지 선택하는 이유는 운영체제의 버전에 따라 지원하는 가상장치가 다르기 때문에 최적화시키기 위해 버전까지 선택합니다. 만약 설치하고자 하는 운영체제의 버전이 없다면 비슷하거나 낮은 버전을 선택하면 무난하게 설치할 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644998881_136.png
 

CPU와 메모리를 할당합니다. KVM은 호스트 머신의 CPU 및 메모리용량 보다 더 많이 가상 머신에 할당할 수 있은 오버커밋(overcommit) 기능을 제공합니다. KVM은 가상CPU160개 까지 할당 할 수 있습니다. 그렇지만 호스트 머신의 CPU코어 수 보다 많이 할당할 경우 성능이 저하 될 수 있습니다. 메모리의 경우도 호스트 머신의 메모리 보다 더 많은 양을 할당할 수 있으나, 메모리 부족이 발생할 수 있으니 주의합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998895_5426.png
 

 

가상 디스크 이미지를 생성하는 단계입니다. 호스트 머신의 기본 저장소에 이미지를 생성할 수 있으나 다른 저장소 선택 및 가상화 이미지의 종류를 선택하기 위해 관리중이거나 기존의 저장소 선택에서 검색을 클릭 합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998909_1912.png
 

 

관리중인 저장소가 나타났습니다. 저장소(Storage Pool)를 추가/제거/관리하기 위해서는 가상머신 관리자의 메인 화면에서 "편집“ > ”Connection Details" > "저장소를 선택하여 관리할 수 있습니다. 생성할 수 있는 저장소의 종류는 다음과 같습니다.

dir : 일반적인 파일시스템의 디렉토리 (기본값)

disk : 물리적인 디스크 드라이브

fs : 미리 포맷된 블록 디바이스

iscsi : iSCSI Taget

logical : LVM 로지컬 볼륨

mpath : 멀티페스 디바이스 에뮬레이터

netfs : 네트워크 디렉토리

scsi : 스카시 호스트 아답터

새 볼륨을 선택하여 새로운 저장소를 생성합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998924_637.png
 

 

가상 디스크 이미지 파일이름을 작성하고, 이미지 형식을 설정합니다. virt-manager에서 선택할 수 있는 가상화 디스크 이미지 형식은 다음과 같습니다.

raw : row 디스크 이미지 포맷(기본값), 이 포맷은 구조가 간단하여 다른 에뮬레이터에도 쉽게 적용됩니다. 대상 파일시스템이 홀(hole)들을 지원한다면(예를 들면 리눅스의 ext2, ext3 윈도우의 NTFS) 기록된 섹터들만 공간을 차지할 것입니다. 실제로 기록된 크기를 알기 위해서는 qemu-img info 또는 "ls -ls" 명령을 사용하면 됩니다.

 

qcow2(QEMU Copy On Write) : 현재 사용되는 QEMU의 이미지 형식으로서 가장 많은 기능을 가지는 포맷입니다. 윈도우와 같이 대상 파일시스템이 홀을 지원하지 않는 경우 더 작은 크기의 이미지를 생성하거나, 선택적인 AES 암호화, zlib 기반 압축, 다중 VM 스냅샷 생성 등의 목적으로 사용할 수 있습니다.

 

qed(QEMU Enhanced Disk) : 새로운 QEMU의 향상된 이미지 형식입니다. QCOW2를 비롯한 다른 가상화 디스크 포맷보다 빠르게 디자인되었습니다. 현재 버전은 완전히 비동기 I/O패스를 지원하고, 강력한 무결성을 제공합니다. 또한 Backing 파일과 Sparse 파일을 지원합니다.

 

가상화 디스크 이미지 형식은 현재 가장 많이 사용되는 qcow2를 선택합니다. 가상화 이미지의 최대 용량을 설정합니다. qcow2는 가상머신에서 가상 디스크에 기록이 될 때 이미지용량이 증가됩니다. 그렇기 때문에 물리적인 디스크 용량을 효율적으로 사용할 수 있습니다.

 

 

가상화 디스크 이미지 최대 크기를 설정한다. GiB단위로 설정하며, 현재 20G를 설정하였지만 가용공간과 필요한 공간을 확인하여 설정한다. 앞에서 선택한 qcow2에 의해 사용하는 만큼 이미지 파일 크기가 증가하기 때문에 많이 설정하여도 무관할 것입니다.

 

8981409a36269487e41dd29ffd6a290d_1644998940_4704.png
 

 

새롭게 생성한 볼륨을 선택합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998954_1372.png
 

 

마지막 단계로 설정한 내역을 확인합니다. “완료를 선택하게 되면, 가상머신 관리자는 가상화 디스크 이미지를 생성하고 가상머신을 설정한 다음 가상 머신을 실행시켜 앞에서 설정한 운영체제 이미지를 로드 시켜 다음과 같이 게스트 운영체제를 설치할 수 있습니다.

8981409a36269487e41dd29ffd6a290d_1644998968_4572.png
 

(2) 가상머신에 OS 설치

 

8981409a36269487e41dd29ffd6a290d_1644998982_2089.png
 

 

위 와같이 게스트 운영체제 설치 화면이 나타나면 각 게스트 운영체제의 설치 방법에 따라 설치를 진행합니다.

 

8981409a36269487e41dd29ffd6a290d_1644998995_9513.png
 

 

가상머신이 실행되면 가상머신 관리자의 메인 화면에는 실행중인 가상머신이 위 그림과 같이 나타나게 됩니다. 참고로 위 그림은 보기 메뉴에서 보여주는 항목을 더 많이 보여주도록 설정한 것입니다.

 

 

 

(3) 가상머신 확인

 

가상머신에 대한 설정내역은 /etc/libvrit/qemu/ 디렉토리에 각 가상머신의 이름으로 설정파일이 저장되게 됩니다. 가상머신 관리자에서 지원되지 않는 고급 설정은 가상머신설정파일(*.xml)을 수정하여 설정할 수 있습니다.

 

~]# ls -l /etc/libvirt/qemu/

합계 4

-rw-------. 1 root root 3946 430 18:54 centos7.0.xml

drwx------. 3 root root 40 429 19:50 networks

 

기본적으로 게스트 머신의 가상화 디스크 이미지는 /var/lib/libvirt/images/ 디렉토리에 가상머신 이름으로 생성됩니다.

~]# ls -lh /var/lib/libvirt/images/

합계 4.0G

-rw-r--r--. 1 qemu qemu 4.0G 329 04:15 CentOS-7.1-1503-x86_64-DVD.iso

-rw-r--r--. 1 qemu qemu 21G 430 18:54 CentOS7.qcow2

 

앞에서 설명하였듯 KVM의 가상머신의 하나의 프로세스로 호스트 운영체제에 보이게 됩니다. 다음은 ps 명령어로 가상머신을 확인하였고, 상세한 옵션들을 확인 할 수 있습니다.

~]# ps -ef |grep kvm

qemu 3096 1 4 18:54 ? 00:00:04 /usr/libexec/qemu-kvm -name centos7.0 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu core2duo -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 17c1713b-0c51-4236-9df2-b625551c2983 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/centos7.0.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/var/lib/libvirt/images/CentOS7.qcow2,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/var/lib/libvirt/images/CentOS-7.1-1503-x86_64-DVD.iso,if=none,id=drive-ide0-0-0,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:eb:46:25,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=127.0.0.1,disable-ticketing,seamless-migration=on -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=67108864 -global qxl-vga.vgamem_mb=16 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 -msg timestamp=on

 

가상머신을 관리 할 수 있는 명령어인 virsh를 통해서도 가상머신의 상태를 확인 할 수 있고, 상세한 설정을 할 수 있습니다.

~]# virsh list

Id 이름 상태

----------------------------------------------------

2 centos7.0 실행중

 

게스트 운영 체제 시작 및 종료

 

가상화의 게스트 운영체제는 아주 쉽고 빠르게 시작하거나 종료할 수 있고, 일시정지등을 할 수 있습니다. 이 모든 기능이 가상화 관리도구를 사용하여 쉽게 할 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644999016_5905.png
 

위 그림과 같이 시작, 정지, 종료 버튼을 사용하거나, 가상머신을 선택하고 마우스 오른쪽 버튼을 클릭하여 나타나는 메뉴에서 선택하여 동일한 작업을 할 수 있습니다.

 

다음은 virsh 명령어를 통해 가상머신을 시작 종료할 수 있는 방법을 알아봅시다.

 

가상머신 시작은 다음과 같이 virshstart인자를 사용하여 수행할 수 있습니다.

~]# virsh start centos7.0

도메인 centos7.0가 시작됨

 

가상머신 강제 종료는 다음과 같이 virshdestory인자를 사용하여 수행합니다.

~]# virsh destroy centos7.0

centos7.0 도메인 강제 종료

 

가상머신의 상태는 위에서 설명한 “virsh list"를 사용하여 수행 및 종료된 가상머신을 확인 할 수 있습니다. 또한 호스트 머신 시작 시 자동으로 가상머신을 실행 할 수 있게 각 가상머신 상세 설정에서 다음과 같이 설정할 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644999031_942.png
 

 

 

가상화 시스템 리소스 관리

 

여러 개의 가상머신이 하나의 호스트 서버의 자원을 사용하기 때문에 자원에 대한 모니터링은 아주 중요합니다. 호스트 서버의 자원을 모니터링 하여 다른 호스트 서버로 가상머신을 라이브 마이그레이션 시켜 가상머신이 원활하게 작동하도록 유지시켜 주어야 합니다. 먼저 호스트 서버의 자원을 모니터링 하는 방법을 알아봅시다.

 

백업 및 바이러스 점검시간이 각 가상머신 간에 겹치지 않게 하며, 피크 시간대가 다른 서비스를 하는 가상머신끼리 묶습니다. 자원을 많이 사용하는 가상머신은 부하가 적은 호스트 서버로 라이브 마이그레이션 합니다. CPU, 메모리, Disk IO, 네트워크 트래픽 등을 고려하여 분배합니다.

 

 

(1) top 명령어를 통한 전체적인 상황 확인

 

~]# top

top - 19:03:33 up 41 min, 2 users, load average: 0.00, 0.04, 0.09

Tasks: 169 total, 1 running, 168 sleeping, 0 stopped, 0 zombie

%Cpu(s): 1.9 us, 0.8 sy, 0.0 ni, 95.9 id, 1.4 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 3073304 total, 2015964 free, 550004 used, 507336 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 2190008 avail Mem

 

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

3479 root 20 0 130020 1732 1188 R 10.5 0.1 0:00.05 top

3448 qemu 20 0 1682080 34992 9940 S 5.3 1.1 0:01.10 qemu-kvm

1 root 20 0 60056 7836 2688 S 0.0 0.3 0:02.21 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0

5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H

7 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/0

8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh

9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0

10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1

11 root 20 0 0 0 0 S 0.0 0.0 0:00.78 rcu_sched

12 root 20 0 0 0 0 S 0.0 0.0 0:00.39 rcuos/0

...

top 명령어의 결과를 확인하여 CPU, 메모리자원 사용량을 확인 할 수 있습니다.

 

 

(2) sar 명령어를 통한 자원 모니터링

 

~]# sar 1 10000

Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 20150430_x86_64_ (2 CPU)

 

CPU %user %nice %system %iowait %steal %idle

all 0.50 0.00 2.01 0.00 0.00 97.49

all 2.54 0.00 2.03 1.02 0.00 94.42

all 0.00 0.00 2.02 0.00 0.00 97.98

all 0.51 0.00 1.52 0.51 0.00 97.47

all 2.54 0.00 2.03 0.51 0.00 94.92

all 0.00 0.00 2.01 0.50 0.00 97.49

sar 명령어를 사용하여 CPU 사용량 및 I/O 사용량을 모니터링 할 수 있고, 과거 결과 또한 확인 할 수 있습니다. sar -n DEV 옵션을 사용하여 네트워크 사용량을 확인할 수 있고, iostat 명령어를 사용하여 각 디스크별로 디스크 IO를 확인할 수 있습니다.

 

 

 

(3) virt-manager를 통한 자원 관리

 

virt-manager 프로그램을 통해 호스트 머신의 자원을 모니터링 해 봅니다.

편집” > “연결 상세 정보"를 선택하면 다음과 같이 호스트 서버에 대해 모니터링 할 수 있습니다.

8981409a36269487e41dd29ffd6a290d_1644999049_4444.png
 

 

virt-manager를 이용하여 다음과 같이 자원 그래프를 얻을 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644999063_1529.png
 

 

각 가상머신의 자원 사용률을 관찰하여 자원 할당 및 가상머신을 다른 호스트 머신으로 옮길 수 있습니다.

(4) vir-top을 이용한 가상머신 자원 관리

 

각 가상머신을 모니터링 하기 위해서는 다음과 같은 몇 가지 도구를 사용할 수 있습니다. 가장 좋은 것이 vir-top 이라는 도구입니다.

virt-top 17:46:48 - x86_64 8/8CPU 1600MHz 7861MB 8.5%

7 domains, 7 active, 7 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0

CPU: 8.9% Mem: 5120 MB (5120 MB by guests)

 

ID S RDRQ WRRQ RXBY TXBY %CPU %MEM TIME NAME

6 R 0 28 34K 10K 2.3 13.0 37:40:37 SU032

4 R 0 0 346 4588 1.7 13.0 35:45:47 SU002

5 R 0 2 805 4794 1.6 6.0 32:25:53 SU014

2 R 0 0 6394 0 1.2 6.0 19:38:32 SU006

8 R 0 0 6394 0 1.0 6.0 26:13:37 SU098

1 R 0 0 6394 0 1.0 6.0 17:47:51 SU099

9 R 0 0 6394 0 0.2 13.0 105:07.63 SU101

 

위 결과와 같이 가상머신별로 자원을 모니터링 합니다. 위 결과에서 각 항목은 다음과 같은 의미를 가집니다.

ID : 가상머신 ID

S : 가상머신 상태

( ? : 알수 없음, R:실행중, S:차단됨, P:정지됨, D,O : 꺼짐, X:문제발생)

RDRQ : Disk 읽기 요청 수

WRRQ : Disk 쓰기 요청 수

RXBY : 네트웍 수신(Bytes 단위)

TXBY : 네트워크 송신(Bytes 단위)

%CPU : CPU 사용량 ( 100%는 모든 물리적 CPU 모두 사용)

%RAM : 메모리 사용량

TIME : CPU 사용 시간

NAME : 가상머신 이름

 

“1”키를 누르면 다음 화면을 볼 수 있습니다.

virt-top 18:32:17 - x86_64 8/8CPU 1600MHz 7861MB 9.5% 8.6% 9.8% 9.0% 9.4% 13.7%

7 domains, 7 active, 7 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0

CPU: 9.2% Mem: 5120 MB (5120 MB by guests)

 

PHYCPU %CPU SU032 SU014 SU002 SU006 SU101 SU099 SU098

0 10.1 3.6 2.4 1.3 0.7 2.6 1.5 1.5 0.4 0.2 0.0 0.0 0.0 0.9 0.8

1 9.9 4.4 3.0 1.0 0.8 2.3 1.3 0.8 0.1 0.1 0.2 0.1 1.2 1.1

2 5.3 2.0 1.0 0.3 0.2 0.9 0.4 1.6 0.2 0.2 0.1 0.0 0.2 0.2

3 3.3 0.9 0.4 0.2 0.1 1.7 0.4 0.2 0.0 0.1 0.0 0.0 0.2 0.1

4 13.8 1.9 1.1 3.0 2.0 2.0 1.6 1.6 0.6 0.2 0.1 2.6 2.6 2.4 2.3

5 15.4 1.8 0.9 2.7 1.7 2.4 1.7 2.1 0.5 1.6 1.2 2.7 2.6 2.2 2.1

6 9.6 0.9 0.5 3.1 1.3 2.3 1.6 1.4 0.1 0.1 0.0 0.9 0.7 0.9 0.8

7 6.3 0.6 0.2 2.0 0.4 2.2 0.1 0.8 0.1 0.2 0.0 0.2 0.2 0.4 0.3

 

위 그림에서 물리 CPU 코어당 가상머신이 사용하고 있는 CPU 사용률을 보여 주고 있습니다. 여기서 PHYCPU는 물리 CPU ID를 나타냅니다.

"2"를 누르게 되면 다음과 같은 결과를 볼 수 있습니다.

virt-top 17:49:29 - x86_64 8/8CPU 1600MHz 7861MB 10.5%

7 domains, 7 active, 7 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0

CPU: 10.5% Mem: 5120 MB (5120 MB by guests)

 

ID S RXBY TXBY RXPK TXPK DOMAIN INTERFACE

8 R 89K 30K 250 233 SU098 vnet2

6 R 33K 8182 41 84 SU032 macvtap3

1 R 15K 16K 207 163 SU099 vnet0

2 R 4213 0 44 0 SU006 vnet1

9 R 4213 0 44 0 SU101 vnet3

5 R 62 2272 1 20 SU014 macvtap2

4 R 0 2268 0 20 SU002 macvtap1

 

위 결과는 네트워크에 대해 조금 더 자세히 보여 줍니다. 여기서 새로운 항목은 다음과 같습니다.

 

RXPK : 네트워크 수신(패킷 수)

TXPK : 네트워크 송신(패킷 수)

INTERFACE : 네트워크 인터페이스 이름

 

“3”을 누르게 되면 다음과 같은 결과를 얻을 수 있습니다.

virt-top 17:50:45 - x86_64 8/8CPU 1600MHz 7861MB 9.0% 9.0% 9.7% 10.5%

7 domains, 7 active, 7 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0

CPU: 10.3% Mem: 5120 MB (5120 MB by guests)

 

ID S RDBY WRBY RDRQ WRRQ DOMAIN DEVICE

4 R 0 388K 0 68 SU002 hda

2 R 0 0 0 0 SU006 hda

5 R 0 0 0 0 SU014 hda

6 R 0 60K 0 2 SU032 hda

1 R 0 0 0 0 SU099 hda

2 R 0 0 0 0 SU006 hdb

4 R 0 0 0 0 SU002 hdc

2 R 0 0 0 0 SU006 hdc

5 R 0 0 0 0 SU014 hdc

6 R 0 0 0 0 SU032 hdc

8 R 0 0 0 0 SU098 hdc

1 R 0 0 0 0 SU099 hdc

9 R 0 0 0 0 SU101 hdc

4 R 0 0 0 0 SU002 vda

8 R 0 304K 0 53 SU098 vda

9 R 0 0 0 0 SU101 vda

9 R 0 0 0 0 SU101 vdb

 

위 결과는 디스크 사용량에 대해 더 자세하게 보여주고 있습니다. 새로운 항목은 다음과 같습니다.

 

RDBY : Disk에서 읽은 Bytes

WRBY : Disk에 쓴 Bytes

DEVICE : 블록 디바이스 이름

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,057 명
  • 현재 강좌수 :  35,926 개
  • 현재 접속자 :  213 명