'2019/05/06'에 해당되는 글 1건

  1. 2019.05.06 Load balancer as a service Octavia
OpenStack2019.05.06 20:19

안녕하세요!! 

 

그동안 어떻게 지내셨나요? 저는 그동안 여러 프로젝트를 하느라 정말 바쁜 나날을 보내고 있었습니다. 그래서, 블로그에 글을 올릴 시간조차 없었네요! 오늘도 사실은 영어로 포스팅을 하려고 하다가 시간도 너무 오래 걸리고, 영어로 바로 쓰려니 무슨말을 어떻게 써야할지 생각조차 나질 않더라구요! 그래서, 그냥 2019년에 처음으로 쓰는 블로그 글이니까 그냥 한글로 오랜만에 써보기로 했어요. 그리고나서, 다시 영어로 바꿔 쓰면 되니까요!!

 

오늘은 Octavia에 대해서 한번 써보려고 해요. 오픈스택이 뭘하는건지는 다들 아실테고, 오픈스택이 어떤 서비스로 이루어져 있는지도 다들 아실꺼라 생각이 듭니다. 아래 그림이 레드햇에서 제공하는 오픈스택 아키텍처입니다. 요즘 오픈스택에는 너무나도 많은 서비스들이 있기 때문에, 그 중에서도 가장 많이 사용하는 서비스들을 아래와 같이 레드햇에서 제공을 하고 있습니다. 

 

그럼, 오늘 이야기할 Octavia가 뭐냐구요? 뭐냐하면, 바로 Load Balancer 서비스입니다. 로드밸런서가 뭐냐구요? 로드밸런서는 한마디로 말해서 많은 사용자가 웹사이트를 사용할때 웹사이트의 부하를 분산해주는 부하 분산 처리기라고 할 수 있습니다. 종류도 L3(IP기반), L4(IP+Port 기반), L7(사용자 어플리케이션 기반) 으로 여러가지입니다.

 

아래 그림은 오픈스택의 Octavia라는 로드밸런서의 아키텍처입니다.

쉽게 이야기하면 사용자는 웹사이트를 접속하기 위해 Amphora라는 인스턴스에서 실행되는 https 또는 http 리스너를 통해 웹사이트에 접속을 합니다. 이때 접속할 웹사이트들의 집합을 Pool이라고 하고 웹사이트들을 Pool의 Member라고 합니다. 그리고, Member들이 잘 살아있는지, 정상적으로 동작을 하는지를 체크하는 모니터링 도구를 Pool Health Monitor라고 합니다.   

 

이렇게 Octavia에서 제공하는 로드밸런서는 아래와 같은 서비스들로 구성되어 있습니다.

- 로드밸런서

- Amphora 인스턴스

- 리스너(Listener)

- 풀(Pool)

- 멤버(Member)

- 헬스체크 모니터(Health-check Monitor)

 

여기서 가장 중요한 역할을 하는건 바로 amphora 라고 불리는 인스턴스입니다. amphora 인스턴스는 Red Hat Enterprise Linux 7.6 기반에 Haproxy 데몬이 설치되어 있습니다. 그리고, Octavia-agent가 Octavia-server로부터 명령을 받아 Listener를 생성하고 Haproxy에 환경설정을 하고 VIP를 Virtual Network로 생성을 하는 역할을 합니다. 그러면, 클라이언트는 Octavia-agent에 의해 생성된 VIP를 통해 Haproxy가 연결해주는 VM으로 접근을 하게 되는 것입니다. 

 

 

그럼, 이제 데쉬보드를 통해 로드밸런서를 한번 만들어 볼까요? 

레드햇 오픈스택 13 버전의 데쉬보드에서는 Project > Network > Load Balancers 메뉴를 통해 로드밸런서를 만들수 있습니다. 아래와 같이 메뉴를 찾아 들어가면 로드밸런서 목록을 확인할 수 있습니다. 그러나 생성된 로드밸런서가 없으니 아무것도 없겠죠! 

 

상단의 [+Create Load Balancer] 버튼을 클릭하면 아래와 같이 Load Balancer 화면이 뜹니다. 그러면, 아래와 같이 Name을 입력합니다. 이때 고정IP를 사용하고 싶다면 IP address에 사용하고자 하는 IP를 입력합니다. 그리고, 해당 IP가 포함된 서브넷을 선택합니다. 입력하지 않는다면 DHCP에 의한 IP가 할당됩니다.

- Name : 로드밸런서 이름

- Description : 로드밸런서 설명

- IP address : 로드밸런서로 사용할 VIP 주소

- Subnet: VIP가 포함된 네트워크 서브넷

 

이번에는 리스너를 만들어보겠습니다. 아래와 같이 리스너 Name, Protocol, Port를 입력합니다.

- Name: 리스너 이름

- Description: 리스너 설명

- Protocol: 프로토콜로 HTTP, TCP, UDP를 선택할 수 있음.

- Port: 리스닝을 할 포트

- Connection Limit: 접속 제한, -1은 제한을 하지 않겠다는 의미임

 

리스너 정보 입력이 끝나면 풀에 대한 정보를 입력합니다.

- Name: 풀 이름

- Description: 풀 설명

- Session Persistence: 세션 지속 방법

- Algorithm: 로드밸런서 방법

 

풀에 대한 정보 입력후 이번에는 멤버를 선택합니다. 앞에서 이미 서브넷을 선택했습니다. 따라서 해당 서브넷에 이미 생성된 인스턴스 목록을 Available Instances 에서 확인할 수 있습니다. 그럼, 로드밸런싱을 할 인스턴스를 2개 이상 선택합니다. 여기서는 앞에서 HTTP를 선택했기 때문에 자동으로 80 port가 설정되지만, 만일 TCP나 UDP를 선택했다면 해당 Port를 입력해야 합니다.

 

마지막으로 모니터링에 대한 정보를 입력합니다. 여기서는 모니터링 타입을 Ping으로 선택했습니다. 그리고, 하단의 [Create Load Balancer] 버튼을 클릭합니다.

 

그러면 로드밸런서 목록에서 아래와 같이 로드밸런서가 생성되고 있는것을 확인할 수 있습니다.

 

로드밸런서 생성이 완료되면 아래와같이 Provisioning Status가 Pending Create 에서 Active로 변경됩니다.

 

생성이 완료된 로드밸런서에 외부에서 접속이 가능할 수 있도록 Floating IP를 설정해 보도록 하겠습니다. Floating IP를 할당할 로드밸런서 우측 버튼을 클릭하여 [Associate Floating IP] 버튼을 클릭하고 아래와 같이 External IP나 서브넷을 선택하고 하단의 [Associate] 버튼을 클릭합니다.

 

할당된 IP는 로드밸런서 상세정보에서 아래와 같이 확인할 수 있습니다.

 

상세정보에서 Listeners 탭을 클릭하면 아래와 같이 리스너 목록을 확인할 수 있습니다.

 

리스너 목록에서 리스너를 클릭하면 아래와 같이 리스너 정보와 풀 목록을 확인할 수 있습니다.

 

풀 목록에서 풀을 클릭하면 해당 풀의 상세정보와 함께 Health Monitors와 Members 목록을 확인 할 수 있습니다.

 

생성된 로드밸런서용 amphora 인스턴스는 관리자 계정으로 들어가서 Admin > Compute > Instances 메뉴에서 아래와 같이 확인할 수 있습니다.

 

 

이제 로드밸런싱이 제대로 되는지 테스트를 해보도록 하겠습니다. 컨트롤러 노드에서 ip netns를 명령어를 이용하며 가상 네트워크 및 라우터 정보를 확인할 수 있습니다. 테넌트 네트워크가 포함된 라우터 정보를 ip netns exec 명령어를 이용하여 해당 테넌트의 VIP에 curl를 실행하면 아래와 같이 로드밸런싱이 되는 것을 확인할 수 있습니다. 또한 연결해 준 Floating IP로 curl를 실행하면 역시 로드밸런싱이 되는것을 확인 할 수 있습니다.

[root@overcloud-controller-0 ~]# ip netns exec qrouter-355b554a-a5a2-4ff5-878f-1fb3f0de6509 curl http://10.10.10.13 

Welcome to 10.10.10.9

[root@overcloud-controller-0 ~]# ip netns exec qrouter-355b554a-a5a2-4ff5-878f-1fb3f0de6509 curl http://10.10.10.13

Welcome to 10.10.10.8

[root@overcloud-controller-0 ~]# curl http://192.168.122.56

Welcome to 10.10.10.9

[root@overcloud-controller-0 ~]# curl http://192.168.122.56

Welcome to 10.10.10.8

[root@overcloud-controller-0 ~]#

 

 

이렇게 해서 오픈스택의 로드밸런서 서비스인 Octavia에 대해서 알아보았습니다. 다음에는 Octavia 인스턴스에 접속을 해서 Octavia가 어떻게 구성이 되었는지 확인해 보도록 하겠습니다. 

Posted by 나리 짱!!! naleejang