3장. Pacemaker를 사용하여 고가용성 서비스 관리


Pacemaker 서비스는 Galera, RabbitMQ, Redis 및 HAProxy와 같은 핵심 컨테이너 및 액티브-패시브 서비스를 관리합니다. Pacemaker를 사용하여 관리 서비스, 가상 IP 주소, 전원 관리 및 펜싱에 대한 일반 정보를 보고 관리합니다.

3.1. Pacemaker 리소스 번들 및 컨테이너

Pacemaker는 RHOSP(Red Hat OpenStack Platform) 서비스를 번들 세트 리소스 또는 번들로 관리합니다. 이러한 서비스는 대부분 동일한 방식으로 시작하고 각 컨트롤러 노드에서 항상 실행되는 액티브-액티브 서비스입니다.

Pacemaker는 다음 리소스 유형을 관리합니다.

번들
번들 리소스는 모든 컨트롤러 노드에서 동일한 컨테이너를 구성 및 복제하고, 필요한 스토리지 경로를 컨테이너 디렉터리에 매핑하며, 리소스 자체와 관련된 특정 특성을 설정합니다.
컨테이너
컨테이너에서 HAProxy와 같은 간단한 systemd 서비스부터 Galera와 같은 복잡한 서비스에 이르기까지 다양한 종류의 리소스를 실행할 수 있습니다. 이 서비스에는 다양한 노드에서 서비스 상태를 제어하고 설정하는 특정 리소스 에이전트가 필요합니다.
중요
  • podman 또는 systemctl 을 사용하여 번들 또는 컨테이너를 관리할 수 없습니다. 명령을 사용하여 서비스 상태를 확인할 수 있지만 Pacemaker를 사용하여 이러한 서비스에 대한 작업을 수행해야 합니다.
  • Pacemaker에서 제어하는 Podman 컨테이너에는 Podman에서 RestartPolicyno 로 설정되어 있습니다. 이는 Podman이 아닌 Pacemaker가 컨테이너 시작 및 중지 작업을 제어하도록 하기 위한 것입니다.

3.1.1. Simple Bundle Set 리소스 (단순 번들)

간단한 번들 세트 리소스 또는 간단한 번들은 각각 컨트롤러 노드에 배포하려는 동일한 Pacemaker 서비스를 포함하는 컨테이너 집합입니다.

다음 예제에서는 pcs status 명령의 출력에서 간단한 번들 목록을 보여줍니다.

Podman container set: haproxy-bundle [192.168.24.1:8787/rhosp-rhel8/openstack-haproxy:pcmklatest]
  haproxy-bundle-podman-0      (ocf::heartbeat:podman):        Started overcloud-controller-0
  haproxy-bundle-podman-1      (ocf::heartbeat:podman):        Started overcloud-controller-1
  haproxy-bundle-podman-2      (ocf::heartbeat:podman):        Started overcloud-controller-2
Copy to Clipboard Toggle word wrap

각 번들에 대해 다음 세부 정보를 확인할 수 있습니다.

  • Pacemaker에서 서비스에 할당하는 이름입니다.
  • 번들과 연결된 컨테이너에 대한 참조입니다.
  • 다른 컨트롤러 노드에서 실행 중인 복제본의 목록 및 상태입니다.

다음 예제에서는 haproxy-bundle 간단한 번들에 대한 설정을 보여줍니다.

$ sudo pcs resource show haproxy-bundle
Bundle: haproxy-bundle
 Podman: image=192.168.24.1:8787/rhosp-rhel8/openstack-haproxy:pcmklatest network=host options="--user=root --log-driver=journald -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS" replicas=3 run-command="/bin/bash /usr/local/bin/kolla_start"
 Storage Mapping:
  options=ro source-dir=/var/lib/kolla/config_files/haproxy.json target-dir=/var/lib/kolla/config_files/config.json (haproxy-cfg-files)
  options=ro source-dir=/var/lib/config-data/puppet-generated/haproxy/ target-dir=/var/lib/kolla/config_files/src (haproxy-cfg-data)
  options=ro source-dir=/etc/hosts target-dir=/etc/hosts (haproxy-hosts)
  options=ro source-dir=/etc/localtime target-dir=/etc/localtime (haproxy-localtime)
  options=ro source-dir=/etc/pki/ca-trust/extracted target-dir=/etc/pki/ca-trust/extracted (haproxy-pki-extracted)
  options=ro source-dir=/etc/pki/tls/certs/ca-bundle.crt target-dir=/etc/pki/tls/certs/ca-bundle.crt (haproxy-pki-ca-bundle-crt)
  options=ro source-dir=/etc/pki/tls/certs/ca-bundle.trust.crt target-dir=/etc/pki/tls/certs/ca-bundle.trust.crt (haproxy-pki-ca-bundle-trust-crt)
  options=ro source-dir=/etc/pki/tls/cert.pem target-dir=/etc/pki/tls/cert.pem (haproxy-pki-cert)
  options=rw source-dir=/dev/log target-dir=/dev/log (haproxy-dev-log)
Copy to Clipboard Toggle word wrap

예에서는 번들의 컨테이너에 대한 다음 정보를 보여줍니다.

  • image: Undercloud의 로컬 레지스트리를 참조하는 컨테이너에서 사용하는 이미지입니다.
  • network: 예제에서 "host" 인 컨테이너 네트워크 유형입니다.
  • 옵션: 컨테이너의 특정 옵션입니다.
  • 복제: 클러스터에서 실행해야 하는 컨테이너의 복사본 수를 나타냅니다. 각 번들에는 각 컨트롤러 노드에 하나씩 3개의 컨테이너가 포함됩니다.
  • run-command: 컨테이너를 생성하는 데 사용되는 시스템 명령.
  • 스토리지 매핑: 각 호스트에서 컨테이너에 대한 로컬 경로 매핑. haproxy 구성은 /etc/haproxy/haproxy.cfg 파일 대신 /var/lib/config-data/puppet-generated/haproxy /etc/haproxy/haproxy.cfg 파일에 있습니다.
참고

HAProxy는 선택한 서비스에 대한 트래픽을 부하 분산하여 고가용성 서비스를 제공하지만 HAProxy를 Pacemaker 번들 서비스로 관리하여 HAProxy를 고가용성 서비스로 구성합니다.

3.1.2. 복합 번들 세트 리소스(복합 번들)

복잡한 번들 세트 리소스 또는 복잡한 번들은 간단한 번들에 포함된 기본 컨테이너 구성 외에도 리소스 구성을 지정하는 Pacemaker 서비스입니다.

이 구성은 실행하는 컨트롤러 노드에 따라 다른 상태를 보유할 수 있는 서비스인 다중 상태 리소스를 관리하는 데 필요합니다.

이 예에서는 pcs status 명령의 출력에서 복잡한 번들 목록을 보여줍니다.

Podman container set: rabbitmq-bundle [192.168.24.1:8787/rhosp-rhel8/openstack-rabbitmq:pcmklatest]
  rabbitmq-bundle-0    (ocf::heartbeat:rabbitmq-cluster):      Started overcloud-controller-0
  rabbitmq-bundle-1    (ocf::heartbeat:rabbitmq-cluster):      Started overcloud-controller-1
  rabbitmq-bundle-2    (ocf::heartbeat:rabbitmq-cluster):      Started overcloud-controller-2
Podman container set: galera-bundle [192.168.24.1:8787/rhosp-rhel8/openstack-mariadb:pcmklatest]
  galera-bundle-0      (ocf::heartbeat:galera):        Master overcloud-controller-0
  galera-bundle-1      (ocf::heartbeat:galera):        Master overcloud-controller-1
  galera-bundle-2      (ocf::heartbeat:galera):        Master overcloud-controller-2
Podman container set: redis-bundle [192.168.24.1:8787/rhosp-rhel8/openstack-redis:pcmklatest]
  redis-bundle-0       (ocf::heartbeat:redis): Master overcloud-controller-0
  redis-bundle-1       (ocf::heartbeat:redis): Slave overcloud-controller-1
  redis-bundle-2       (ocf::heartbeat:redis): Slave overcloud-controller-2
Copy to Clipboard Toggle word wrap

이 출력은 각 복잡한 번들에 대한 다음 정보를 보여줍니다.

  • RabbitMQ: 3개의 컨트롤러 노드 모두 단순 번들과 유사하게 서비스의 독립 실행형 인스턴스를 실행합니다.
  • Galera: 3개의 컨트롤러 노드 모두 동일한 제약 조건 하에서 Galera 마스터로 실행됩니다.
  • Redis: overcloud-controller-0 컨테이너는 마스터로 실행되며 다른 두 개의 컨트롤러 노드는 슬레이브로 실행됩니다. 각 컨테이너 유형은 다른 제약 조건 하에서 실행될 수 있습니다.

다음 예제에서는 galera-bundle 복합 번들에 대한 설정을 보여줍니다.

[...]
Bundle: galera-bundle
 Podman: image=192.168.24.1:8787/rhosp-rhel8/openstack-mariadb:pcmklatest masters=3 network=host options="--user=root --log-driver=journald -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS" replicas=3 run-command="/bin/bash /usr/local/bin/kolla_start"
 Network: control-port=3123
 Storage Mapping:
  options=ro source-dir=/var/lib/kolla/config_files/mysql.json target-dir=/var/lib/kolla/config_files/config.json (mysql-cfg-files)
  options=ro source-dir=/var/lib/config-data/puppet-generated/mysql/ target-dir=/var/lib/kolla/config_files/src (mysql-cfg-data)
  options=ro source-dir=/etc/hosts target-dir=/etc/hosts (mysql-hosts)
  options=ro source-dir=/etc/localtime target-dir=/etc/localtime (mysql-localtime)
  options=rw source-dir=/var/lib/mysql target-dir=/var/lib/mysql (mysql-lib)
  options=rw source-dir=/var/log/mariadb target-dir=/var/log/mariadb (mysql-log-mariadb)
  options=rw source-dir=/dev/log target-dir=/dev/log (mysql-dev-log)
 Resource: galera (class=ocf provider=heartbeat type=galera)
  Attributes: additional_parameters=--open-files-limit=16384 cluster_host_map=overcloud-controller-0:overcloud-controller-0.internalapi.localdomain;overcloud-controller-1:overcloud-controller-1.internalapi.localdomain;overcloud-controller-2:overcloud-controller-2.internalapi.localdomain enable_creation=true wsrep_cluster_address=gcomm://overcloud-controller-0.internalapi.localdomain,overcloud-controller-1.internalapi.localdomain,overcloud-controller-2.internalapi.localdomain
  Meta Attrs: container-attribute-target=host master-max=3 ordered=true
  Operations: demote interval=0s timeout=120 (galera-demote-interval-0s)
              monitor interval=20 timeout=30 (galera-monitor-interval-20)
              monitor interval=10 role=Master timeout=30 (galera-monitor-interval-10)
              monitor interval=30 role=Slave timeout=30 (galera-monitor-interval-30)
              promote interval=0s on-fail=block timeout=300s (galera-promote-interval-0s)
              start interval=0s timeout=120 (galera-start-interval-0s)
              stop interval=0s timeout=120 (galera-stop-interval-0s)
[...]
Copy to Clipboard Toggle word wrap

이 출력은 간단한 번들과 달리 galera-bundle 리소스에 다중 상태 리소스의 모든 측면을 결정하는 명시적 리소스 구성이 포함되어 있음을 보여줍니다.

참고

서비스가 동시에 여러 컨트롤러 노드에서 실행될 수 있지만, 컨트롤러 노드 자체는 해당 서비스에 연결하는 데 필요한 IP 주소에서 수신 대기하지 않을 수 있습니다. 서비스의 IP 주소를 확인하는 방법에 대한 자세한 내용은 3.4절. “고가용성 클러스터에서 가상 IP의 리소스 정보 보기” 을 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat