고가용성 관리

문서 버전을 선택합니다.

자동 장애 조치 및 복구 메커니즘을 통해 서비스 중단 및 장애에 대한 복원력을 추가하도록 AlloyDB Omni 클러스터의 고가용성을 관리합니다.

고가용성 사양 구성

고가용성을 구성하려면 DBCluster 사양에서 다음 정보를 작성하세요.

DBCluster:
  metadata:
    ...
  spec:
    ...
    readOnlyPort: READ_ONLY_PORT
    availability:
      numberOfStandbys: NUMBER_OF_STANDBYS
      enableStandbyAsReadReplica: true
      enableAutoFailover: true
      enableAutoHeal: true
      replayReplicationSlotsOnStandbys: true
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD

다음 변수를 바꿉니다.

  • NUMBER_OF_STANDBYS: 설정할 대기 노드 수입니다. 이 값을 0으로 설정하면 고가용성이 사용 중지됩니다. 최댓값은 5입니다. 필요한 대기 노드 수를 잘 모르겠으면 높은 복원력을 위해 2로 시작합니다.

  • (선택사항) READ_ONLY_PORT: 대기 읽기 전용 엔드포인트에 사용되는 부하 분산기 또는 가상 IP 주소의 포트입니다. 기본값은 5433 (기본 포트 + 1)입니다.

  • (선택사항) HEALTHCHECK_PERIOD: 각 상태 점검 사이에 대기할 시간(초)입니다. 기본값은 30입니다. 최솟값은 1입니다. 최댓값은 86400 (하루)입니다.

  • (선택사항) AUTOFAILOVER_TRIGGER_THRESHOLD: 장애 조치가 발생하기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은 3입니다. 최솟값은 0이지만 값이 0으로 설정되면 AlloyDB Omni는 기본값을 사용합니다.

    상태 점검이 AUTOFAILOVER_TRIGGER_THRESHOLD 번 실패하거나 HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD 초 (기본적으로 90초) 동안 실패하면 자동 장애 조치가 발생합니다.

  • (선택사항) AUTOHEAL_TRIGGER_THRESHOLD: 자동 복구가 시작되기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은 5입니다. 최솟값은 0이지만 값이 0으로 설정되면 AlloyDB Omni는 기본값을 사용합니다.

    상태 점검이 AUTOHEAL_TRIGGER_THRESHOLD 번 실패하거나 HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD 초 동안 실패하면 자동 복구가 발생합니다.

읽기 전용 대기 엔드포인트 확인

enableStandbyAsReadReplica: true를 설정하면 부하 분산기 (HAProxy 및 Keepalived 가상 IP 주소)가 기본 읽기-쓰기 엔드포인트 외에 전용 읽기 전용 엔드포인트를 자동으로 노출합니다.

HAProxy는 다음과 같이 활성 대기 인스턴스 간에 트래픽을 라우팅합니다.

  • GET /isstandby를 사용하여 모든 대기 노드에서 상태 점검을 실행합니다.
  • leastconn 부하 분산을 사용하여 활성 대기 인스턴스 간에 읽기 쿼리를 분산합니다.
  • 새 대기 토폴로지에 대한 클라이언트 연결을 삭제하지 않고 장애 조치 시 라우팅을 자동으로 업데이트합니다.

클러스터 엔드포인트를 확인하려면 다음 명령어 중 하나를 실행합니다.

alloydbctl

alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAME

다음 변수를 바꿉니다.

  • DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.

  • DBCLUSTER_NAME: 클러스터 만들기에서 정의한 데이터베이스 클러스터의 이름입니다.

Ansible

  1. google.alloydbomni_orchestrator.status 역할의 Ansible 플레이북을 만듭니다. 예를 들면 status.yaml입니다.

    - name: STATUS_PLAYBOOK_NAME
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.status
    

    다음 변수를 바꿉니다.

    • STATUS_PLAYBOOK_NAME: Ansible 플레이북의 이름입니다. 예를 들면 My cluster status입니다.

    • ANSIBLE_USER: Ansible이 AlloyDB Omni 노드에 로그인하는 데 사용하는 OS 사용자입니다.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible이 SSH를 사용하여 AlloyDB Omni 노드에 연결하는 데 사용하는 비공개 키입니다.

  2. 플레이북을 실행합니다.

    ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \
      -e resource_name=DBCLUSTER_NAME

    다음 변수를 바꿉니다.

엔드포인트는 status.primary.endpoints 아래에 보고됩니다.

    - Read-Write: VIRTUAL_IP:5432
    - Read-Only: VIRTUAL_IP:5433

DBCluster 사양 적용

구성된 DBCluster 사양을 적용하려면 다음 명령어 중 하나를 실행합니다.

대기 인스턴스로 전환

고가용성 설정 또는 기본 및 대기 복제본을 전환해야 하는 기타 계획된 유지보수 활동을 테스트해야 하는 경우 전환을 수행할 수 있습니다. 전환이 발생하면 복제 방향과 기본 및 대기의 역할이 반대로 바뀝니다.

전환은 다음 작업을 수행합니다.

  1. AlloyDB Omni 오케스트레이터가 기본을 오프라인으로 전환합니다.

  2. AlloyDB Omni 오케스트레이터가 대기를 새 기본으로 승격합니다.

  3. AlloyDB Omni 오케스트레이터가 기본을 대기로 변환합니다.

  4. AlloyDB Omni가 새로 변환된 대기를 시작합니다.

전환 수행

전환을 수행하려면 다음 단계를 완료하세요.

  1. 기본 및 대기 인스턴스가 정상인지 확인합니다.

  2. 고가용성 status.phase가 Ready인지 확인합니다.

  3. 다음 형식을 사용하여 Switchover 사양을 만듭니다.

    Switchover:
      metadata:
        name: SWITCHOVER_NAME
      spec:
        dbClusterRef: DBCLUSTER_NAME
        newPrimary: NEW_PRIMARY_NAME
    

    다음 변수를 바꿉니다.

  4. Ansible을 사용하는 경우 Switchover 사양의 플레이북을 만듭니다.

    - name: SWITCHOVER_PLAYBOOK_NAME
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.switchover
    

    다음 변수를 바꿉니다.

    • SWITCHOVER_PLAYBOOK_NAME: Ansible 플레이북의 이름입니다. 예를 들면 My Switchover입니다.

    • ANSIBLE_USER: Ansible이 AlloyDB Omni 노드에 로그인하는 데 사용하는 OS 사용자입니다.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible이 SSH를 사용하여 AlloyDB Omni 노드에 연결하는 데 사용하는 비공개 키입니다.

  5. Switchover 사양을 적용합니다.

고가용성을 위한 부하 분산기

부하 분산기 (HAProxy)는 노드를 Keepalived 및 가상 IP와 페어링하여 고가용성을 달성합니다. Keepalived는 가상 라우터 중복 프로토콜 (VRRP)을 활용하여 유동 가상 IP를 제어합니다. 데이터베이스 클라이언트 애플리케이션은 데이터베이스 노드의 IP 주소 대신 이 가상 IP에 연결합니다.

전용 부하 분산기가 사용되지 않는 구성에서는 Keepalived가 데이터베이스 노드에 직접 설치됩니다. 이 시나리오에서는 가상 IP를 현재 기본 노드에 동적으로 할당하여 고가용성을 달성하므로 기본 노드를 사용할 수 없게 되더라도 원활한 장애 조치가 보장됩니다.

안정적인 선택을 설정하기 위해 Keepalived는 VRRP 우선순위를 데이터베이스 클러스터 노드에 할당합니다. 첫 번째 부하 분산기 노드는 더 높은 Keepalived 우선순위(예: 110)로 기본 역할을 맡습니다. 후속 노드는 더 낮은 우선순위(예: 100)로 보조 역할을 합니다.

가상 IP가 정상 노드를 가리키도록 하기 위해 Keepalived는 2초마다 지속적인 상태 점검을 실행합니다. 이렇게 하면 systemd HAProxy 프로세스의 상태가 확인됩니다. 기본 노드의 HAProxy 서비스가 실패하면 Keepalived는 가상 IP를 정상 보조 노드로 마이그레이션합니다.

데이터베이스 노드의 멤버십이 변경되면 HAProxy 및 Keepalived는 자동으로 새 활성 데이터베이스 노드를 가리킵니다. 기본 라우팅 구성은 활성 클라이언트 연결을 삭제하지 않고 업데이트됩니다.

부하 분산기 구성

부하 분산기 노드의 가상 IP를 구성하려면 DBCluster 사양의 primarySpec 필드에 다음 dbLoadBalancerOptions 필드를 추가합니다.

DBCluster:
  spec:
    primarySpec:
      ...
      dbLoadBalancerOptions:
        onprem:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

다음 변수를 바꿉니다.

  • VIRTUAL_IP: 유동 가상 IP에 사용되는 고정 IP 주소입니다. 데이터베이스 클라이언트 애플리케이션은 여기에 정의된 IP 주소를 사용합니다. Keepalived가 Gratuitous ARP를 성공적으로 브로드캐스트할 수 있도록 이 IP 주소를 사용할 수 있어야 하며, 루프백할 수 없고, 온프레미스의 경우 기본 노드 인터페이스와 동일한 서브넷에 속해야 합니다.

  • VIRTUAL_IP_INTERFACE: 가 구성된 네트워크 인터페이스입니다. VIRTUAL_IP 기본값은 eth0입니다.

달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.

최종 업데이트: 2026-10-11(UTC)