0부터 시작하는 OpenStack 공부 - Load Balancer & Static Routing

Jaehong Lee·2022년 9월 16일
0
post-thumbnail

1. 실습 환경 준비

Base Image 등록

Image 다운 받기

출처 : http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img

wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img
  • Image 를 OpenStack 에 다운 받자
  • 위의 크기와 동일해야 한다

Glance 서비스에 Image 등록

명령어 가이드 출처 : https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html/command-line_interface_reference_guide/glanceclient_commands

openstack image create "CIRROS" --file cirros-0.5.1-x86_64-disk.img --disk-format img --container-format bare --pub
  • 위 명령어를 통해 Image 를 등록하자
  • disk format 은 qcow2 이다. img 는 확장자 이다

  • 잘 등록되었다

해당 Image 는 Test 용 Image 이기에 username / password 가 모두 등록되있으므로 Key-Pair 를 생성하지 않아도 된다


확인 사항

  • flavor 확인 - m1.tiny

  • network ID 확인 - mynet1 의 ID ( ebe78f35-b03f-4662-bd14-ee9fb1a0c626 )

Instacne 생성

openstack server create --flavor m1.tiny --image CIRROS --nic net-id=ebe78f35-b03f-4662-bd14-ee9fb1a0c626 --security-group permitweb TESTDB
  • Instacne 를 생성해주자

  • IP 를 확인해보자

2. Router Static 경로 지정

[root@localhost 0916(logged)]# ssh -i ~/.ssh/chulsoo.pem -l centos 211.183.3.205
Last login: Fri Sep 16 00:01:15 2022 from 211.183.3.1
[centos@centos1 ~]$ ping 172.16.123.19
PING 172.16.123.15 (172.16.123.15) 56(84) bytes of data.
  • 전에 생성한 CentOS1 에서 새로 생성한 Instance 에 Ping 을 보낼려하면 실패한다. 이는 서로 다른 Network 에 있으며, 서로의 사설 주소 구간을 모르기 때문이다

  • 정적 경로 추가를 눌러주자

각 라우터는 서로의 사설 구간에 대해 모른다. 따라서, 각각 정적 경로를 설정해야지 통신이 가능하다

  • Router 1 에서는 Router 2 의 사설 구간의 네트워크 대역으로 가는 것은 Router 2 로 보내도록 Router 2 의 Floating IP 를 지정한다
  • 대상 CIDR 은 목적지 네트워크 대역, 다음 HOP 은 해당 목적지 네트워크 대역의 Router 의 IP 를 입력해준다. 이를 통해 다른 사설 네트워크와 통신을 할 때, 라우터는 다른 사설 네트워크 대역에 대해서는 모르지만, 해당 대역으로 가는 요청은 해당 사설 네트워크의 라우터로 보내게 정적 경로를 지정했으므로, 해당 네트워크로 가는 요청을 지정된 라우터로 보내어 통신이 가능하게 한다
    • 물론 다른 라우터에서도 이 라우터와 이 라우터의 사설 네트워크 대역에 대한 정적 경로를 지정해야 서로 통신이 가능하다

  • Router 2 에서도 동일하게 Router 1 의 사설 구간의 네트워크 대역으로 가는 것은 Router 1 로 보내도록 Router 1 의 Floating IP 를 지정한다

3. Load Balancer

Load Balancer 종류

  • L4 LB 는 IP 기반의 트래픽 분산 -> AWS 에서 NLB
  • L7 LB 는 주소 기반의 트래픽 분산 -> AWS 에서 ALB

현재 버전의 LB 는 HAProxy 기반의 L4 LB 이다


Load Balancer 생성

  • Create Load Balancer 를 누르자

  • 이름과 IP 주소, Subnet 을 지정해주자. 우리는 mysubnet2 에 Load Balancer 를 생성할 것이다

  • Foreground 를 지정한다. 우리는 HTTP 프로토콜로 80 번 Port 로 들어오는 것에 대해 처리한다

method 를 확인하자

  • LEAST CONNECTIONS : 각 서버로 접속한 사용자들의 세션을 확인하여 가장 접속이 적은 쪽으로 보내준다
  • ROUND_ROBIN : 돌아가면서 한 번씩
  • SOURCE_IP : 출발지 IP 를 확인한다. 서버의 개수에 따라 IP 의 지정돤 개수의 BIT 를 확인한다. 서버가 2 대라면 BIT 한 자리만 확인하고, 4 대라면 BIT 두 자리를 확인한다

    서버 2 대 -> 0000 0000 , 0000 0001
    서버 4 대 -> 0000 0000 , 0000 0001 , 0000 0010 , 0000 0011

  • ROUND_ROBIN 을 선택하자

  • 멤버를 지정하자. 연결될 서버라고 보면 된다. Weight 를 통해 요청을 전달할 가중치를 지정할 수 있다

  • Ping 을 보냈을 때, 만약 Ping 이 제대로 가지 않는다면, 5 초를 간격으로 3 번 시도하는데, 5 초 이내에 응답이 오지 않으면 해당 멤버를 트래픽 전달 대상에서 제외시키는 설정이다

  • 우리는 HTTP 를 이용해 기본 페이지로 접속이 가능한지 확인하게 할 것이다. 만약, index.html 이 없으면, 해당 서버는 제외된다. 다시 index.html 을 생성해주면, 해당 서버는 Load Balancer 에서 다시 트래픽을 전달해준다
  • Load Balancer 를 생성해주자!!!

Floating Ip 할당 및 확인

  • LB 에 Floating IP 를 할당해주자

  • Floating IP 확인
  • 위와 같은 구조이다. LB 로 접근하려면 Router 에서 NAT 를 거쳐서 LB 에 트래픽을 전달해준다

  • 처음 접속시

  • 다음 접속시에는 다른 페이지가 출력된다. 라운드 로빈 방식으로 요청을 돌아가면서 전달해주는 것이다

index.html 삭제 및 재생성

삭제

  • CentOS1 의 index.html 을 삭제하자

  • 새로 고침을 계속 해도 CentOS2 만 출력된다. CentOS1 서버는 살아있지만, 기본 페이지가 없으므로 LB 에서 트래픽 전달을 안해주는 것이다

재생성

  • 다시 index.html 을 생성해주자

  • 트래픽을 다시 전달해준다
profile
멋진 엔지니어가 될 때까지

0개의 댓글