5장. HAProxy를 사용한 트래픽 부하 분산

HAProxy 서비스는 고가용성 클러스터의 컨트롤러 노드에 대한 트래픽과 로깅 및 샘플 구성의 부하 분산을 제공합니다. haproxy 패키지에는 동일한 이름의 systemd 서비스에 해당하는 haproxy 데몬이 포함되어 있습니다. Pacemaker는 HAProxy 서비스를 haproxy-bundle 이라는 고가용성 서비스로 관리합니다.

5.1. HAProxy 작동 방식

director는 HAProxy 서비스를 사용하도록 대부분의 Red Hat OpenStack Platform 서비스를 구성할 수 있습니다. director는 /var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg 파일에서 해당 서비스를 설정하여 HAProxy가 각 오버클라우드 노드의 전용 컨테이너에서 실행되도록 지시합니다.

다음 표는 HAProxy에서 관리하는 서비스 목록을 보여줍니다.

표 5.1. HAProxy에서 관리하는 서비스

Aodh

cinder

glance_api

Gnocchi

haproxy.stats

heat_api

heat_cfn

Horizon

keystone_admin

keystone_public

mysql

Neutron

nova_metadata

nova_novncproxy

nova_osapi

nova_placement

haproxy.cfg 파일의 각 서비스에 대해 다음 속성을 확인할 수 있습니다.

  • 수신 대기: 요청을 수신 대기 중인 서비스의 이름입니다.
  • bind: 서비스가 수신 대기 중인 IP 주소 및 TCP 포트 번호입니다.
  • server: HAProxy, IP 주소 및 수신 대기 포트를 사용하는 각 컨트롤러 노드 서버의 이름 및 서버에 대한 추가 정보입니다.

다음 예제에서는 haproxy.cfg 파일의 OpenStack Block Storage(cinder) 서비스 구성을 보여줍니다.

listen cinder
  bind 172.16.0.10:8776
  bind 192.168.1.150:8776
  mode http
  http-request set-header X-Forwarded-Proto https if { ssl_fc }
  http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
  option httpchk
  server overcloud-controller-0 172.16.0.13:8777 check fall 5 inter 2000 rise 2
  server overcloud-controller-1 172.16.0.14:8777 check fall 5 inter 2000 rise 2
  server overcloud-controller-2 172.16.0.15:8777 check fall 5 inter 2000 rise 2

이 출력에서는 OpenStack 블록 스토리지(cinder) 서비스에 대한 다음 정보를 보여줍니다.

  • 172.16.0.10:8776: 오버클라우드 내에서 사용할 내부 API 네트워크(VLAN201)의 가상 IP 주소 및 포트입니다.
  • 192.168.1.150:8776: 오버클라우드 외부에서 API 네트워크에 액세스할 수 있는 외부 네트워크(VLAN100)의 가상 IP 주소 및 포트입니다.
  • 8776: OpenStack 블록 스토리지(cinder) 서비스가 수신 대기 중인 포트 번호입니다.
  • server: 컨트롤러 노드 이름 및 IP 주소. HAProxy는 해당 IP 주소로 수행된 요청을 서버 출력에 나열된 컨트롤러 노드 중 하나로 보낼 수 있습니다.
  • httpchk: 컨트롤러 노드 서버에서 상태 점검을 활성화합니다.
  • fall 5: 서비스가 오프라인 상태인지 확인하는 실패한 상태 점검 수입니다.
  • 2000년 간: 2개의 연속된 상태 점검(밀리초) 사이의 간격입니다.
  • 성장 2: 서비스가 실행 중인지 확인하는 데 성공한 상태 점검 수입니다.

haproxy.cfg 파일에서 사용할 수 있는 설정에 대한 자세한 내용은 haproxy 패키지가 설치된 노드의 /usr/share/doc/haproxy-[VERSION]/configuration.txt 파일을 참조하십시오.