PVDI Master-VM Installation Manual

Master VM은 node 위에 VM(Virtual Machine)으로 구동됩니다. 따라서 node의 설치가 우선되어야 합니다. 아래의 과정들은 Master VM을 설치할 node에서 진행합니다.

1. 준비사항

1-(1). 설치 이미지 파일

Master VM은 VM으로 구동하므로 iso 파일을 직접 사용합니다. node처럼 media를 생성할 필요는 없습니다. pvdi-master-1.6.1-amd64-CD-1.iso를 node의 /data/iso에 저장합니다.

# wget --user=orchard --ask-password http://repo.iorchard.co.kr/lgu/pvdi-master-1.6.1-amd64-CD-1.iso -P /data/iso

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

1-(2). Master VM 디스크 이미지 생성

아래와 같이 Master VM에서 디스크로 사용할 image 파일(raw)을 생성합니다. Master VM의 용량은 10G 면 충분합니다.

# qemu-img create -f raw /data/master.raw 10G

1-(3). 구동 설정 파일

1) 생성

Master VM을 올릴 node에 접속하여 Master VM sample 파일(/home/orchard/pvdi/conf/master_template.cfg)을 /data 안으로 복사하여 구동 설정 파일을 생성합니다.

# cp /home/orchard/pvdi/conf/master_template.cfg /data/master.cfg

2) 수정

/data/master.cfg 파일에서 disk 옵션, vif 옵션을 수정해야 합니다.

# vi /data/master.cfg
ㄱ. disk 옵션 설정

master를 설치해야 하므로 iso 파일로 부팅하기 위해서 두 번째 줄을 주석 처리합니다. (master 설치를 완료한 후에는 첫 번째 줄을 주석 처리하고 두 번째 줄의 주석을 해제합니다).

disk = ['tap2:aio:/data/iso/pvdi-master-1.6.1-amd64-CD-1.iso,xvdd:cdrom,r','tap2:aio:/data/master.raw,xvda,w']
#disk = ['tap2:aio:/data/master.raw,xvda,w']
/ 첫 번째 줄 두 번째 줄
사용 master를 설치할 때 master 설치 후 부팅 할 때
의미 iso 파일로 부팅해서 /data/master.raw 디스크에 설치 /data/master.raw 디스크로 부팅

첫 번째 줄은 [pvdi-master-1.6.1-amd64-CD-1.iso]((http://repo.iorchard.co.kr/lgu/pvdi-master-1.6.1-amd64-CD-1.iso) 파일로 부팅해서, master를 /data/master.raw 디스크에 설치한다는 의미입니다. 두 번째 줄은 /data/master.raw 디스크로 부팅한다는 의미입니다. 하지만 주석(#) 처리되었으므로 두 번째 줄의 옵션은 무시합니다.

ㄴ. 네트워크 설정

vif 옵션을 설정하기 위해서는 eth0, eth1을 설정해야 합니다. vif는 Virtual Interface를 의미합니다. 자세한 설명은 아래 링크를 참고해 주세요.

eth0, eth1 설정

/etc/network/interfaces에 아래와 같이 설정합니다. address, netmask, network, broadcast, gateway 정보는 고객님의 네트워크 정보를 입력하세요. 저장 후 service networking restart 명령으로 네트워크를 재시작합니다. 아래 설정에서 eth0는 외부망, eth1는 내부망으로 쓰입니다.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.138
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 168.126.63.1

allow-hotplug eth1
iface eth1 inet static
    address 10.1.1.138
    netmask 255.255.255.0
vif 옵션 설정

아래와 같이 설정합니다.

vif=['bridge=xenbr0', 'bridge=xenbr1']

2. Master VM 설치

Master를 구동하여 pvdi 설치를 시작합니다. -c 옵션을 사용하면 도메인을 생성후 바로 해당 도메인으로 접속합니다.

# xl create -c /data/master.cfg

위 명령으로 Master VM을 구동하면 바로 Master VM의 설치 화면을 볼 수 있습니다.

xl create -c /data/master.cfg 명령은 아래 명령과 동일한 기능을 수행합니다.

# xl create master.cfg
# xl console pvdi-master  --> /data/master.cfg 파일에 name이 pvdi-master로 정의되어 있습니다.

2-(1). 설치

1) 언어 설정

그림 1. 언어 설정 화면

2) 지역 설정

그림 2. 지역 설정 화면

3) 로케일 설정

그림 3. 로케일 설정 화면

4) 키맵 설정

그림 4. 키맵 설정 화면

5) 네트워크 설정

그림 5. 네트워크 설정 (IP 주소, 넷마스크, 게이트웨이, 호스트 네임, 도메인 네임)

6) 파티션 설정

ㄱ. 파티션 생성 준비

그림 6. 파티션 수동 설정 화면

ㄴ. swap 파티션 생성

그림 7. swap 파티션 생성 화면

ㄷ. / 파티션 생성

그림 8. / 파티션 생성 화면

ㄹ. 파티션 설정 마무리

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

7) 베이스 시스템 설치

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

위 과정이 끝나면 Master VM의 설치가 완료됩니다.

3. Master VM으로 부팅 후 설정 작업

3-(1). /data/master.cfg의 부팅 순서 변경

node 서버의 /data/master.cfg 파일을 수정하여 부팅 순서를 변경합니다.

name = "pvdi-master"
memory = 1024
- disk = ['tap2:aio:/data/iso/pvdi-master-1.6.1-amd64-CD-1.iso,xvdd:cdrom,r','tap2:aio:/data/master.raw,xvda,w']
+ disk = ['tap2:aio:/data/master.raw,xvda,w']
vif=['macaddr=00:20:78:12:19:f1,bridge=xenbr0', 'macaddr=00:23:54:11:04:c2,bridge=xenbr1']
bootloader="pygrub"
#bootloader_args=["--kernel=/install.amd/vmlinuz", "--ramdisk=/install.amd/initrd.gz"]
#extra = "debian-installer/exit/always_halt=true -- console=hvc0 auto-install/enable=true file=/cdrom/simple-cdd/pvdim.preseed file=/cdrom/simple-cdd/default.preseed debian-installer/locale=ko_KR simple-cdd/profiles=pvdim vga=788"
device_model_version="qemu-xen"
device_model_override="/usr/bin/qemu-system-x86_64"

Master VM을 구동시킵니다.

# xl create -c /data/master.cfg

-c 옵션을 사용하면 도메인을 생성후 바로 해당 도메인으로 접속합니다.

xl create -c /data/master.cfg 명령과 아래와 명령은 동일한 기능을 수행합니다.

# xl create master.cfg
# xl console pvdi-master  --> /data/master.cfg 파일에 name이 pvdi-master로 정의되어 있습니다.

Master VM에 접속 후 로그인합니다. (접속을 종료하려면 Ctrl + ] 키를 누르면 됩니다.)

아래와 같이 ssh로도 접속할 수 있습니다.

# ssh (pvdi-master ip)

3-(2). 인터페이스 수정

내부 interface (eth1)를 설정합니다. 네트워크 주소 정보는 고객님의 네트워크에 맞게 작성하세요.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.138
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

+ allow-hotplug eth1
+ iface eth1 inet static
+    address 10.1.1.138
+    netmask 255.255.255.0

위 설정 파일을 저장한 뒤 eth1을 올려줍니다.

# ifup eth1

eth1이 정상적으로 올라왔는지 확인하기 위해 node로 ping 테스트를 합니다.

# ping [pvdi-node ip]

제 node의 ip 주소는 192.168.0.22입니다. 아래와 같이 eth1(내부망)이 제대로 동작합니다.

# ping 192.168.0.22
PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data.
64 bytes from 192.168.0.22: icmp_req=1 ttl=64 time=0.060 ms
64 bytes from 192.168.0.22: icmp_req=2 ttl=64 time=0.017 ms
64 bytes from 192.168.0.22: icmp_req=3 ttl=64 time=0.017 ms
^C
--- 192.168.0.22 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.017/0.031/0.060/0.020 ms

3-(3). install_master.sh 실행

cd /home/orchard/pvdi/scripts
# ./install_master.sh

그림 11. install_mash.sh를 실행한 모습

3-(4). config.py 설정

# vi /home/orchard/pvdi/src/libs/config.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
common config variables
"""
# 웹 매니저에서 보여줄 초기 제목을 설정합니다.
TITLE = "Pengrix VDI"

# Domain-0의 메모리 용량(xl list 명령어로 확인 가능)을 MB 단위로 설정합니다.
DOM0_MEM = 4095

# 비밀번호 변경 주기를 일 단위로 설정합니다.
PW_INTERVAL = 90
# PW_WARN에 설정된 날짜 전에 비밀번호를 변경하라고 알려줍니다.
PW_WARN = 7     # 단위: 일(day)

"""
PEMON_REPEAT_SEC 옵션은 VM 상태, 자원 사용량을 수집할 시간 간격을 설정합니다.

- pemon은 주기(PEMON_REPEAT_SEC의 설정 값)적으로 VM 상태, 자원 사용량을 수집하여 Master VM에 전달하는 daemon입니다.
"""
PEMON_REPEAT_SEC = 5    # 단위: 초(s)

# Node에서 30초 (PEMON_REPEAT_SEC의 기본값(초) * 6번) 동안 신호를 못 받으면 이 Node는 다운되었다고 판단합니다.
PEMON_TIMEOUT = 30

# Golden VM에서 사용할 vcpus(코어) 개수 및 메모리 용량(MB)
DEFAULT_GVMS_CPU = 1
DEFAULT_GVMS_MEM = 1024

# VM에서 DHCP 서버 사용 여부를 설정합니다.
USING_DHCP = True               # True, False

# DHCP_NETWORK : DHCP 네트워크를 위한 'network address/netmask address'를 입력합니다.
DHCP_NETWORK = '192.168.1.0/255.255.255.0'
# DHCP_RANGE : 'Beginning/End' -> Beginning ~ End 범위에서 VM에 IP를 할당합니다.
DHCP_RANGE = '192.168.1.10/192.168.1.254'
# DHCP_DEFAULT_ROUTER : 기본 게이트웨이를 설정합니다.
DHCP_DEFAULT_ROUTER = "" # default router is the node running VM.

# 웹 서버 포트를 설정합니다. 웹 서버는 일반적으로 TCP/UDP 80번 포트를 사용합니다.
PORT = 80
# VM의 기본 RDP(Remote Desktop Protocol) 포트를 설정합니다. RDP는 일반적으로 TCP 3389번 포트를 사용합니다.
RDP_PORT = 3389
# VM's VNC start port - for each node
# VM의 VNC(Virtual Network Connection) 포트를 설정합니다. VNC는 일반적으로 TCP 5900번 포트를 사용합니다.
VNC_START_PORT = 5900
# VM's spice start port - for each node
SPICE_START_PORT = 6900
"""
VNC 웹 접속을 할 때 VM은 바로 VNC 접속을 못합니다. VM은 웹 프록시 7900번 포트를 거쳐 VNC의 5900번 포트에 접근합니다.
"""
WSPROXY_PORT = 7900

"""
VM 할당 방식을 설정합니다.
VM 할당 방식으로는 round-robin(rr), sticky가 있습니다.

- 스토리지에 저장된 VM 이미지를 사용할 때는 round-robin(rr)을 사용합니다.
- VM 이미지가 Node에 있는 경우에는 rr을 사용할 수 없습니다. 로컬 디스크를 사용할 때는 sticky를 사용해야 합니다.
"""
LOAD_BALANCING = "rr"            # rr 또는 sticky

"""
VM 이미지의 저장소, VM 이미지의 파일 종류(qcow2, vhd)를 설정합니다.
"""
STORAGE_DIR = "/data"
IMAGE_FILE_TYPE = 'qcow2'       # qcow2, vhd

"""
사용자 별로 미디어의 각 기능들을 관리자의 설정에 따라 제한을 둘 수 있습니다.
sound, clipboard, disk, printer의 기본값은 모두 False입니다.

sound -> Client에서 VM의 소리를 들을 수 있습니다.
clipboard -> Client의 클립보드를 VM에서 공유할 수 있습니다.
disk -> Client PC의 local disk, usb 등의 drive를 공유할 수 있습니다.
printer -> Client에 연결된 printer를 VM에서 사용할 수 있습니다.
"""
DEFAULT_MEDIA_CONTROL = {'sound' : False,
                        'clipboard' : False,
                        'disk' : False,
                        'printer' : False}

# 클라이언트의 ssh user 및 port를 설정합니다.
SSH_USER = 'pvdi'
SSH_PORT = 22                            # TCP 22번 포트는 SSH 접속에 사용합니다.
SSH_USER_HOME = '/home/' + SSH_USER      # SSH_USER의 홈 디렉토리를 설정합니다.
SSH_KEY = SSH_USER_HOME + '/.ssh/id_rsa' # ssh private key의 경로를 설정합니다.

# 페이지 번호
NUM_ITEMS_PER_PAGE = 20 # 웹 매니저의 페이지 1개에 보여질 항목들의 개수를 설정합니다.

# 사용자 인증 방식(LDAP 또는 DB)을 설정합니다.
USERAUTH_METHOD = "DB" # 'LDAP' 또는 'DB'

LDAP_SERVER_TYPE = "AD" # support 'AD' only. plan to support openldap later.
# LDAP Server (ex. ldap://ip:port, ldaps://ip:port)
USERAUTH_LDAP_SERVER = "ldap://192.168.1.10"

# base DN (ex. AD: cn=users,dc=iorchard,dc=com)
USERAUTH_LDAP_BASEDN = "cn=users,dc=iorchard,dc=com" # AD
#USERAUTH_LDAP_BASEDN = "ou=people,dc=iorchard,dc=com" # openLDAP

# bind DN
USERAUTH_LDAP_BINDDN = "%s@iorchard.com" # AD
#USERAUTH_LDAP_BINDDN = "uid=%s,ou=people,dc=iorchard,dc=com" # openLDAP

# search filter attribute key (ex. AD : sAMAccountName = _userid_)
USERAUTH_LDAP_FILTER = "(sAMAccountName=%s)" # AD
#USERAUTH_LDAP_FILTER = "(uid=%s)" # openLDAP

# firstname, familyname, job position, department attribute keys
# (ex. AD : givenName, sn, title, department)
USERAUTH_LDAP_KEY = {'firstname' : 'givenName',
                    'familyname' : 'sn',
                    'job_position' :'title',
                    'department' : 'departmentNumber'}

config.py 설정을 한 후 재부팅합니다.

# reboot

4. Web 접속

UVDI 서버의 설치가 완료되면 관리 프로그램(Manager)을 이용하여 가상 머신의 설치, 운영을 할 수 있습니다. 관리 프로그램을 사용하기 위해서는 웹 브라우저가 필요합니다. 웹 브라우저는 chrome이나 firefox를 권장합니다.

웹 브라우저의 주소 창에 Master 서버의 IP와 Port를 입력하면 관리 프로그램에 접속합니다. Port는 /home/orchard/pvdi/src/libs/config.py의 PORT 변수의 값을 사용합니다.

# /home/orchard/pvdi/src/libs/config.py 파일

# Web Server port
PORT = 80

기본 설정값은 80이므로 Port 번호를 생략할 수 있습니다.

http://Master 서버 ip:포트 번호

그림 12. admin 계정으로 로그인 준비

그림 13. admin 계정으로 로그인

admin의 PW는 로그인 후에 변경할 수 있습니다.

5. Master 작동 확인

Master에서 동작하는 프로세스는 pvdi_was, nginx 입니다. 이 2개의 프로세스가 모두 동작해야 Master가 제대로 운영됩니다. 만약 VM에 접속이 안된다면 이들 프로세스의 상태를 점검해보세요.

5-(1). pvdi_was

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

# ps aux | grep pvdi | grep -v "grep"
orchard   2658  0.0  1.6  66484 16728 ?        S     5월13   0:18 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   2666  0.0  3.9 154668 40888 ?        S     5월13   1:24 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   2667  0.0  5.1 165888 52172 ?        S     5월13   9:42 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   2668  0.0  3.9 154532 40876 ?        S     5월13   1:39 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   2669  0.0  3.9 219404 40236 ?        S     5월13   9:59 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini

5-(2). nginx

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

# ps aux | grep nginx | grep -v "grep"
root      2416  0.0  0.1  64388  1352 ?        Ss    5월13   0:00 nginx: master process /usr/sbin/nginx
www-data  2418  0.0  0.2  65024  2560 ?        S     5월13   0:45 nginx: worker process
www-data  2419  0.0  0.2  65024  2540 ?        S     5월13   0:31 nginx: worker process
www-data  2420  0.0  0.2  65028  2436 ?        S     5월13   0:34 nginx: worker process
www-data  2421  0.0  0.2  65024  2536 ?        S     5월13   0:48 nginx: worker process

6. 문의 사항

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