20
㈜유미테크 Openstack Live Migration

Openstack live migration

  • Upload
    ymtech

  • View
    685

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Openstack live migration

㈜유미테크

Openstack Live Migration

Page 2: Openstack live migration

목차

• NFS를 이용한 Live Migration

• NFS 설치 및 설정

• Live Migration

• 기타1. CPU 관련 오류

• 기타2. screen 사용법

• 기타3. Shared Storage 설정 후 인스턴스 생성 문제

2

Page 3: Openstack live migration

NFS를 이용한 Live Migration

• NFS (Network File System) : 네트워크 상의 Shared Storage를, 실제 스토리지 처럼 사용할 수 있도록 지원하는 클라이언트/서버형 응용프로그램

• Live Migration : 실행중인 가상 시스템을 시스템 또는 시스템에서 실행중인 서비스를 중지하지 않고 다른 실제 호스트로 옮기는 기술

3

NFS Server (Controller node)

Shared Storage

Instance

NFS Client #1 (Compute node #1)

Shared Storage

NFS Client #2 (Compute node #2)

Shared Storage

Memory Information

NFS Server (Controller node)

Shared Storage

Instance

NFS Client #1 (Compute node #1)

Shared Storage

NFS Client #2 (Compute node #2)

Shared Storage

Memory Information

Live Migration (Memory Sync)

Page 4: Openstack live migration

NFS 설치 및 설정

• /etc/hosts 파일에 각 호스트의 정보를 설정한 후, ping 명령어를 통해 통신이 되는지 확인한다.

4

~$ sudo vi /etc/hosts

127.0.0.1 localhost controller

127.0.1.1 controller

100.100.100.100 controller

100.100.100.111 compute1

100.100.100.112 compute2

~$ ping controller

PING controller (100.100.100.100) 56(84) bytes of data.

64 bytes from controller (100.100.100.100): icmp_req=1 ttl=64 time=0.241 ms

~$ ping compute1

PING compute1 (100.100.100.111) 56(84) bytes of data.

64 bytes from compute1 (100.100.100.111): icmp_req=1 ttl=64 time=0.199 ms

~$ ping compute2

PING compute2 (100.100.100.112) 56(84) bytes of data.

64 bytes from compute2 (100.100.100.112): icmp_req=1 ttl=64 time=0.135 ms

Page 5: Openstack live migration

NFS 설치 및 설정 (계속)

• id명령을 통해 각 노드의 stack과 libvirt의 UID와 GID가 같은지 확인한다.

– UID와 GID가 다른 경우, usermod, groupmod 명령을 통해 통일 시킨다.

• Controller node에 NFS Server를 설치한다.

• /etc/exports 파일에 아래와 같이 Shared Storage 설정을 추가한다.

5

~$ id

uid=1001(stack) gid=1001(stack) groups=1001(stack),27(sudo),128(libvirtd)

~$ sudo apt-get install nfs-kernel-server

~$ sudo vi /etc/exports

#/srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)

/opt/stack/data/nova/instances 100.100.100.100/255.255.0.0(rw,sync,fsid=0,no_root_squash)

instance data가 저장되는 Shared Storage 경로 NFS Server IP ※ ‘0’과 ‘(‘사이에 공백없이 작성한다.

Page 6: Openstack live migration

NFS 설치 및 설정 (계속)

• IDMAPD 설정을 한다.

• Ubuntu 11.10 이전 버전의 환경이라면 아래의 설정을 한다.

• Shared Storage 실행과 검색 권한을 추가한다.

6

~$ sudo vi /etc/idmapd.conf

[Mapping]

Nobody-User = nobody

Nobody-Group = nogroup

~$ sudo /etc/default/nfs-kernel-server

NEED_IDMAPD=yes

~$ sudo chmod o+x /opt/stack/data/nova/instances

Page 7: Openstack live migration

NFS 설치 및 설정 (계속)

• NFS Server를 재구동 한다.

– nfs-kernel-server시 no_subtree_check 관련 warning이 발생하지만 무시한다.

• Compute node에 NFS client 설치를 한다.

• Ubuntu 11.10 이전 버전의 환경이라면 아래의 설정을 한다.

7

~$ sudo service nfs-kernel-server restart

~$ sudo service idmapd restart

~$ sudo apt-get install nfs-common

~$ sudo /etc/default/nfs-common

NEED_IDMAPD=yes

Page 8: Openstack live migration

NFS 설치 및 설정 (계속)

• 각 Compute node에 NFS server 정보를 추가한다.

• 각 Compute node에서 NFS Server를 mount 한다.

8

~$ sudo vi /etc/fstab

# /etc/fstab: static file system information

UUID=e2118062-2ff7-41f5-aa28-0500761244da none swap sw 0 0

100.100.100.100:/ /opt/stack/data/nova/instances nfs4 defaults 0 0

instance data가 저장되는 Shared Storage 경로 NFS Server IP

~$ sudo mount -a -v

mount: proc already mounted on /proc

mount.nfs4: timeout set for Fri Jul 11 14:43:57 2014

mount.nfs4: trying text-based options ‘addr=100.100.100.100,clientaddr=100.100.100.111’

100.100.100.100:/ on /opt/stack/data/nova/instances type nfs4 (rw)

nothing was mounted

~$

Page 9: Openstack live migration

NFS 설치 및 설정 (계속)

• 모든 노드에서 Shared Storage의 권한설정을 확인한다.

• 각 Compute node에서 Shared Storage가 정상적으로 마운트 되었는지 확인한다.

9

~$ ls -ld /opt/stack/data/nova/instances

drwxr-xr-x 11 stack root 4094 Jul 11 10:36 /opt/stack/data/nova/instances/

~$ dh -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 920G 7.1G 849G 1% /

udev 7.8G 4.0K 7.8G 1% /dev

tmpfs 3.2G 836K 3.2G 1% /run

none 5.0M 0 5.0M 0% /run/lock

none 7.9G 200K 7.9G 1% /run/shm

cgroup 7.9G 0 7.9G 0% /sys/fs/cgroup

100.100.100.100:/ 910G 78G 786G 9% /opt/stack/data/nova/instances

Page 10: Openstack live migration

NFS 설치 및 설정 (계속)

• 각 Compute node의 libvirt 설정을 수정한다.

10

~$ vi /etc/libvirt/libvirtd.conf

# This is enabled by default, uncomment this to disable it

listen_tls = 0

# This is disabled bt default, uncomment this to enable it

listen_tcp = 1

# mechanism in /etc/sasl2/libvirt.conf

auth_tcp = “none”

~$ vi /etc/init/libvirt-bin.conf

env libvirtd_opts=“-d -l”

~$ vi /etc/default/libvirt-bin

libvirtd_opts=“-d -l”

-l 은 listen 설정이다.

-l 은 listen 설정이다.

Page 11: Openstack live migration

NFS 설치 및 설정 (계속)

• libvirt를 재 구동 시킨다.

• 프로세스상태를 확인하여 libvirt가 listen 옵션이 추가되어 구동 중인지 확인한다.

• nova 설정에 libvirt의 live migration 설정을 추가한다.

– NFS가 아닌, glusterFS를 사용한다면, ‘VIR_MIGRATE_UNSAFE’ flag도 추가한다.

11

~$ sudo service libvirt-bin stop && sudo service libvirt-bin start

libvirt-bin stop/waiting

libvirt-bin start/running, process 17719

~$ sudo ps -ef | grep libvirt

root 17719 1 0 15:45 ? 00:00:00 /usr/sbin/libvirtd -d -l

~$ sudo vi /etc/nova/nova.conf

live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE

Page 12: Openstack live migration

Live Migration

• Horizon에서 인스턴스와, 해당 인스턴스가 위치한 node를 확인한다

• compute node1의 인스턴스를 compute node2로 Live Migration (CLI환경)

12

~$ cd ~/devstack/

~/devstack$ source .openrc admin demo

~/devstack$ nova live-migration cirros_compute1 compute2

Page 13: Openstack live migration

Live Migration (계속)

• 해당 인스턴스가 Migrating를 진행한다.

13

Page 14: Openstack live migration

Live Migration (계속)

• compute node1의 인스턴스를 compute node2로 Live Migration (UI환경)

– Migration하려는 인스턴스에서 ‘More->Live Migration Instance’를 선택한다.

14

Page 15: Openstack live migration

Live Migration (계속)

• Migration 하려는 node를 선택한다.

Block Migration : shared storage에 인스턴스를 저장하고 메모리만 이동하는 live migration과는 달리, 메모리 뿐 아니라 블록 디바이스(인스턴스 스토리지, 볼륨 스토리지)도 같이 대상 호스트로 이동하는 migration 방법으로, live migration에 비해 속도는 느리지만 shared storage를 두지 않아도 되는 장점이 있다.

15

인스턴스가 위치한 현재 node

Migration하려는 node

Page 16: Openstack live migration

Live Migration (계속)

• 해당 인스턴스가 Migrating를 진행한다.

16

Page 17: Openstack live migration

기타1. CPU 관련 오류

• Live Migration시 CPU 관련 오류

– Live Migration시 아래와 같은 오류가 발생할 수 있다.

– screen으로 log를 확인한다.

– virCPUCompareResult의 결과값이 ‘0’인 경우는, 두 CPU가 INCOMPATIBLE 할 때이다.

17

~/devstack$ nova live-migration cirros_compute2 compute1

ERROR (BadRequest): Live Migration of instance cirros_compute2 to host compute1 failed

(HTTP 400) (Request-ID: req-41e1744d-1b48-4918-8d09-7867cad61a6b)

~/devstack$ screen -r stack …

[req-41e1744d-1b48-4918-8d09-7867cad61a6b ac90b7751f7f4da78f238916f3d01788 0173fc0a9e3d42caa34659f84ee7cb7c] Live

migration of instance cirros_compute2 to host compute1 failed

RemoteError: Remote error: InvalidCPUInfo_Remote Unacceptable CPU info: CPU doesn't have compatibility.

2014-07-11 22:33:41 TRACE nova.api.openstack.compute.contrib.admin_actions 0

2014-07-11 22:33:41 TRACE nova.api.openstack.compute.contrib.admin_actions Refer to http://libvirt.org/html/libvirt-

libvirt.html#virCPUCompareResult

Page 18: Openstack live migration

기타1. CPU 관련 오류 (계속)

• 각 Compute node의 CPU를 확인한다.

– 상위버전인 Westmere에서 Nehalem의 인스턴스를 수용할 수 있지만, Nehalem에서 Westmere의 인스턴스를 수용할 수 없기에 Live Migration이 진행되지 않았다.

18

~/devstack$ nova hypervisor-show compute1

+----------------+-------------+

| Property | Value |

+----------------+-------------+

| cpu_info_arch | x86_64 |

| cpu_info_model | Nehalem |

+----------------+-------------+

~/devstack$ nova hypervisor-show compute2

+----------------+--------------+

| Property | Value |

+----------------+--------------+

| cpu_info_arch | x86_64 |

| cpu_info_model | Westmere |

+----------------+--------------+

Page 19: Openstack live migration

기타2. screen 사용법

• screen : openstack의 log들을 한번에 볼 수 있는 서비스

• screen 사용법

– screen 시작 : screen -r stack

– service log이동 : ctrl+a, n

– 현재 log의 스크롤 : ctrl+a, esc, down or up

– screen 종료 : ctrl+a+d

19

Page 20: Openstack live migration

기타3. Shared Storage 설정 후 인스턴스 생성 문제

• Shared Storage로 ‘instances’폴더를 공유한 후, 인스턴스 생성을 할때 권한이 없다는 오류 또는, Scheduling 오류가 발생한다면 /etc/libvirt/qemu.conf파일을 다음과 같이 수정한다.

20

~$ sudo vi /etc/libvirt/qemu.conf

# The user ID for QEMU processes run by the system instance.

# user = “root”

# The group ID for QEMU processes run by the system instance.

# group = “root” …

~$ sudo vi /etc/libvirt/qemu.conf

# The user ID for QEMU processes run by the system instance.

user = “stack”

# The group ID for QEMU processes run by the system instance.

group = “stack” …