PVDI2 Master-VM Installation Manual

Master VM은 node 위에 VM(Virtual Machine)으로 구동됩니다. 따라서 node의 설치가 우선되어야 합니다.

pvdi2 node 설치 방법은 아래 링크를 참조해주세요. 아래의 과정들은 Master VM을 설치할 node에서 진행합니다.

1. 준비사항

1-1. 설치 이미지 파일

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

# wget --user=orchard --ask-password http://repo.iorchard.co.kr/lgu/pvdi-master-2.0.2-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면 충분합니다. 디스크의 유형은 qcow2가 아닌 raw로 해야합니다.

# 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) 수정

a. disk 옵션 설정

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

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

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

b. 네트워크 설정

vif 옵션을 설정하기 위해서는 node의 xenbr0, xenbr1을 설정해야 합니다. 설정 방법은 pvdi2_node_install 문서에 기록되어 있습니다. 다시 한번 체크한 뒤 설치를 진행합니다.

vif는 Virtual Interface를 의미합니다. 자세한 설명은 아래 링크를 참고해 주세요.

2. Master VM 설치

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

# 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) 네트워크 설정

외부 interface (eth0)를 설정합니다.

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

6) 파티션 설정

파티션 생성 준비

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

swap 파티션 생성

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

/ 파티션 생성

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

파티션 설정 마무리

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

7) 베이스 시스템 설치

베이스 시스템이 설치되어지고 mysql의 root 패스워드를 설정합니다.

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

위 과정이 끝나면 Master VM의 설치가 완료되며 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-2.0.2-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"
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.30
    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.30
+    netmask 255.255.255.0

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

# ifup eth1

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

# ifconfig
# ping [pvdi-node ip]

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

# ping 10.1.1.30
PING 10.1.1.30 (10.1.1.30) 56(84) bytes of data.
64 bytes from 10.1.1.30: icmp_req=1 ttl=64 time=0.060 ms
64 bytes from 10.1.1.30: icmp_req=2 ttl=64 time=0.017 ms
64 bytes from 10.1.1.30: icmp_req=3 ttl=64 time=0.017 ms
^C
--- 10.1.1.30 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

# 공지 팝업창에 유효기간을 설정합니다.
# Notice popup days ago.
NOTICE_POPUP_DAYS = 5

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

# DHCP 인터페이스를 지정합니다. 다중 인터페이스에 DHCP를 사용할 ᅟ수 있습니다.
# DHCP_INTERFACES
+ DHCP_INTERFACES = "eth1"  # "eth1 eth2" for multiple ifaces. DHCP 인터페이스를 입력합니다.

# 웹 서버 포트를 설정합니다. 웹 서버는 일반적으로 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                            # SSH 포트가 22번이 맞는지 확인합니다.
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, RADIUS)을 설정합니다.
# User authentication : LDAP, DB, RADIUS
USERAUTH_METHOD = "DB" # 'LDAP' or 'DB' or 'RADIUS'
#USERAUTH_METHOD = "RADIUS" # 'LDAP' or 'DB' or 'RADIUS'

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://<ldap_server_ip>"

# 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'}

## RADIUS settings
RADIUS_SERVER = '<radius_server_ip>'  # RADIUS server IP address
RADIUS_PORT = 1812  # Default UDP 1812
RADIUS_ACCTPORT = 1813  # Default Accounting RADIUS port 1813
RADIUS_SECRET = '<radius_secret_key>'  # RADIUS secret key

# Graphite web URL 주소를 입력합니다. 해당 주소는 mastervm install 시 공인 IP를 자동으로 할당하게 됩니다.
# Graphite-web URL
GRAPHITE_URL = "http://192.168.0.30:8080"  # default port 8080

# Web client URL 주소를 입력합니다. 해당 주소는 mastervm install 시 공인 IP를 자동으로 할당하게 됩니다.
# Web client URL
WEBCLIENT_URL = "http://192.168.0.30:8081"  # default port 8081

# webdisk에 허용되는 file type을 지정합니다. default 설정은 'zip' 입니다.
# webdisk allowed file types
WEBDISK_FILE_TYPES = ['zip']  # ['zip', '7z']. ['*'] means everything allowed.

# 로그인 보안 설정으로 로그인 실패 횟수가 아래 설정되어진 값이 초과되어질 경우 해당 계정은 비활성화가 됩니다.
# security
FAILED_LOGINS = 5  # account lockup after FAILED_LOGINS.

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

# reboot

4. Web 접속

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

웹 브라우저의 주소 창에 Master VM의 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://MasterVM ip:포트 번호

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

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

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

5. Master VM 작동 확인

Master VM에서 동작하는 프로세스는 uwsgi(was), nginx(web server), carbon-cache(graphite) 입니다. 이 3개의 프로세스가 모두 동작해야 Master VM이 제대로 운영됩니다. 만약 VM에 접속이 안된다면 이들 프로세스의 상태를 점검해보세요.

5-1. 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

5-2. uwsgi

pvdi2 master vm에서는 3개의 was가 구동되게 됩니다.

  1. pvdi_was
  2. pvdi_was_web
  3. graphite_was

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

# ps aux | grep pvdi | grep -v "grep"
orchard   4760  0.0  1.7  67128 17488 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   4761  0.0  3.6 151728 37392 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   4762  0.0  3.6 151596 37392 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   4763  0.0  3.9 154916 40708 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   4764  0.0  4.0 155412 41440 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi.ini
orchard   4774  0.0  1.6  66948 17284 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi_web.ini
orchard   4775  0.0  1.3 124320 13852 ?        Sl   17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi_web.ini
orchard   4776  0.0  1.2  66948 12980 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/pvdi_uwsgi_web.ini
orchard   4793  0.0  1.6  66884 17316 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/graphite_uwsgi.ini
orchard   4794  0.0  1.3  66884 13476 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/graphite_uwsgi.ini
orchard   4795  0.0  1.3  66884 13472 ?        S    17:14   0:00 /usr/local/bin/uwsgi --ini /home/orchard/pvdi/scripts/../conf/graphite_uwsgi.ini

5-2. carbon-cache

carbon-cache는 graphite(monitoring tool)에 필요한 데이터를 수집하고 저장하는 역할을 합니다.

# ps aux | grep carbon-cache | grep -v "grep"
orchard      2717  0.0  1.5  70884 15480 ?        Sl   11월01   0:14 /usr/bin/python /opt/graphite/bin/carbon-cache.py start

해당 프로세스가 구동되지 않을 경우 웹 리소스 모니터링은 정상 작동하지 않습니다. 따라서 다음 명령으로 carbon-cache를 실행합니다. (단, root가 아닌 orchard 계정으로 실행해야 합니다.)

# sudo -u orchard /opt/graphite/bin/carbon-cache.py start

6. 트러블슈팅

6-1. carbon-cache 실행 스크립트가 없는 경우

install_master.sh에서 graphite.tar.gz의 압축이 제대로 해제되지 않았기 때문에 carbon-cache 실행 스크립트가 없는 것입니다.

root가 아닌 orchard 계정으로 다음과 같이 graphite.tar.gz의 압축을 해제합니다.

sudo tar xvfz /home/orchard/pvdi/vendorsrc/graphite.tar.gz -C /opt

7. 문의 사항

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