실습 주제 : OpenStack을 사용하여 Live-migration 구현
VMware Workstation
OS : CentOS 7.9
OpenStack Release : Train
노드 생성 및 네트워크 설정이 이전 글과 이어집니다.
2022.03.30 - [IT/OpenStack] - [OpenStack] Packstack을 활용하여 OpenStack 설치 (다중노드)
실습 구성도
- 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 |
'IT > OpenStack' 카테고리의 다른 글
[OpenStack] Packstack을 활용하여 OpenStack 설치 (다중노드) (0) | 2022.03.30 |
---|