[OpenStack] 로드밸런서 Octavia #1

Hyunji·2025년 4월 30일
0

Openstack

목록 보기
1/1

오픈스택에서 로드밸런서 생성하는거 기록해보기~

로드밸런서란?

간단히 말해서 들어오는 트래픽을 여러 서버로 나눠주는 역할
오픈스택에서는 Octavia컴포넌트가 로드밸런서 기능을 제공한다.

구성요소

오픈스택의 로드밸런서는 단일 리소스가 아니라 여러 구성 요소가 유기적으로 연결되어 동작한다.
하나의 트래픽이 로드밸런서를 거쳐 백엔드까지 도달하기 위해 거치는 경로

             [Floating IP]
                  ↓
            [Load Balancer]
                  ↓
              [Listener]
                  ↓
                [Pool]
               ↙       ↘
         [Member 1]  [Member 2]
  1. 로드밸런서 LoadBalancer
  • 외부에서 들어오는 트래픽을 받아들이는 진입 지점
  • 로드밸런서 자체는 트래픽을 받아주지만 , 포트 열어주는 건 listner가 한다.

  • 속성 필요
  1. 리스너 Listener
  • 특정 포트를 열고, 어떤 방식으로 들어온 요청을 처리할지 정의한다.
  • 프로토콜, 프로토콜 포트 입력
  • 리소스 하나당 한 가지 프로토콜 + 포트 조합만 가능
  1. 풀 Pool
  • 리스터를 통해 들어온 요청을 어떤 서버 그룹에 분배할지 정의하는 단위
  • 알고리즘(ROUND_ROBIN, LEAST_CONNECTIONS 등), 프로토콜(리스터와 동일) 입력
  • 하나의 리스너에는 하나의 풀만 연결 가능
  1. 풀 멤버 PoolMember
  • 실제 트래픽을 받아 처리할 서버들
  • 예시: 192.168.0.11, 192.168.0.12 같은 웹 인스턴스 IP들
  • 내부망 ip, port, subnet_id 필요
  • 상태가 DOWN이면 트래픽 분배에서 빠짐
  • 헬스모니터가 자동으로 상태 확인함
  1. 헬스모니터 Health Monitor
  • 각 멤버 서버가 살아있는지, 정상인지 주기적으로 체크해주는 기능
  • 예) 5초마다 /health 호출 -> 응답 없으면 해당 서버 off
  • delay(체크 주기), timeout(응답 대기 시간), max_retries(몇 번 실패하면 DOWN 처리할지) 설정
  • /health 경로는 인스턴스 내부에 미리 만들어둬야 한다.

Octavia

오픈스택에서 제공하는 로드밸런서 서비스 구성요소
Neutron의 확장 형태였던 LBaaS가 독립 프로젝트로 분리되어, 더 유연하고 강력한 로드밸런싱 기능 제공

  • api 사용
  1. 로드밸런서 생성
POST /v2.0/lbaas/loadbalancers
Content-Type: application/json
X-Auth-Token: <token>

{
  "loadbalancer": {
    "name": "my-lb",
    "vip_subnet_id": "<SUBNET_ID>",
    "provider": "octavia"
  }
}

-> 응답 : 로드밸런서 id, vip_address, provisioning_status

  1. 리스너 생성
POST /v2.0/lbaas/listeners
X-Auth-Token: <token>

{
  "listener": {
    "name": "http-listener",
    "protocol": "HTTP",
    "protocol_port": 80,
    "loadbalancer_id": "<LB_ID>"
  }
}
  1. 풀 생성
POST /v2.0/lbaas/pools
X-Auth-Token: <token>

{
  "pool": {
    "name": "web-pool",
    "protocol": "HTTP",
    "lb_algorithm": "ROUND_ROBIN",
    "listener_id": "<LISTENER_ID>"
  }
}
  1. 풀멤버 추가
POST /v2.0/lbaas/pools/<POOL_ID>/members
X-Auth-Token: <token>

{
  "member": {
    "address": "<INSTANCE_IP>",
    "protocol_port": 80,
    "subnet_id": "<SUBNET_ID>"
  }
}

작동 흐름

  1. 로드밸런서(LB) 생성 → VIP 부여
  2. 리스너 생성 → LB에 포트 바인딩
  3. 풀(Pool) 생성 → 리스너에 연결
  4. 멤버(Member) 추가 → 풀에 서버 연결
  5. 헬스모니터 연결 → 상태 자동 점검
  6. 클라이언트는 VIP에 접속 → 자동 분산
profile
ㅎㅇ

0개의 댓글