IT/OpenStack

[OpenStack] 가상 네트워크 구성 및 overlay를 사용하여 Live-migration 구현

Erynn 2022. 3. 31.
실습 주제 : OpenStack을 사용하여 Live-migration 구현
VMware Workstation
OS : CentOS 7.9
OpenStack Release : Train
노드 생성 및 네트워크 설정이 이전 글과 이어집니다.
2022.03.30 - [IT/OpenStack] - [OpenStack] Packstack을 활용하여 OpenStack 설치 (다중노드)
 

[OpenStack] Packstack을 활용하여 OpenStack 설치 (다중노드)

실습 주제 : PackStack을 활용하여 OpenStack 설치 (다중노드) VMware Workstation OS : CentOS 7.9 OpenStack Release : Train 실습 구성도 control, compute1, compute2로 총 3개의 노드로 구성한다. 내부, 관..

erynn.tistory.com


 

실습 구성도

  • compute1 과 compute2에 각각 인스턴스를 생성한다.
  • VxLAN을 통해 Live-migration 가능하도록 구현한다.

 


네트워크 생성


 

1.   Bridge 생성

Bridge는 Host Network 와 Guest Network를 연결해서 Guest 컴퓨터가 네트워킹할 수 있도록 만들어 준다.

//Control Node 에서 작업

//위치 이동
cd /etc/sysconfig/network-scripts
//내용복사하면서 br-ex 파일도 생성
cp ifcfg-eth0 ifcfg-br-ex
//eth0 파일수정
vi ifcfg-eth0

TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
NM_CONTORLLED=no

//br-ex파일수정
vi ifcfg-br-ex

TYPE=OVSBridge
DEVICETYPE=ovs
BOOTPROTO=none
NAME=br-ex
DEVICE=br-ex
ONBOOT=yes
IPADDR=211.183.3.100
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
NM_CONTROLLED=no

//네트워크 재시작
systemctl restart network

시간이 오래걸리면 세션이 끊겼을 수도 있으니 다시 접속해보자

 

결과적으로, eth0의 IP가 br-ex로 들어가야하며, eth0은 IP가 없어야 한다.

2. 외부 네트워크 생성

//control 에서 작업

[root@control ~]# source keystonerc_admin
//네트워크 생성
[root@control ~(keystone_admin)]# openstack network create --provider-physical-network extnet --provider-network-type flat --external ext_net
//서브넷 생성
[root@control ~(keystone_admin)]# openstack subnet create ext_sub --network ext_net --subnet-range 211.183.3.0/24 --allocation-pool start=211.183.3.111,end=211.183.3.199 --gateway 211.183.3.2 --dns-nameserver 8.8.8.8 --no-dhcp

네트워크 생성 시, 

위와 같은 오류가 뜨면 오픈스택 대시보드에서 라우터, 네트워크, 이미지를 삭제하고 다시 네트워크를 생성한다.

대시보드 > 관리 > 네트워크 > 라우터 > 라우터 삭제

대시보드 > 관리 > 네트워크 > 네트워크 > 네트워크 전부 삭제

대시보드 > 관리 > Compute > 이미지 > 이미지 삭제

 

3. 내부 네트워크 생성

//overlay 네트워크 생성
[root@control ~(keystone_admin)]# openstack network create int_net --provider-network-type vxlan
//서브넷 생성
[root@control ~(keystone_admin)]# openstack subnet create int_sub --network int_net --subnet-range 192.168.100.0/24 --gateway 192.168.100.1 --dns-nameserver 8.8.8.8

vxlan이 생성이 안되는 경우,

answer file의 795 CONFIG_NEUTRON_ML2_TYPE_DRIVERS=geneve,flat,vxlan  부분에 vxlan 이 추가가 되어있는지 확인한다.

overlay? VxLAN? 
overlay : 서로 다른 네트워크 위에 얇은 널판지를 얹어서 왔다갔다 할 수 있게 해놓은 것이다.
vxlan : 물리 네트워크에서 연결된 서로 다른 컴퓨트 노드의 VM은 통신할 때 올려놓은 널판지 위에 가상의 터널을 만들어서 그 터널로 통신하는데, 그 터널이 바로 vxlan이다.
일반적으로 overlay 네트워크를 사용할때 vxlan 프로토콜을 많이 사용한다고 한다.

4. 라우터 생성

[root@control ~(keystone_admin)]# openstack router create R1

아래그림은 왼쪽부터 외부네트워크, 라우터, 내부네트워크를 생성한 후 네트워크 토폴로지이다.

 

5. 라우터에 인터페이스 연결 

  • 외부네트워크 : 대시보드 > 프로젝트 > 네트워크 > 라우터 > 게이트웨이 설정 > 외부네트워크(ext_net) 선택
  • 내부네트워크 : 대시보드 > 프로젝트 > 네트워크 > 라우터 > 라우터 선택 > 인터페이스 > 인터페이스 추가 > 내부네트워크(int_net) 선택

라우터 범위를 111~199까지로 지정했으므로 그 사이의 IP인 211.183.3.174로 지정되었음을 볼 수 있다.

오른쪽 서브넷은 반드시 192.168.100.1 이어야 한다.

 


인스턴스 생성


 

1. 이미지 생성

인스턴스를 생성하기전, 우리는 이미지를 사용해서 인스턴스를 생성할 것이므로 이미지를 다운받아준다.

bionic-server-cloudimg-amd64.img / Ubuntu Server 18.04 LTS(Bionic Beaver) daily builds 를 다운로드 한다.

 

▷우분투 이미지 다운로드

https://cloud-images.ubuntu.com/bionic/current

 

프로젝트 > Compute > 이미지 > 이미지 생성 > 이름,이미지소스,포맷 선택 > 이미지 생성

이미지 생성 참고

2. 보안그룹 및 규칙 생성

프로젝트 > 네트워크 > 보안그룹 > 보안그룹 생성 > 이름 지정 후 보안그룹 생성 (UBUNTU_SG)

UBUNTU_SG > 규칙 추가 > ALL ICMP, HTTP, SSH 추가

보안규칙 참고

 

3. 키 페어 생성

프로젝트 > Compute > 키 페어 > 키 페어 생성 > 이름, 키 유형(SSH 키) 작성 및 선택 > 키 페어 생성

 

4. 인스턴스 생성

프로젝트 > Compute > 인스턴스 > 인스턴스 시작 > 세부 사항 선택(하단 참고) > 인스턴스 시작

  • 세부정보 > 인스턴스 이름 작성
  • 소스 > 만들어 둔 이미지 선택 

인스턴스 소스 설정 참고

  • Flavor > m1.small
  • 네트워크 > int_net (내부 네트워크) 선택
  • 보안그룹 > UBUNTU_SG (새로 생성한 보안그룹) 선택
  • Key Pair > ubuntu (새로 생성한 키 페어) 선택

동일한 방법으로 추가로 인스턴스를 한 대 더 생성하였다.

인스턴스 생성 화면
네트워크 토폴로지

5. 인스턴스 생성 확인

compute1, compute2 에 각각 인스턴스가 한대씩 생성되었음을 확인할 수 있다.

[root@compute1 ~]# virsh list --all
 Id    이름                         상태
----------------------------------------------------
 1     instance-00000001              실행중
[root@compute2 ~]# virsh list --all
 Id    이름                         상태
----------------------------------------------------
 1     instance-00000002              실행중

Live - migration


compute2에 있는 인스턴스를 compute1으로 마이그레이션 할 것이다.

Live-migration
인스턴스가 계속 실행되는 동안 가상머신을 다른 OpenStack Compute 서버로 이동하는 것

 

1. 인스턴스 ID 확인

compute2에 있는 ubuntu02의 인스턴스 ID를 복사해둔다. (5ffcb711-cebd-4675-8b27-7135122928f7)

[root@control ~(keystone_admin)]# openstack server list
+--------------------------------------+----------+--------+-------------------------+-------------+----------+
| ID                                   | Name     | Status | Networks                | Image       | Flavor   |
+--------------------------------------+----------+--------+-------------------------+-------------+----------+
| 5ffcb711-cebd-4675-8b27-7135122928f7 | ubuntu02 | ACTIVE | int_net=192.168.100.234 | ubuntu18.04 | m1.small |
| fd140fe7-10f4-49cf-bdae-5ce0db76d33d | ubuntu01 | ACTIVE | int_net=192.168.100.147 | ubuntu18.04 | m1.small |
+--------------------------------------+----------+--------+-------------------------+-------------+----------+

참고로, openstack server show 인스턴스ID 로 인스턴스 위치를 확인할 수 있다.

[root@control ~(keystone_admin)]# openstack server show 5ffcb711-cebd-4675-8b27-7135122928f7
+-------------------------------------+----------------------------------------------------------+
| Field                               | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                   | AUTO                                                     |
| OS-EXT-AZ:availability_zone         | nova                                                     |
| OS-EXT-SRV-ATTR:host                | compute2                                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute2                                                 |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000002                                        |

 

2. Live-migration 실행

--block-migration : migration 시도 시, storage migration이 동시에 일어나는데, disk가 제대로 이동이 안되는 오류가 일어날 수 있으므로 이를 방지하게 위해 옵션 추가

[root@control ~(keystone_admin)]# openstack server migrate 5ffcb711-cebd-4675-8b27-7135122928f7 --live compute1 --block-migration

명령어 입력 후 화면

 

명령어 입력 후 액션로그 확인

 

3. Live-migration 결과 확인

compute2의 인스턴스가 compute1으로 이동했음을 확인할 수 있다.

[root@compute1 ~]# virsh list --all
 Id    이름                         상태
----------------------------------------------------
 1     instance-00000001              실행중
 2     instance-00000002              실행중
[root@compute2 ~]# virsh list --all
 Id    이름                         상태
----------------------------------------------------
[root@control ~(keystone_admin)]# openstack server show 5ffcb711-cebd-4675-8b27-7135122928f7
+-------------------------------------+----------------------------------------------------------+
| Field                               | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                   | AUTO                                                     |
| OS-EXT-AZ:availability_zone         | nova                                                     |
| OS-EXT-SRV-ATTR:host                | compute1                                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute1                                                 |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000002                                        |