SAP의 고가용성 구성 문제 해결

Google Cloud 기반 SAP의 고가용성 구성에서 문제의 근본 원인은 클러스터링 소프트웨어, SAP 소프트웨어, Google Cloud 인프라 또는 이러한 요소의 조합에 있습니다.

Cloud Logging에서 Pacemaker 로그 분석

다음 동영상은 Cloud Logging을 사용하여 Google Cloud 기반 SAP의 고가용성 구성 문제 해결을 시작하는 방법을 보여줍니다.

Linux 클러스터에서 실패한 노드가 장애 조치 후 제대로 다시 시작되지 않음

Linux 고가용성 클러스터에서 fence_gce 펜스 에이전트를 사용하고 장애 조치 후 펜싱된 VM이 클러스터에 다시 조인하지 못하면 펜싱된 VM이 다시 시작될 때 Corosync 소프트웨어 시작을 지연시켜야 할 수 있습니다.

문제

장애 조치 중에 fence_gce 에이전트는 실패한 Compute Engine VM에 대해 펜싱을 수행하며, 이로 인해 Pacemaker에서 펜스 작업을 완료로 등록하기 전에 클러스터를 재부팅하고 다시 조인합니다. 펜스 작업이 완료로 등록되지 않았기 때문에 재부팅된 VM은 Pacemaker 및 Corosync 서비스를 종료하고 클러스터를 나갑니다.

진단

문제인지 확인하려면 다음 안내를 따르세요.

  • 클러스터가 fence_gce 에이전트를 사용 중인지 확인합니다.

    RHEL

    pcs config

    SLES

    crm config show

    펜스 에이전트 정의에 fence_gce가 포함됩니다.

    RHEL

    Stonith Devices:
    Resource: STONITH-example-ha-vm1 (class=stonith type=fence_gce)
    Attributes: port=example-ha-vm1 project=example-project-123456 zone=us-central1-a
    Operations: monitor interval=300s timeout=120s (STONITH-example-ha-vm1-monitor-interval-60s)
    Resource: STONITH-example-ha-vm2 (class=stonith type=fence_gce)
    Attributes: port=example-ha-vm2 project=example-project-123456 zone=us-central1-c
    Operations: monitor interval=300s timeout=120s (STONITH-example-ha-vm2-monitor-interval-60s)
    

    SLES

    primitive fence-example-ha-vm1 stonith:fence_gce \
     op monitor interval=300s timeout=120s \
     op start interval=0 timeout=60s \
     params port=example-ha-vm1 zone=us-central1-a project=example-project-123456
    primitive fence-example-ha-vm2 stonith:fence_gce \
     op monitor interval=300s timeout=120s \
     op start interval=0 timeout=60s \
     params port=example-ha-vm2 zone=us-central1-c project=example-project-123456
  • 시스템 로그에서 다음 메시지를 확인합니다.

    DATESTAMP> node2 stonith-ng[1106]:  notice: Operation reboot of node2 by node1 for stonith_admin.1366@node1.c3382af8: OK
    DATESTAMP> node2 stonith-ng[1106]:   error: stonith_construct_reply: Triggered assert at commands.c:2343 : request != NULL
    DATESTAMP> node2 stonith-ng[1106]: warning: Can't create a sane reply
    DATESTAMP> node2 crmd[1110]:    crit: We were allegedly just fenced by node1 for node1!
    DATESTAMP> node2 pacemakerd[1055]: warning: Shutting cluster down because crmd[1110] had fatal failure

솔루션

펜스 작업을 새 기본 노드의 Pacemaker에 완료로 등록하려면 Corosync의 다시 시작을 지연하도록 두 클러스터 노드의 운영 체제를 구성합니다. 지연을 고려하여 Pacemaker 재부팅 시간 초과 값도 설정합니다.

Corosync의 다시 시작이 지연되도록 구성하려면 다음 안내를 따르세요.

  1. 클러스터를 유지보수 모드로 전환합니다.

    RHEL

    pcs property set maintenance-mode=true

    SLES

    crm configure property maintenance-mode="true"
  2. 각 클러스터 노드에서 루트로 Corosync의 시작 지연을 설정합니다.

    1. systemd 삽입형 파일을 만듭니다.

      systemctl edit corosync.service
    2. 파일에 다음 행을 추가합니다.

      [Service]
      ExecStartPre=/bin/sleep 60
    3. 파일을 저장하고 편집기를 종료합니다.

    4. systemd 관리자 구성을 새로고침합니다.

      systemctl daemon-reload
  3. 두 클러스터 노드 중 하나에서 루트로 두 펜스 에이전트에 대해 Pacemaker의 재부팅 시간 초과 값이 설정되어 있는지 확인합니다.

    1. pcmk_reboot_timeout 값을 확인합니다.

      crm_resource --resource FENCE_AGENT_NAME --get-parameter=pcmk_reboot_timeout

      FENCE_AGENT_NAME을 펜스 에이전트의 이름으로 바꿉니다.

    2. pcmk_reboot_timeout 매개변수를 찾을 수 없거나 300보다 작은 값으로 설정되어 있으면 두 펜스 에이전트에서 값을 설정합니다.

      crm_resource --resource FENCE_AGENT_NAME --set-parameter=pcmk_reboot_timeout --parameter-value=300

      FENCE_AGENT_NAME을 펜스 에이전트의 이름으로 바꿉니다.

      pcmk_reboot_timeout 값은 다음 항목의 합계보다 커야 합니다.

      • Corosync token 제한 시간
      • Corosync 합의 제한 시간: 기본적으로 token * 1.2의 곱으로 설정됨
      • 지연 속성을 포함하여 재부팅 작업을 완료하는 데 걸리는 시간

      Google Cloud에서는 대부분의 클러스터에 300초면 충분합니다.

    3. pcmk_reboot_timeout 값을 확인합니다.

      crm_resource --resource FENCE_AGENT_NAME --get-parameter=pcmk_reboot_timeout

      FENCE_AGENT_NAME을 펜스 에이전트의 이름으로 바꿉니다.

  4. 클러스터의 유지보수 모드를 해제합니다.

    RHEL

    pcs property set maintenance-mode=false

    SLES

    crm configure property maintenance-mode="false"

특정 노드를 선호하는 의도하지 않은 노드 어피니티

클러스터 명령어를 사용하여 고가용성 클러스터의 리소스를 수동으로 이동할 때는 자동 어피니티 또는 클라이언트 환경설정이 특정 노드에 맞게 설정된 것을 확인할 수 있습니다.

문제

SAP HANA 또는 SAP NetWeaver용 Linux Pacemaker 고가용성 클러스터에서 SAP HANA 시스템 또는 SAP NetWeaver 중앙 서비스와 같은 리소스는 특정 클러스터 노드 한 개에서만 실행되며 노드 장애 이벤트 중에 예상대로 장애 조치되지 않습니다.

따라서 다음과 같은 문제가 발생할 수 있습니다.

  • 리소스를 클러스터 노드로 move하기 위해 Pacemaker 명령어를 실행하여 SAP NetWeaver ASCS 서비스 장애 조치를 트리거하면 리소스가 시작되지 않고 stopped 상태가 표시됩니다.

  • 한 클러스터 노드에 standby 명령어를 실행하여 모든 리소스를 다른 노드로 강제 이동하면 리소스가 시작되지 않습니다.

진단

  • Pacemaker 로그에서 특정 리소스를 실행할 수 없다는 메시지가 표시되는지 확인합니다. 예를 들면 다음과 같습니다.

    2021-05-24 21:39:58 node_1 pacemaker-schedulerd (native_color) info:
     Resource NW1-ASCS01 cannot run anywhere
  • Pacemaker 위치 제약조건 구성을 확인하여 특정 클러스터 노드에서 리소스가 실행되지 못하도록 하는 제약조건을 식별합니다.

    Pacemaker 위치 제약조건 구성을 확인하려면 다음 단계를 따르세요.

    1. 위치 제약조건을 표시합니다.

      cibadmin --query --scope constraints | grep rsc_location
    2. 위치 제약조건을 확인합니다.

      • 명시적 위치 제약조건: INFINITY(노드 선호) 또는 -INFINITY(노드 제외) 점수로 위치 제약조건을 찾습니다. 예를 들면 다음과 같습니다.

        <rsc_location id="loc-constraint" rsc="NW1-ASCS01" score="INFINITY" node="nw-ha-1"/>

        펜스 에이전트 이외의 점수 INFINITY 또는 -INFINITY가 있는 위치 제약조건이 없어야 합니다. 모든 HA 클러스터에서 펜싱 대상인 노드에서 실행되는 것을 방지하기 위해 점수가 -INFINITY인 위치 제약조건으로 정의됩니다.

      • 암시적 위치 제약조건: Pacemaker 명령어를 실행하여 리소스를 클러스터 노드로 이동하거나 클러스터 노드에서 실행할 리소스를 차단하는 경우 cli-ban 또는 cli-prefer 프리픽스가 있는 암시적 위치 제약 조건이 제약 조건 ID에 추가됩니다. 예를 들면 다음과 같습니다.

        <rsc_location id="cli-prefer-NW1-ASCS01" rsc="NW1-ASCS01" role="Started" node="nw-ha-2" score="INFINITY"/>

솔루션

펜스 에이전트에 작업 오류가 발생함

펜스 에이전트가 클러스터 상태에 오류를 보고했습니다.

문제

SAP HANA 또는 SAP NetWeaver용 Linux Pacemaker 고가용성 클러스터에서 펜스 에이전트가 클러스터 상태에 오류를 보고했습니다. 예를 들면 다음과 같습니다.

Failed Resource Actions:
   STONITH-ha-node-01_monitor_300000 on ha-node-02 'unknown error' (1): call=153, status=Timed Out, exitreason='',  last-rc-change='Mon Dec 21 23:40:47 2023', queued=0ms, exec=60003ms

진단

SAP HANA 또는 SAP NetWeaver 고가용성 클러스터에 배포된 펜스 에이전트는 Compute Engine API 서버에 정기적으로 액세스하여 펜스 대상 인스턴스의 상태를 확인합니다. API 호출 응답에 일시적 지연이 있거나 네트워크 중단이 발생하면 펜스 에이전트 모니터링 작업이 실패하거나 시간이 초과될 수 있습니다.

펜스 에이전트 상태를 확인하려면 다음 명령어를 실행하세요.

RHEL

pcs status

SLES

crm status

펜스 에이전트 상태가 stopped이면 솔루션 옵션 중 하나를 사용하여 오류를 해결합니다.

펜스 에이전트 작업 오류로 인해 펜스 에이전트가 중지될 수 있지만 Pacemaker는 여전히 펜싱 이벤트에서 중지 지시문을 사용하여 펜스 에이전트를 호출합니다.

솔루션

펜스 에이전트 상태가 stopped이면 다음 중 하나를 수행합니다.

  • 실패 횟수를 수동으로 재설정하고 펜스 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.

    RHEL

    pcs resource cleanup FENCE_AGENT_NAME

    SLES

    crm resource cleanup FENCE_AGENT_NAME

    FENCE_AGENT_NAME을 펜스 에이전트의 이름으로 바꿉니다.

  • 펜스 에이전트 작업 오류를 자동으로 삭제하려면 failure-timeout 매개변수를 구성합니다.

    failure-timeout 매개변수는 지정된 기간이 지난 후에 실패 횟수를 재설정하고 작업 오류를 지웁니다. 이 매개변수를 적용해도 클러스터를 다시 시작하거나 클러스터를 유지보수 모드로 전환할 필요가 없습니다.

    failure-timeout 매개변수를 구성하려면 다음 명령어를 실행합니다.

    crm_resource --meta --resource FENCE_AGENT_NAME --set-parameter failure-timeout --parameter-value DURATION

    다음을 바꿉니다.

    • FENCE_AGENT_NAME: 펜스 에이전트의 이름입니다.
    • DURATION: 실패 횟수가 재설정되고 펜스 에이전트가 다시 시작된 마지막 작업 실패 이후의 기간입니다.

펜스 에이전트 gcpstonith가 지원 중단됨

구성에서 펜스 에이전트 gcpstonith가 활성 상태입니다. 이 에이전트는 지원 중단되었으며 고객 지원팀에서 대신 fence_gce로 전환해야 한다고 안내했습니다.

문제

SUSE Linux의 SAP HANA용 Linux Pacemaker 고가용성 클러스터에서 펜스 에이전트 gcpstonith가 사용됩니다. 예를 들면 다음과 같습니다.

 # crm status | grep gcpstonith
   * STONITH-hana-vm1   (stonith:external/gcpstonith):   Started hana-vm2
   * STONITH-hana-vm2   (stonith:external/gcpstonith):   Started hana-vm1

진단

SAP HANA 고가용성 클러스터에 배포된 펜스 에이전트를 업데이트하여 OS 번들 fence_gce 펜스 에이전트를 대신 사용해야 합니다. gcpstonith 에이전트 스크립트는 기존 시스템에서 제공된 것으로 fence_gce로 대체되었습니다. fence_gcefence-agents SUSE Linux 패키지의 일부로 제공됩니다. gcpstonith는 SUSE Linux HANA 배포의 일부로만 제공되었습니다.

솔루션

SUSE Linux의 gcpstonith에서 마이그레이션하려면 다음 단계를 완료하세요.

  1. 운영체제에 맞는 다음 추가 패키지를 설치합니다.

    • SLES 15의 경우: python3-oauth2clientpython3-google-api-python-client

    • SLES 12의 경우: python-google-api-python-client, python-oauth2client, python-oauth2client-gce

    운영체제에 이러한 패키지를 설치하려면 다음 명령어를 사용하세요.

    SLES 15

    zypper in -y python3-oauth2client python3-google-api-python-client

    SLES 12

    zypper in -y python-google-api-python-client python-oauth2client python-oauth2client-gce
  2. 최신 버전이 설치되도록 fence-agents 패키지를 업데이트합니다.

    zypper update -y fence-agents
  3. 클러스터를 유지보수 모드로 전환합니다.

    crm configure property maintenance-mode=true
  4. 클러스터에서 모든 펜싱 기기를 삭제합니다. 마지막 펜싱 기기를 삭제하는 동안 클러스터에 정의된 STONITH 리소스가 없음을 확인하는 메시지가 표시될 수 있습니다.

    crm configure delete FENCING_RESOURCE_PRIMARY
    crm configure delete FENCING_RESOURCE_SECONDARY
  5. 기본 인스턴스에 대한 펜싱 기기를 다시 만듭니다.

    crm configure primitive FENCING_RESOURCE_PRIMARY stonith:fence_gce \
     op monitor interval="300s" timeout="120s" \
     op start interval="0" timeout="60s" \
     params port="PRIMARY_INSTANCE_NAME" zone="PRIMARY_ZONE" \
     project="PROJECT_ID" \
     pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30
  6. 보조 인스턴스의 펜싱 기기를 다시 만듭니다.

    crm configure primitive FENCING_RESOURCE_SECONDARY stonith:fence_gce \
     op monitor interval="300s" timeout="120s" \
     op start interval="0" timeout="60s" \
     params port="SECONDARY_INSTANCE_NAME" zone="SECONDARY_ZONE" \
     project="PROJECT_ID" \
     pcmk_reboot_timeout=300 pcmk_monitor_retries=4
  7. 위치 제약조건을 설정합니다.

    crm configure location FENCING_LOCATION_NAME_PRIMARY \
     FENCING_RESOURCE_PRIMARY -inf: "PRIMARY_INSTANCE_NAME"
    
    crm configure location FENCING_LOCATION_NAME_SECONDARY \
     FENCING_RESOURCE_SECONDARY -inf: "SECONDARY_INSTANCE_NAME"
    
  8. 클러스터의 유지보수 모드를 해제합니다.

    crm configure property maintenance-mode=false

  9. 구성을 확인합니다.

    crm config show related:FENCING_RESOURCE_PRIMARY
    
  10. 클러스터 상태를 확인합니다.

    # crm status | grep fence_gce
      STONITH-hana-vm1   (stonith:fence_gce):   Started hana-vm2
      STONITH-hana-vm2   (stonith:fence_gce):   Started hana-vm1
    

리소스 에이전트가 중지됨

리소스 에이전트가 시작되지 않고 Stopped 상태로 유지됩니다.

문제

SAP HANA 또는 SAP NetWeaver용 Linux Pacemaker 고가용성 클러스터에서 리소스 에이전트가 클러스터 상태에 오류를 보고했습니다. 예를 들면 다음과 같습니다.

Failed Resource Actions:
   rsc_SAPHana_DV0_HDB00_start_0 on ha-node-02 'error' (1): call=91, status='complete', last-rc-change='Wed Oct 18 18:00:31 2023', queued=0ms, exec=19010ms

진단

실행 중인 리소스 에이전트가 실패하면 Pacemaker에서 에이전트를 중지하고 다시 시작하려고 시도합니다. 어떠한 이유로든 시작 작업이 실패하면 Pacemaker는 리소스 실패 횟수를 INFINITY로 설정하고 다른 노드에서 에이전트를 시작하려고 시도합니다. 리소스 에이전트가 노드에서 시작할 수 없으면 리소스 에이전트는 Stopped 상태로 유지됩니다.

리소스 에이전트 상태를 확인하려면 다음 명령어를 실행하세요.

RHEL

pcs status

SLES

crm status

SAP HANA의 경우 다음 예시는 hana-b 노드에 있는 Stopped 상태의 리소스 에이전트를 보여줍니다.

Full List of Resources:
  * STONITH-hana-a        (stonith:fence_gce):   Started hana-b
  * STONITH-hana-b        (stonith:fence_gce):   Started hana-a
  * Resource Group: g-primary:
    * rsc_vip_int-primary       (ocf::heartbeat:IPaddr2):        Started hana-a
    * rsc_vip_hc-primary        (ocf::heartbeat:anything):       Started hana-a
  * Clone Set: cln_SAPHanaTopology_DV0_HDB00 [rsc_SAPHanaTopology_DV0_HDB00]:
    * Started: [ hana-a hana-b ]
  * Clone Set: msl_SAPHana_DV0_HDB00 [rsc_SAPHana_DV0_HDB00] (promotable):
    * Masters: [ hana-a ]
    * Stopped: [ hana-b ]
  * STONITH-scaleup-majority    (stonith:fence_gce):   Started hana-b

솔루션

리소스 에이전트가 Stopped 상태이면 다음을 수행합니다.

  1. 실패 횟수를 재설정하여 리소스 에이전트를 수동으로 시작합니다.

    RHEL

    pcs resource cleanup RESOURCE_AGENT_NAME

    SLES

    crm resource cleanup RESOURCE_AGENT_NAME

    RESOURCE_AGENT_NAME을 리소스 에이전트 이름으로 바꿉니다. 예를 들면 rsc_SAPHana_DV0_HDB00입니다.

  2. 리소스 에이전트의 상태가 Started 상태에 도달하는지 확인합니다.

    crm_mon

    리소스 에이전트가 여전히 시작되지 않으면 관련 진단 정보를 수집하고 지원팀에 문의합니다.