PVDI2 Node Installation Manual

1. PVDI 개요

서버 자원을 이용해 데스크탑 업무 환경을 임직원들에게 네트워크 상에서 제공합니다. 이를 통해 서버의 사용률을 극대화 할 수 있습니다.

그림 1. VDI의 개요

1-1. 기능

  • 사용자별 독립된 가상 데스크톱을 제공합니다.

  • 언제 어디서든 네트워크를 통해 가상 데스크톱에 접속할 수 있습니다.

  • 애플리케이션 및 데이터의 중앙 관리로 중요한 데이터를 보호할 수 있습니다.

  • 가상 데스크톱 시작, 재시작, 일시중지, 복원 기능을 제공합니다.

  • 각각의 사용자 권한, 자원 관리 (CPU, 메모리 할당) 기능을 제공합니다.

1대의 Node 서버에서 생성가능한 VM은 몇 개일까?

아래 설명을 참고하세요.

VM에서 할당 가능한 CPU core 개수

물리 머신의 core가 24개이면 전체 VM의 코어 개수는 48 ~ 72개를 권장합니다. 물리 머신의 코어 개수가 24개라고 해서 VM에서 24개의 VM (CPU core 1개 * VM 24개)만 생성하고 실행할 수 있는 것이 아닙니다. 24개 이상의 VM을 한번에 실행할 수 있습니다.

VM에서 할당 가능한 메모리

물리 머신에서 사용하지 않는 메모리 공간이 있을 때까지 VM을 할당할 수 있습니다.

1-2. 전체 구성도

그림 2. PVDI의 구성도

항목 내용
Master VM Master VM은 node 위에서 VM(Virtual Machine)으로 구동됩니다. 관리자는 Master VM으로 접속해서 UVDI 노드들을 관리할 수 있습니다. DB는 mysql 5.5.46 버전을 사용합니다.
Node Master의 메시지를 받아 VM들을 구동시킵니다.
Storage 각 노드끼리 VM 이미지들을 공유합니다.
Web Manager 웹에서 VM의 설치, 생성, 운영을 할 수 있습니다.
PVDI Client Windows, Linux등에서 가상 데스크탑에 접속하는 프로그램입니다.

표 1. 그림 2의 용어 설명

2. VT 활성화 및 BIOS 설정

Vendor Virtualization Technology
Intel Intel Virtualization Technology(VT-x)
AMD AMD Virtualization (AMD-V)

표 2. Intel과 AMD의 가상화 기술 비교

Intel은 2015년부터 대부분의 서버, 데스크톱, 모바일 프로세서에서 VT-x 기능을 지원합니다.

가상화 기능을 지원하지 않는 경우는 다음과 같습니다.

  • 일부 Intel Atom 프로세서는 VT-x를 지원하지 않습니다.
  • 구형 CPU, Mainboard는 가상화 기능(VT-x, AMD-V)을 지원하지 않을 수 있습니다.

2-1. 가상화 지원 여부 확인

사용하고 있는 CPU의 Specifications(이하 spec)에서 가상화 지원 여부를 알 수 있습니다.

리눅스에서 CPU 모델명은 아래 명령으로 확인할 수 있습니다.

# cat /proc/cpuinfo | grep 'model name' | head -n 1
model name      : Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz

위 모델명을 `구글 <https://www.google.co.kr/?gws_rd=ssl>`__\ 에서
검색하면 spec을 확인할 수 있습니다.

Intel® Core™ i3-330M Processor (3M Cache, 2.13 GHz)의 spec을 보면 Intel® Virtualization Technology (VT-x)를 지원한다는 것을 알 수 있습니다. 따라서 이 CPU는 가상화를 지원합니다.

egrep –color ‘(vmx|svm)’ /proc/cpuinfo를 입력했을 때 VMX (Intel Virtual Machine eXtentions) 또는 SVM (AMD Secure Virtual Machine)가 붉은색 글씨로 보인다면 가상화를 지원하는 CPU를 사용하고 있다는 것입니다.

VMX(Intel Virtual Machine eXtentions)

Intel virtual Machine eXtentions, the Instructions that represents VT.

VT-x(Intel Virtualization Technology)

Hardware virtualization via Intel Virtualization Technology.

SVM(AMD Secure Virtual Machine)

AMD는 “Pacifica”라는 코드네임 아래 개발한 가상화 기술을 SVM(AMD Secure Virtual Machine)이라고 불렀습니다. 하지만 나중에 AMD Virtualization이란 이름으로 시장에 출시했고 축약해서 `AMD-V <https://en.wikipedia.org/wiki/X86_virtualization#AMD_virtualization_.28AMD-V.29>`__라고 부릅니다.

# egrep --color '(vmx|svm)' /proc/cpuinfo

Intel CPU는 아래와 같이 보일 것입니다.

그림 6. 가상화 기능을 지원하는 Intel CPU - Intel® Core™ i3-330M Processor (3M Cache, 2.13 GHz)

AMD CPU는 아래와 같이 보일 것입니다.

그림 7. 가상화 기능을 지원하는 AMD CPU

lscpu 명령을 입력했을 때 Virtualization 부분에 VT-x 라고 출력되면 가상화를 지원합니다.

(단, Intel CPU의 경우 VT-x입니다.)

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Model name:            Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
Stepping:              2
CPU MHz:               933.000
CPU max MHz:           2133.0000
CPU min MHz:           933.0000
BogoMIPS:              4255.63
+ Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

2-2. BIOS에서 VT 기능 활성화

CMOS에서 Intel Virtualization Technology 또는 AMD-V 기능을 Enable합니다. 바이오스 제조사 및 버전, OEM, 프로세서 등에 따라서 가상화를 활성화하는 옵션은 다르게 보일 수 있습니다.

1) Phoenix BIOS

Intel(R) Virtualization Technology 옵션을 Enabled로 바꾸고 변경 사항을 저장합니다.

그림 8. Phoenix BIOS 설정 화면

2) Award BIOS

Virtualization 옵션을 Enabled로 바꾸고 변경 사항을 저장합니다.

그림 9. Award BIOS 설정 화면

2-3. BIOS에서 Hyper-Threading 기능 활성화

Intel® Hyper-Threading Technology (Intel® HT Technology)를 활성화해서 가상화 성능을 향상시킬 것을 권장합니다.

1) Hyper-Threading Technology 소개

Intel® HT Technology를 사용하면 코어 1개에서 여러 개의 쓰레드를 실행할 수 있습니다.

그림 10. Hyper-Threading Technology의 동작 원리

Intel Hyper-Threading Technology 유투브 비디오

https://img.youtube.com/vi/iNXM8OW5pi8/0.jpg

2) Hyper-Threading Technology 활성화

Hyper-Threading 옵션을 Enabled로 설정합니다.

그림 11. Hyper-Threading 기능을 활성화한 화면

2-4. 절전 모드 끄기

절전 모드를 끄지 않으면 시스템이 갑자기 절전 모드로 전환될 수 있습니다. 절전 기능은 반드시 비활성화해주세요.

바이오스 제조사, 버전에 따라서 절전 모드를 끄는 옵션은 다르게 보일 수 있습니다.

1) Award BIOS

그림 12. 절전 모드를 끄지 않은 상태

Disabled를 선택합니다.

그림 13. 절전 모드를 끄는 옵션을 선택하는 화면

`Power Management 옵션 설명 <http://www.esupport.com/techsupport/award/awardmanuals/setup600.pdf>`__

Power Management category allows you to select the type (or degree) of power saving and is directly related to the following modes:

  • HDD Power Down
  • Doze Mode
  • Suspend Mode

There are four selections for Power Management, three of which have fixed mode settings.

순서 동작 모드 설명
1 User Defin e Allows you to set each mode individua lly. When not disabled, each of the ranges are from 1 min. to 1 hr. except for HDD Power Down which ranges from 1 min. to 15 min. and disable.
2 Disab bled No power managemen t. Disables all four modes
3 Min Savin g Minimum power managemen t. Doze Mode = 1 hr. Standby Mode = 1 hr., Suspend Mode = 1 hr., and HDD Power Down = 15 min.
4 Max Savin g Maximum power managemen t – ONLY AVAILABLE FOR SL CPU’s. Doze Mode = 1 min., Standby Mode = 1 min., Suspend Mode = 1 min., and HDD Power Down = 1 min.

표 3. Power Management 옵션

2-5. RAID 설정

아래와 같이 RAID 설정을 권장합니다. RAID 설정 방법은 메인보드의 바이오스나 RAID 바이오스를 확인해주세요.

영역 RAID 종류
OS 영역 (swap 파티션 : 1GB, / 파티션 : 9GB) RAID-1 (Mirror)
data 영역 (VM Image 저장소) RAID-10 (Stripe + Mirror)

표 4. 권장 RAID 설정

그림 14. 표 4의 RAID 구성도 (디스크의 1TB 용량은 임의로 설정했습니다.)

그림 15. RAID Failure Rates

2-6. 설치 이미지 파일

pvdi-node-2.0.2-amd64-CD-1.iso를 다운 받습니다.

리눅스에서는 아래 명령어로도 다운로드할 수 있습니다.

# wget --user=orchard --ask-password http://repo.iorchard.co.kr/lgu/pvdi-node-2.0.2-amd64-CD-1.iso

PW는 mailto:support@iorchard.co.kr 또는 02-824-2544로 문의하세요.

다운받은 iso 파일을 부팅할 usb에 burning합니다.

1) Linux에서 설치 USB 생성 방법

# dd if=/root/pvdi-node-2.0.2-amd64-CD-1.iso of=/dev/sdd

제 USB 장치는 /dev/sdd로 인식했습니다. sdd 대신에 고객님의 시스템에서 인식한 usb의 장치 이름을 입력하세요.

USB 장치 이름은 fdisk -l 또는 dmesg | tail 명령어로 확인할 수 있습니다.

2) Windows에서 설치 USB 생성 방법

Windows에서는 Win32 Disk Imager를 이용해서 iso 파일을 usb에 burning 할 수 있습니다.

Win32 Disk Imager를 설치, 실행한 뒤 파랑색 폴더 아이콘을 클릭하여 pvdi-node-2.0.2-amd64-CD-1.iso 파일을 선택합니다.

그림 16. Win32 Disk Imager에서 pvdi-node-2.0.2-amd64-CD-1.iso 파일을 불러오는 모습

USB 장치의 Device를 선택한 뒤 Write 버튼을 누릅니다.

그림 17. Write 버튼을 클릭

Write를 할 것인지 다시 한번 물어보는 메시지입니다. Yes를 누릅니다.

그림 18. 주의 메시지

pvdi-node-2.0.2-amd64-CD-1.iso 파일을 usb에 굽고있는 모습니다. 작업이 완료되면 USB를 시스템에서 안전하게 제거하고 USB로 부팅합니다. USB로 부팅하기 위해서는 BIOS에서 첫 번째 부팅 순서를 USB로 설정해야 합니다.

그림 19. USB에 iso 파일을 burning 하는 모습

3. Node 설치

usb로 부팅하면 아래와 같은 화면이 나타납니다. Install 항목을 선택하고 엔터키를 누릅니다.

그림 20. USB로 부팅한 초기 화면

3-1. 키보드 설정

키맵은 미국 영어를 선택합니다.

그림 21. 키보드 설정 화면

3-2. 컴포넌트 읽기

프로그램 설명 코드 네임 버전 설치(선택) 여부
pvdin Pengrix VDI for node
2.0.2 Yes
pengx20 iOrchard XEN PengX 2.0.1 Yes

표 5. 컴포넌트 설명

그림 22. 컴포넌트 선택 화면

3-3. 네트워크 설정

그림 23. 네트워크 설정 화면 (IP 주소, 넷마스크, 게이트웨이, 네임 서버, 호스트 이름, 도메인 이름)

3-4. 파티션 설정

1) 파티션 생성 준비

그림 24. 파티션 수동 설정

2) swap 파티션 생성

그림 25. swap 파티션을 생성하는 화면

3) / 파티션 생성

그림 26. / 파티션을 생성하는 화면

4) 파티션 설정 마치기

그림 27. 설정한 파티션을 디스크에 기록하는 화면

4. 베이스 시스템 설치

그림 28. 베이스 시스템을 설치하는 화면

5. 부트로더 설치

부트로더로는 GRUB를 사용합니다. 부팅후 grub-install –version 명령으로 GRUB 버전을 확인할 수 있습니다.

# grub-install --version
grub-install (GRUB) 1.99-27+deb7u2

GRUB 설치가 완료되면 Node 설치는 끝났습니다.

이제 재부팅해서 Node를 설정해야 합니다.

그림 29. GRUB를 설치하는 화면

4. Node 설정

4-1. 인터페이스 설정 (브릿지 설정)

/etc/network/interfaces 파일을 열어서 고객님의 네트워크 환경에 맞게 수정하세요.

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet static
    bridge_ports eth0
    bridge_maxwait 5
    address 192.168.0.22
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    dns-nameservers 8.8.8.8

allow-hotplug eth1
iface eth1 inet manual

auto xenbr1
iface xenbr1 inet static
        bridge_ports eth1
        bridge_maxwait 5
        address 10.1.1.22
        netmask 255.255.255.0

그림 30. Xen 브릿지 구성

이름 의미
xenbr Xen bridge. 스위치 역할을 합니다.
vif Virtual Interface. 포트 역할을 합니다.
vif 1.0 domain 1(dom1)의 eth0
vif 1.1 domain 1(dom1)의 eth1

표 6. 그림 30의 용어 설명

  • vifX.Yxl create를 하면 자동으로 생성됩니다.

brctl show 명령어를 사용하면 브릿지 목록을 볼 수 있습니다.

# brctl show

bridge name     bridge id               STP enabled     interfaces
xenbr0          8000.0020781219f1       no              eth0
                                                        vif1.0
                                                        vif2.0
xenbr1          8000.0023541104c2       no              eth1
                                                        vif1.1
                                                        vif2.1

xl list 명령어를 사용하면 Domain의 ID를 알 수 있습니다. 제 서버에서 pvdi-master의 Domain ID는 1입니다. (pvdi-master의 Domain ID는 1이 아닐 수도 있습니다.) 참고로 Dom0의 Domain ID는 항상 0입니다.

root@node:/data# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  4095     4     r-----   31042.1
pvdi-master                                  1  1024     1     -b----    1236.0
(..이하 생략..)

그림 31. Xen Architecture

4-(2). /data 디렉토리 및 기타 설정

설치 시 swap, / 을 제외한 나머지 공간을 xfs 파일시스템으로 /data 디렉토리에 마운트 시키셨을텐데 이 /data 디렉토리 안에 다음 명령어로 디렉토리들을 생성합니다.

# mkdir /data/config /data/gvm /data/iso /data/backup && mkdir -p domu/d

공유 스토리지 사용을 위해 /data/config 디렉토리에 755 권한을 줍니다.

755 권한을 주지않으면 가상머신 실행시 퍼미션이 없다는 에러(쓰기 권한 없음)가 발생합니다.

# chmod 755 /data/config
# chown orchard:orchard /data/config

다음으로 dummy.iso 파일을 /data/iso/ 에 복사합니다.

# cp /home/orchard/pvdi/iso/dummy.iso /data/iso/

위의 모든 과정이 끝나면 아래 명령어로 install node 스크립트를 실행합니다.

# /home/orchard/pvdi/scripts/./install_node.sh

Master VM에서 config.py 파일을 복사합니다.

# scp [mastervm ip]:/home/orchard/pvdi/src/libs/config.py /home/orchard/pvdi/src/libs/

Master VM이 존재한다면 위와 같이 복사 해오면 됩니다. Master VM이 존재하지 않는다면 mastervm-installation 문서를 참조하면 됩니다.

위와 같이 설정이 다 끝났으면 reboot 합니다.

# reboot

6. Node 작동 확인

Node에서 동작하는 프로세스는 pemon, uwsgi(was), nginx(web server), guacd(html5 web rdp) 입니다. 이 4개의 프로세스가 모두 동작해야 Node가 제대로 운영됩니다.

만약 VM에 접속이 안된다면 이들 프로세스의 상태를 점검해보세요.

(DjangoWeb Framework이기 때문에 프로세스의 형태로 실행되지 않습니다.)

그림 32. Node의 Stack 구조

`Nginx <https://nginx.org/>`__

Nginx는 웹 서버입니다.

`uWSGI </files/pvdi_node_install/14-2_Node_Structure_uWSGI.png>`__

WSGI (Web Server Gateway Interface) 데몬의 한 종류입니다. 파이썬으로 제작한 웹 애플리케이션을 웹 서버와 연동하기 위한 ‘어댑터’ 성격의 미들웨어입니다. 자체적으로 프로세스를 생성하여 소켓을 통해 웹서버와 통신합니다.

`Django <https://www.djangoproject.com/>`__

Djanog는 Python으로 작성되었습니다. 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소들로 이루어져 있습니다. 즉 Web Framework입니다. (Python 기반의 Web Framework에는 Flask도 있습니다.)

사용자 인증(로그인, 로그아웃), 회원가입, 관리자 패널, 등의 기능을 제공합니다.

`Guacamole <http://guacamole.incubator.apache.org/>`__(Html5 web application client)

Guacamole는 html5를 지원하는 웹브라우저로 원격데스크탑을 접속 가능하게 해주는 어플리케이션 입니다.

6-1. pemon 프로세스 확인

pemon은 주기적으로 node의 VM 상태, 자원 사용량을 수집하여 Master VM에 보고합니다.

ps aux | grep pemon 명령어로 확인합니다.

# ps aux | grep pemon | grep -v "grep"
orchard  32358  0.3  0.5  74372 23836 ?        S     5월11  41:16 python /home/orchard/pvdi/scripts/../src/manage.py pemon

만약 pemon 프로세스가 실행되고 있지 않을 경우 아래 명령으로 pemon을 시작합니다.

# sudo -u orchard /home/orchard/pvdi/scripts/./pvdi_was start

6-2. pvdi 프로세스 확인

ps aux | grep pvdi | grep -v “grep” 명령어로 확인합니다.

# ps aux | grep pvdi | grep -v "grep"
orchard   7032  0.0  0.3  68872 14432 ?        S     5월11   0:16 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   7034  0.0  0.8 135488 32424 ?        S     5월11   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   7035  0.0  0.8 135628 32656 ?        S     5월11   0:01 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   7036  0.0  0.8 135608 32668 ?        S     5월11   0:01 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   7037  0.0  0.8 135600 32640 ?        S     5월11   0:01 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini

만약 pvdi 프로세스가 실행되고 있지 않을 경우 아래 명령으로 pvdi를 시작합니다.

# sudo -u orchard /home/orchard/pvdi/scripts/./pvdi_was start

만약 pvdi 프로세스를 종료하려면 root로 로그인 후 아래 명령을 입력합니다.

# /home/orchard/pvdi/scripts/./pvdi_was stop

6-3. nginx 프로세스 확인

ps aux | grep nginx | grep -v “grep” 명령어로 확인합니다.

# ps aux | grep nginx | grep -v "grep"
root      4078  0.0  0.0  64396  1384 ?        Ss    5월11   0:00 nginx: master process /usr/sbin/nginx
www-data  4079  0.0  0.0  65032  2248 ?        S     5월11   0:09 nginx: worker process
www-data  4080  0.0  0.0  65032  1860 ?        S     5월11   0:24 nginx: worker process
www-data  4081  0.0  0.0  65032  1824 ?        S     5월11   0:17 nginx: worker process
www-data  4082  0.0  0.0  64688  1856 ?        S     5월11   0:21 nginx: worker process

만약 nginx 프로세스가 실행되고 있지 않을 경우 아래 명령으로 nginx를 시작합니다.

# service nginx start

6-4. guacd 프로세스 확인

ps aux | grep guacd 명령어로 확인합니다.

# ps aux | grep guacd | grep -v "grep"
root      2541  0.0  1.1  79964 11416 ?        S    09:52   0:00 /usr/local/sbin/guacd -p /var/run/guacd.pid

7. Tips

7-(1). VDI 관련 로그 확인

VDI 로그는 /home/orchard/pvdi/src/conf/logs/logfile에 있습니다. (node 서버, master 서버 모두 동일)

7-(2). VDI에서 외부와 통신이 안될경우

node 서버에 ssh 접속해서 방화벽 정책을 확인합니다.

# iptables -tncat -L

만약 외부와의 통신을 차단하는 룰이 있다면 삭제합니다.

7-(3). pvdi_was 프로세스가 실행되지 않는 경우

/home/orchard/pvdi 소유권이 orchard로 되어있지 않으면 pvdi_was 프로세스가 구동되지 않습니다. 만약 /home/orchard/pvdi의 소유권이 root라면 다음 명령으로 소유권을 orchard로 변경합니다.

# chown -R orchard:orchard /home/orchard/pvdi

8. 문의 사항

기타 궁금하신 사항은 mailto:support@iorchard.co.kr 또는 02-824-2544로 문의하세요.