IBM Cloud Docs
Red Hat Enterprise Linux 고가용성 애드온 클러스터에서 SAP HANA 비용 최적화된 스케일업 시스템 복제 구성하기

Red Hat Enterprise Linux 고가용성 애드온 클러스터에서 SAP HANA 비용 최적화된 스케일업 시스템 복제 구성하기

다음 정보는 SAP HANA 비용 최적화된 스케일업 시스템 복제를 관리하기 위한 Red Hat Enterprise Linux (RHEL) 고가용성 애드온 클러스터의 구성에 대해 설명합니다. 클러스터는 가상 서버 인스턴스를 IBM® Power® Virtual Server 의 가상 서버 인스턴스를 클러스터 노드로 사용합니다.

비용 최적화된 구성에서는 정상 작동 중에 비프로덕션 SAP HANA 시스템이 보조 노드에서 실행됩니다. 보조 노드의 하드웨어 리소스는 비프로덕션 시스템과 SAP HANA 시스템 복제 보조 노드 간에 공유됩니다. 열 테이블 데이터의 사전 로드를 비활성화하면 프로덕션 시스템 복제 보조의 메모리 사용량이 줄어듭니다.

장애 조치가 발생하면 노드가 프로덕션 워크로드를 인수하기 전에 비프로덕션 인스턴스가 자동으로 중지됩니다. 성능 최적화 구성에 비해 인수인계 시간이 길어집니다.

이 정보는 Power Virtual Server 에서 SAP HANA 의 고가용성 배포를 계획 중인 아키텍트 및 전문가를 위한 것입니다.

시작하기 전에

SAP 애플리케이션을 위한 고가용성 구현하기(IBM Power Virtual Server 참조)에 나와 있는 일반 요구 사항, 제품 설명서, 지원 문서 및 SAP 참고 사항을 검토하세요.

전제조건

  • Red Hat 고가용성 클러스터는 Power Virtual Server 의 가상 서버 인스턴스 두 개에 배포됩니다.
  • 가상 서버 인스턴스는 범위 내의 SAP HANA 시스템에 대한 하드웨어 및 리소스 요구 사항을 충족해야 합니다. 배포 계획 수립 문서의 가이드라인을 따르세요.
  • 가상 서버 인스턴스의 호스트 이름은 SAP HANA 요구 사항을 충족해야 합니다.
  • SAP HANA 가 두 가상 서버 인스턴스 모두에 설치되어 있고 SAP HANA 시스템 복제가 구성되어 있습니다. SAP HANA 설치 및 HANA 시스템 복제 설정은 Power Virtual Server 환경에만 적용되는 것이 아니므로 표준 절차를 따라야 합니다.
  • 비프로덕션 SAP HANA 시스템은 프로덕션 시스템과 다른 SIDInstance Number 으로 NODE2 에 설치됩니다. 비프로덕션 시스템에는 자체 전용 스토리지 볼륨과 파일 시스템이 필요합니다. 비프로덕션 시스템에 대한 글로벌 메모리 할당 제한을 제한하여 보조 시스템의 HANA 시스템 복제 워크로드에 충분한 메모리를 확보하세요. 제한은 global.ini 구성 파일의 [memorymanager] 섹션에 있는 global_allocation_limit 매개 변수를 사용하여 설정합니다.
  • 선택 사항으로, 가상 IP 주소 예약에 설명된 대로 비프로덕션 시스템을 위해 가상 IP 주소가 예약됩니다.

비용 최적화 시나리오 설정

비용 최적화 시나리오는 Red Hat Enterprise Linux 고가용성 애드온 클러스터에서 SAP HANA 스케일업 시스템 복제 구성에 설명된 설정의 확장입니다. 다음 단계를 계속하기 전에 프로덕션 시스템 시스템 복제 클러스터에 대한 설정을 완료하세요.

환경 변수 준비

설정을 단순화하려면 NODE2 에서 사용자 ID root 에 대해 다음 환경 변수를 준비합니다. 이러한 환경 변수는 이 정보에서 이후 운영 체제 명령과 함께 사용됩니다.

NODE2 에서 다음 환경 변수를 설정합니다.

# General settings
export SID_NP=<SID>            # SAP HANA System ID of non-production system (uppercase)
export sid_np=<sid>            # SAP HANA System ID of non-production system (lowercase)
export INSTNO_NP=<INSTNO>      # SAP HANA Instance Number of non-production system

# Cluster nodes
export NODE1=<Hostname 1>      # Hostname of virtual server instance 1 (production primary)
export NODE2=<Hostname 2>      # Hostname of virtual server instance 2 (non-production, production secondary)

# Optional virtual IP address
export VIP_NP=<IP address>     # Virtual IP address for the non-production system

SAP HANA HA/DR 공급자 후크 구성

SAP HANA 네임서버는 HANA 시스템 복제 인수인계 프로세스 중 중요한 지점에서 호출되는 Python 기반 API를 제공합니다. 이러한 API 호출은 고객별 작업을 실행하는 데 사용됩니다 (HA/DR 공급자 구현).

비용 최적화 시나리오에서는 SAP HANA HA/DR 공급자 후크를 사용하여 인수 이벤트 중에 SAP HANA 인스턴스를 자동으로 재구성합니다.

다음 섹션에서는 비용 최적화된 SAP HANA 시스템 복제 환경을 위한 후크 스크립트 설정 샘플을 보여 줍니다. 클러스터에서 비용 최적화된 SAP HANA 시스템 복제 HA 환경의 자동화를 구현하는 경우, 인수 후크 스크립트를 철저히 테스트해야 합니다. 테스트를 수동으로 실행합니다. 보조 노드에서 비프로덕션 SAP HANA 인스턴스를 종료하고, 테이크오버를 수행한 다음, 후크 스크립트가 기본 HANA DB를 올바르게 재구성하는지 확인합니다.

SAP HANA 프로덕션 데이터베이스에서 데이터베이스 사용자 만들기

다음 단계에 따라 SAP HANA 프로덕션 데이터베이스에서 데이터베이스 사용자를 만들 수 있습니다.

  1. 에서 데이터베이스 사용자를 만듭니다 SystemDBSAP HANA 에서 데이터베이스 사용자를 생성합니다, 또는 기존 사용자의 자격 증명을 제공하세요. 후크 스크립트는 이 데이터베이스 사용자를 사용하여 프로덕션 데이터베이스에 연결하고 구성 매개변수를 변경합니다.

    기본 인스턴스의 SystemDB 에 로그인하고 SAP HANA 데이터베이스 대화형 터미널 hdbsql 또는 SAP HANA 콕핏을 사용하여 새 사용자를 생성합니다.

    예를 들어 터미널 세션에서 hdbsql을 사용하여 데이터베이스에 연결합니다.

    sudo -i -u ${sid}adm -- hdbsql -i ${INSTNO} -d SYSTEMDB -u SYSTEM
    

    사용자를 작성합니다.

    CREATE USER HA_HOOK PASSWORD <Password> no force_first_password_change;
    

    사용자에게 필요한 권한을 부여합니다.

    프로필 매개변수를 변경할 수 있도록 INIFILE ADMIN 권한을 부여합니다.

    GRANT INIFILE ADMIN TO HA_HOOK;
    

    HA_HOOK 사용자를 확인합니다.

     sudo -i -u ${sid}adm -- hdbsql -d SYSTEMDB -u SYSTEM select \* from users where user_name = \'HA_HOOK\';
    
  2. 사용자 자격 증명을 보안 사용자 저장소 hdbuserstore에 추가합니다.

    두 노드에서 다음 명령을 실행합니다. 이전 단계에서 설정한 비밀번호를 사용합니다.

    sudo -i -u ${sid}adm -- hdbuserstore SET HA_HOOK_KEY localhost:3${INSTNO}13 HA_HOOK <Password>
    

    Hdbuserstore의 업데이트를 확인하세요.

    sudo -i -u ${sid}adm -- hdbuserstore list
    

    기본 인스턴스에서 저장된 사용자 키로 연결을 테스트합니다.

    sudo -i -u ${sid}adm  -- hdbsql -U HA_HOOK_KEY select \* from m_inifiles;
    

후크 스크립트 만들기

Python 후크 스크립트 생성을 위한 샘플 파일은 SAP HANA 설치의 일부로 제공됩니다. 샘플은 $DIR_INSTANCE/exe/python_support/hdb_ha_dr 디렉토리에 있습니다.

대상 디렉터리 /hana/shared/myHooks 는 이미 훅 SAPHanaSR.py 에 대해 생성되었습니다. /hana/shared/myHooks 에서 HA/DR 공급자 후크를 생성합니다. 다음 훅 스크립트는 HADRdummy.py 샘플을 기반으로 합니다.

NODE2 에서 /hana/shared/myHooks/SAPHanaCostOptSR.py 파일을 편집하고 다음 내용을 추가합니다.

"""
Sample for a HA/DR hook provider.

When using your own code in here, please copy this file to location on /hana/shared outside the HANA installation.
This file will be overwritten with each hdbupd call! To configure your own changed version of this file, please add
to your global.ini lines similar to this:

    [ha_dr_provider_<className>]
    provider = <className>
    path = /hana/shared/haHook
    execution_order = 1


For all hooks, 0 must be returned in case of success.
"""

from __future__ import absolute_import
from hdb_ha_dr.client import HADRBase, Helper
from hdbcli import dbapi
import os, time

class SAPHanaCostOptSR(HADRBase):

    def __init__(self, *args, **kwargs):
        # delegate construction to base class
        super(SAPHanaCostOptSR, self).__init__(*args, **kwargs)

    def about(self):
        return {"provider_company" :        "SAP",
                "provider_name" :           "SAPHanaCostOptSR", # provider name = class name
                "provider_description" :    "Handle reconfiguration event for cost-optimized system replication",
                "provider_version" :        "1.0"}

    def postTakeover(self, rc, **kwargs):
        """Post takeover hook."""

        # prepared SQL statements to remove memory allocation limit and pre-load of column tables
        stmnt1 = "ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') UNSET ('memorymanager','global_allocation_limit') WITH RECONFIGURE"
        stmnt2 = "ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') UNSET ('system_replication','preload_column_tables') WITH RECONFIGURE"

        myPort = int('3' + os.environ.get('DIR_INSTANCE')[-2:] + '15')
        myKey = self.config.get("userkey") if self.config.hasKey("userkey") else "HA_HOOK_KEY"

        self.tracer.info("%s.postTakeover method called with rc=%s" % (self.__class__.__name__, rc))
        self.tracer.info("%s.postTakeover method: userkey: %s, port: %s" % (self.__class__.__name__, myKey, myPort))

        if rc in (0, 1):
            # rc == 0: normal takeover succeeded
            # rc == 1: waiting for force takeover
            conn = dbapi.connect(userkey=myKey, address='localhost', port=myPort)
            self.tracer.info("%s: Connect using userkey %s - %s" % (self.__class__.__name__, myKey, conn.isconnected()))
            cursor = conn.cursor()
            rc1 = cursor.execute(stmnt1)
            self.tracer.info("%s: (%s) - %s" % (self.__class__.__name__, stmnt1, rc1))
            rc2 = cursor.execute(stmnt2)
            self.tracer.info("%s: (%s) - %s" % (self.__class__.__name__, stmnt2, rc2))
            return 0
        elif rc == 2:
            # rc == 2: error, something went wrong
            return 0

비용 최적화 후크 활성화

비용 최적화 후크를 활성화하려면 다음 단계를 따르세요.

  1. 클러스터를 중지합니다.

    클러스터 노드에서 다음 명령을 실행합니다.

    pcs cluster stop --all
    
  2. 후크 스크립트의 파일 소유권을 설정합니다.

    NODE2 에서 다음 명령을 실행합니다.

    chown -R ${sid}adm:sapsys /hana/shared/myHooks
    
  3. NODE2 에서 global.ini 구성 파일을 업데이트하여 후크 스크립트를 활성화합니다.

    NODE2 에서 다음 명령을 실행하여 global.ini 파일에 필요한 매개 변수를 추가합니다.

    sudo -i -u ${sid}adm -- <<EOT
        python \$DIR_INSTANCE/exe/python_support/setParameter.py \
          -set SYSTEM/global.ini/ha_dr_provider_SAPHanaCostOptSR/provider=SAPHanaCostOptSR \
          -set SYSTEM/global.ini/ha_dr_provider_SAPHanaCostOptSR/path=/hana/shared/myHooks \
          -set SYSTEM/global.ini/ha_dr_provider_SAPHanaCostOptSR/userkey=HA_HOOK_KEY \
          -set SYSTEM/global.ini/ha_dr_provider_SAPHanaCostOptSR/execution_order=2 \
          -set SYSTEM/global.ini/trace/ha_dr_saphanacostoptsr=info
    EOT
    
  4. global.ini 파일의 내용을 확인하세요.

    cat /hana/shared/${SID}/global/hdb/custom/config/global.ini
    
  5. 후크가 작동하는지 확인합니다.

    • NODE2 에서 HANA 인스턴스를 다시 시작하고 후크 스크립트가 예상대로 작동하는지 확인합니다.
    • SAP HANA 인수 작업으로 훅을 트리거합니다.
    • 훅이 추적 파일에 로깅한 내용이 있는지 확인합니다.
    sudo -i -u ${sid}adm -- \
        sh -c 'grep SAPHanaCostOptSR $DIR_INSTANCE/$VTHOSTNAME/trace/nameserver_*.trc'
    

    후크가 작동하는지 확인한 후 HA 클러스터를 다시 시작할 수 있습니다.

  6. HA 클러스터를 시작합니다.

    클러스터 노드에서 다음 명령을 실행합니다.

    pcs cluster start --all
    

    클러스터의 상태를 확인합니다.

    pcs status --full
    

보조 노드에서 SAP HANA 리소스 사용량 제한 정의하기

NODE2 에서 실행 중인 모든 SAP HANA 시스템은 노드의 사용 가능한 메모리를 공유합니다. 보조 시스템 SAP HANA $ {SID} 의 메모리 구성은 시스템 복제에 필요한 양으로 제한해야 비프로덕션 시스템에서 남은 메모리를 사용할 수 있습니다.

SAP 문서 보조 시스템 사용에서는 다양한 시나리오를 설명하고 매개변수 권장 사항을 제공합니다.

데이터베이스 구성 매개변수 preload_column_tables = false 를 설정하여 보조 시스템의 열 테이블 사전 로드 기능을 비활성화하여 메모리 소비를 제한합니다. 이 매개 변수는 SAP HANA 프로덕션 시스템의 인스턴스 구성 파일( NODE2 )의 [system_replication] 섹션에 있습니다.

[memorymanager] 섹션에서 SAP HANA 프로덕션 시스템과 NODE2 에서 실행 중인 비프로덕션 시스템에 대한 메모리 할당을 제한하도록 global_allocation_limit 을 설정합니다.

NODE2 에서 보조 HANA 프로덕션 인스턴스에 대해 원하는 메모리 제한이 있는 환경 변수를 정의합니다.

export GLOBAL_ALLOCATION_LIMIT=<memory_size_in_mb_for_hana_secondary>

그런 다음 다음 명령을 실행하여 global.ini 구성 파일을 업데이트합니다.

sudo -i -u ${sid}adm -- <<EOT
    python \$DIR_INSTANCE/exe/python_support/setParameter.py \
      -set SYSTEM/global.ini/system_replication/preload_column_tables=false \
      -set SYSTEM/global.ini/memorymanager/global_allocation_limit=$GLOBAL_ALLOCATION_LIMIT
EOT

구성 파일을 확인합니다.

cat /hana/shared/${SID}/global/hdb/custom/config/global.ini

hdbsqlALTER SYSTEM ALTER CONFIGURATION ... 문은 보조에서 사용할 수 없으며, 이 상태에서는 SQL 연결이 불가능합니다. hdbnsutil –reconfig 명령을 사용하여 변경 사항을 활성화합니다.

sudo -i -u ${sid}adm -- hdbnsutil -reconfig

비프로덕션 인스턴스의 global.ini 구성 파일을 업데이트하여 보조 인스턴스의 메모리 리소스 사용을 허용합니다.

NODE2 에서 비프로덕션 HANA 인스턴스에 대해 원하는 메모리 제한이 있는 환경 변수를 정의합니다.

export NON_PROD_GLOBAL_ALLOCATION_LIMIT=<memory_size_in_mb_for_non_prod_hana>

그런 다음 다음 명령을 실행하여 global.ini 구성 파일을 업데이트합니다.

sudo -i -u ${sid_np}adm -- <<EOT
    python \$DIR_INSTANCE/exe/python_support/setParameter.py \
      -set SYSTEM/global.ini/memorymanager/global_allocation_limit=$NON_PROD_GLOBAL_ALLOCATION_LIMIT \
      -reconfigure
EOT

구성 파일을 확인합니다.

cat /hana/shared/${SID_NP}/global/hdb/custom/config/global.ini

다음 명령을 실행하여 현재 데이터베이스 메모리 제한을 확인합니다.

sudo -i -u ${sid_np}adm -- hdbcons "mm globallimit" | grep limit

비프로덕션 인스턴스에 대한 클러스터 리소스 구성하기

다음 정보를 사용하여 비프로덕션 인스턴스에 대한 클러스터 리소스를 구성합니다.

SAPInstance 리소스 에이전트 설치

resource-agents-sap 패키지에는 추가 비프로덕션 SAP HANA 인스턴스를 관리하는 데 사용되는 SAPInstance 클러스터 리소스 에이전트가 포함되어 있습니다.

NODE2 에서 다음 명령을 실행하여 리소스 에이전트를 설치합니다.

dnf install -y resource-agents-sap

필요한 경우 subscription-manager 을 사용하여 SAP NetWeaver 리포지토리를 활성화합니다.

subscription-manager repos --enable="rhel-8-for-ppc64le-sap-netweaver-e4s-rpms"

비프로덕션 인스턴스 관리를 위한 클러스터 리소스 만들기

NODE2 에서 다음 명령을 실행합니다.

pcs resource create SAPHana_np_${SID_NP}_HDB${INSTNO_NP} SAPInstance \
    InstanceName="${SID_NP}_HDB${INSTNO_NP}_${NODE2}" \
    MONITOR_SERVICES="hdbindexserver|hdbnameserver" \
    START_PROFILE="/usr/sap/${SID_NP}/SYS/profile/${SID_NP}_HDB${INSTNO_NP}_${NODE2}" \
    op start timeout=600 op stop timeout=600 op monitor interval=60 timeout=600 \
    --group group_${sid_np}_non_prod

비프로덕션 인스턴스에 가상 IP 주소를 할당하려면 IPaddr2 클러스터 리소스를 추가하세요.

pcs resource create vip_np IPaddr2 \
    ip="${VIP_NP}" \
    --group group_${sid_np}_non_prod

비프로덕션 시스템이 NODE1 에서 시작되지 않도록 클러스터 제약 조건을 생성합니다.

pcs constraint location add loc-${sid_np}-avoid-${NODE1} \
    group_${sid_np}_non_prod ${NODE1} -INFINITY resource-discovery=never

인계가 발생하면 프로덕션 시스템이 NODE2 에서 역할을 맡게 되면 비프로덕션 시스템이 중지되고 해당 메모리 리소스가 해제됩니다. 다음 클러스터 제약 조건은 기본 프로덕션 인스턴스와 비프로덕션 인스턴스가 한 노드에서 함께 실행되지 않도록 하고, 프로덕션 인스턴스가 승격되기 전에 비프로덕션 인스턴스가 중지되도록 합니다.

pcs constraint colocation add group_${sid_np}_non_prod with master SAPHana_${SID}_${INSTNO}-clone score=-INFINITY
pcs constraint order stop group_${sid_np}_non_prod then promote SAPHana_${SID}_${INSTNO}-clone

클러스터 구성이 완료되었습니다.

다음 명령을 실행하여 정의된 클러스터 리소스의 상태를 확인합니다.

pcs status --full

샘플 출력:

# pcs status --full
Cluster name: SAP_PRD
Cluster Summary:
  * Stack: corosync
  * Current DC: cl-prd-2 (2) (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
  * Last updated: Fri Apr 28 16:38:00 2023
  * Last change:  Fri Apr 28 16:37:49 2023 by hacluster via crmd on cl-prd-1
  * 2 nodes configured
  * 8 resource instances configured

Node List:
  * Online: [ cl-prd-1 (1) cl-prd-2 (2) ]

Full List of Resources:
  * res_fence_ibm_powervs	(stonith:fence_ibm_powervs):	 Started cl-prd-2
  * Clone Set: SAPHanaTopology_PRD_00-clone [SAPHanaTopology_PRD_00]:
    * SAPHanaTopology_PRD_00	(ocf::heartbeat:SAPHanaTopology):	 Started cl-prd-2
    * SAPHanaTopology_PRD_00	(ocf::heartbeat:SAPHanaTopology):	 Started cl-prd-1
  * Clone Set: SAPHana_PRD_00-clone [SAPHana_PRD_00] (promotable):
    * SAPHana_PRD_00	(ocf::heartbeat:SAPHana):	 Slave cl-prd-2
    * SAPHana_PRD_00	(ocf::heartbeat:SAPHana):	 Master cl-prd-1
  * vip_PRD_00	(ocf::heartbeat:IPaddr2):	 Started cl-prd-1
  * Resource Group: group_dev_non_prod:
    * vip_np	(ocf::heartbeat:IPaddr2):	 Started cl-prd-2
    * SAPHana_np_DEV_HDB10	(ocf::heartbeat:SAPInstance):	 Started cl-prd-2

Node Attributes:
  * Node: cl-prd-1 (1):
    * hana_prd_clone_state            	: PROMOTED
    * hana_prd_op_mode                	: logreplay
    * hana_prd_remoteHost             	: cl-prd-2
    * hana_prd_roles                  	: 4:P:master1:master:worker:master
    * hana_prd_site                   	: SiteA
    * hana_prd_srmode                 	: syncmem
    * hana_prd_sync_state             	: PRIM
    * hana_prd_version                	: 2.00.070.00.1679989823
    * hana_prd_vhost                  	: cl-prd-1
    * lpa_prd_lpt                     	: 1682692638
    * master-SAPHana_PRD_00           	: 150
  * Node: cl-prd-2 (2):
    * hana_prd_clone_state            	: DEMOTED
    * hana_prd_op_mode                	: logreplay
    * hana_prd_remoteHost             	: cl-prd-1
    * hana_prd_roles                  	: 4:S:master1:master:worker:master
    * hana_prd_site                   	: SiteB
    * hana_prd_srmode                 	: syncmem
    * hana_prd_sync_state             	: SOK
    * hana_prd_version                	: 2.00.070.00.1679989823
    * hana_prd_vhost                  	: cl-prd-2
    * lpa_prd_lpt                     	: 30
    * master-SAPHana_PRD_00           	: 100

Migration Summary:

Tickets:

PCSD Status:
  cl-prd-1: Online
  cl-prd-2: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

다음 명령을 실행하여 정의된 제약 조건을 확인합니다.

샘플 출력:

# pcs constraint --full
Location Constraints:
  Resource: group_dev_non_prod
    Disabled on:
      Node: cl-prd-1 (score:-INFINITY) (resource-discovery=never) (id:loc-dev-avoid-cl-prd-1)
Ordering Constraints:
  start SAPHanaTopology_PRD_00-clone then start SAPHana_PRD_00-clone (kind:Mandatory) (non-symmetrical) (id:order-SAPHanaTopology_PRD_00-clone-SAPHana_PRD_00-clone-mandatory)
  stop group_dev_non_prod then promote SAPHana_PRD_00-clone (kind:Mandatory) (id:order-group_dev_non_prod-SAPHana_PRD_00-clone-mandatory)
Colocation Constraints:
  vip_PRD_00 with SAPHana_PRD_00-clone (score:2000) (rsc-role:Started) (with-rsc-role:Master) (id:colocation-vip_PRD_00-SAPHana_PRD_00-clone-2000)
  group_dev_non_prod with SAPHana_PRD_00-clone (score:-INFINITY) (rsc-role:Started) (with-rsc-role:Master) (id:colocation-group_dev_non_prod-SAPHana_PRD_00-clone-INFINITY)
Ticket Constraints:

보조 인스턴스의 자동 등록 활성화하기

운영 요구 사항에 따라 AUTOMATED_REGISTER 파라미터를 설정해야 합니다. 이전 기본 SAP HANA 인스턴스의 상태로 되돌릴 수 있는 기능을 유지하려면 AUTOMATED_REGISTER=false 을 사용하여 이전 기본 인스턴스를 새 보조 인스턴스로 자동 등록하지 않도록 합니다.

클러스터에서 트리거된 테이크오버 후 데이터에 문제가 발생하는 경우 AUTOMATED_REGISTERfalse 으로 설정된 경우 수동으로 되돌릴 수 있습니다.

AUTOMATED_REGISTERtrue 으로 설정된 경우 이전 기본 SAP HANA 인스턴스는 자동으로 보조로 등록되며 이전 기록에서는 활성화할 수 없습니다. AUTOMATED_REGISTER=true 의 장점은 장애가 발생한 노드가 클러스터에 다시 나타나면 고가용성이 자동으로 다시 설정된다는 점입니다.

현재로서는 클러스터를 완전히 테스트하고 장애 조치 시나리오가 예상대로 작동하는지 확인할 때까지 기본값 falseAUTOMATED_REGISTER 으로 유지하는 것이 좋습니다.

pcs resource update 명령은 리소스 속성을 수정하는 데 사용되며 pcs resource update SAPHana_${SID}_${INSTNO} AUTOMATED_REGISTER=true 은 속성을 true 로 설정합니다.

SAP HANA 시스템 복제 클러스터 테스트

클러스터 구성을 철저히 테스트하여 클러스터가 올바르게 작동하는지 확인하는 것이 중요합니다. 다음 정보는 몇 가지 샘플 장애 조치 테스트 시나리오를 제공하지만 테스트 시나리오의 전체 목록은 아닙니다.

예를 들어 각 테스트 사례에 대한 설명에는 다음 정보가 포함됩니다.

  • 테스트 중인 구성 요소
  • 테스트에 대한 설명
  • 장애 조치 테스트를 시작하기 전 사전 요구 사항 및 초기 상태
  • 테스트 절차
  • 예상 동작 및 결과
  • 복구 프로시저

Test1- 기본 데이터베이스 인스턴스의 장애 테스트

다음 정보를 사용하여 기본 데이터베이스 인스턴스의 장애를 테스트합니다.

Test1- 설명

NODE1 에서 실행 중인 기본 HANA 데이터베이스 인스턴스의 충돌을 시뮬레이션합니다.

Test1- 전제 조건

  • HANA 시스템 복제를 위한 기능적인 2노드 RHEL HA 애드온 클러스터입니다.
  • 두 클러스터 노드 모두 활성 상태입니다.
  • 클러스터는 NODE1 및 NODE2 에서 시작됩니다.
  • 클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=false 로 구성됩니다.
  • SAP HANA 시스템 복제 상태를 확인합니다:
    • 기본 SAP HANA 데이터베이스는 NODE1 에서 실행 중입니다.
    • 보조 SAP HANA 데이터베이스는 NODE2 에서 실행 중입니다.
    • HANA 시스템 복제가 활성화되고 동기화됩니다.
  • NODE2 의 보조 SAP HANA 데이터베이스가 메모리 감소 구성으로 실행 중입니다.
    • global_allocation_limit 이 줄어듭니다.
    • 열 테이블 미리 로드가 비활성화됩니다(preload_column_tables = false).
  • 비프로덕션 SAP HANA 시스템 ${SID_NP} 이 NODE2 에서 실행 중입니다.

Test1- 테스트 절차

사용자 ${sid}adm 로 시그킬 신호를 보내 SAP HANA 기본을 크래시합니다.

NODE1 에서 다음 명령을 실행합니다.

sudo -i -u ${sid}adm -- HDB kill-9

Test1- 예상되는 동작

  • SAP HANA NODE1 의 기본 인스턴스가 충돌합니다.
  • 클러스터는 중지된 기본 HANA 데이터베이스를 감지하고 리소스를 failed 로 표시합니다.
  • 이 클러스터는 NODE2 의 보조 HANA 데이터베이스를 새로운 기본 데이터베이스로 승격합니다.
    • 클러스터는 NODE2 에서 비프로덕션 데이터베이스 ${SID_NP} 를 중지합니다.
    • 활성화하는 동안 global_allocation_limitpreload_column_tables 매개 변수는 기본값으로 재설정됩니다.
  • 클러스터는 NODE1 에서 가상 IP 주소를 해제하고 NODE2 의 새 기본 주소에서 이를 획득합니다.
  • SAP NetWeaver 와 같은 애플리케이션이 SAP HANA 의 테넌트 데이터베이스에 연결되어 있는 경우 애플리케이션은 자동으로 새 기본 데이터베이스에 다시 연결됩니다.

NODE2 에서 다음 명령을 실행하여 global_allocation_limitpreload_column_tables 이 설정 해제되었는지 확인합니다.

sudo -i -u ${sid}adm -- hdbcons "mm globallimit" | grep limit
grep -E "global_allocation_limit|preload_column_tables" \
     /hana/shared/${SID}/global/hdb/custom/config/global.ini

Test1- 복구 절차

클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=false 로 구성되어 있으므로 클러스터는 장애가 발생한 HANA 데이터베이스를 다시 시작하지 않으며 새 기본 데이터베이스에 대해 등록하지 않습니다. 새 기본 계정( NODE2 )의 상태는 보조 계정 상태를 '연결 시간 초과'로 표시합니다.

NODE1 에서 다음 명령을 실행하여 이전 기본 계정을 새 보조 계정으로 등록합니다.

sudo -i -u ${sid}adm -- <<EOT
    hdbnsutil -sr_register \
        --name=${DC1} \
        --remoteHost=${NODE2} \
        --remoteInstance=${INSTNO} \
        --replicationMode=sync \
        --operationMode=logreplay \
        --online
EOT

시스템 복제 상태를 확인합니다.

sudo -i -u ${sid}adm -- <<EOT
    hdbnsutil -sr_state
    HDBSettings.sh systemReplicationStatus.py
EOT

NODE1 에서 다음 명령을 실행하여 클러스터 노드를 시작합니다.

pcs cluster start

새 보조 인스턴스가 다시 시작되고 동기화된 상태로 표시됩니다(SOK).

pcs status --full

AUTOMATED_REGISTER=true 으로 클러스터 리소스 SAPHana_${SID}_${INSTNO} 를 구성합니다.

NODE1 에서 다음 명령을 실행합니다.

pcs resource update SAPHana_${SID}_${INSTNO} AUTOMATED_REGISTER=true
pcs resource config SAPHana_${SID}_${INSTNO}

Test2- SAPHana 리소스를 다른 노드로 수동 이동 테스트하기

다음 정보를 사용하여 SAPHana 리소스를 다른 노드로 수동으로 이동하는 것을 테스트합니다.

Test2- 설명

클러스터 명령을 사용하여 기본 인스턴스를 다른 노드로 다시 이동합니다.

Test2- 전제 조건

  • HANA 시스템 복제를 위한 기능적인 2노드 RHEL HA 애드온 클러스터입니다.
  • 두 클러스터 노드 모두 활성 상태입니다.
  • 클러스터는 NODE1 및 NODE2 에서 시작됩니다.
  • 클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=true 로 구성됩니다.
  • SAP HANA 시스템 복제 상태를 확인합니다:
    • 기본 SAP HANA 데이터베이스는 NODE2 에서 실행 중입니다.
    • 보조 SAP HANA 데이터베이스는 NODE1 에서 실행 중입니다.
    • HANA 시스템 복제가 활성화되고 동기화됩니다.
  • 비프로덕션 SAP HANA 시스템 ${SID_NP} 이 NODE2 에서 중지되었습니다.

Test2- 시험 준비

비프로덕션 SAP HANA 시스템에 대한 클러스터 리소스 관리를 해제하여 보조 메모리 리소스가 제한되지 않은 상태에서 시작되지 않도록 합니다.

NODE1 에서 다음 명령을 실행합니다.

pcs resource unmanage group_${sid_np}_non_prod

Test2- 테스트 절차

NODE1 에서 다음 명령을 실행하여 SAP HANA 기본값을 NODE1 으로 다시 이동합니다.

pcs resource move SAPHana_${SID}_${INSTNO}-clone

Test2- 예상되는 동작

  • 클러스터는 리소스를 이동하기 위한 위치 제약 조건을 생성합니다.
  • 클러스터는 NODE1 에서 보조 HANA 데이터베이스로의 테이크오버를 트리거합니다.
  • SAP NetWeaver 와 같은 애플리케이션이 SAP HANA 의 테넌트 데이터베이스에 연결되어 있는 경우 애플리케이션은 자동으로 새 기본 데이터베이스에 다시 연결됩니다.
  • 비프로덕션 SAP HANA 시스템의 리소스 ${SID_NP} 의 리소스가 관리되지 않는 상태이며 자동으로 시작되지 않습니다.

Test2- 복구 절차

완전한 HA 시나리오를 다시 설정하려면 몇 가지 단계를 따라야 합니다.

  1. 기본 HANA 인스턴스가 활성화될 때까지 기다립니다. 그런 다음 보조 메모리의 메모리 공간을 줄이세요.

    NODE2 에서 다음 명령을 실행하여 메모리를 줄입니다.

    export GLOBAL_ALLOCATION_LIMIT=<size_in_mb_for_hana_secondary>
    
    sudo -i -u ${sid}adm -- <<EOT
        python \$DIR_INSTANCE/exe/python_support/setParameter.py \
          -set SYSTEM/global.ini/system_replication/preload_column_tables=false \
          -set SYSTEM/global.ini/memorymanager/global_allocation_limit=$GLOBAL_ALLOCATION_LIMIT
    EOT
    
  2. 보조 인스턴스의 시작을 트리거하는 위치 제약 조건을 제거합니다.

    pcs resource clear SAPHana_${SID}_${INSTNO}-clone
    

    제약 조건이 해제되었는지 확인합니다.

    pcs constraint
    

    클러스터 상태를 확인합니다.

    pcs status --full
    
  3. NODE2 에서 다음 명령을 실행하여 global_allocation_limitpreload_column_tables 이 설정되어 있는지 확인합니다.

    sudo -i -u ${sid}adm -- hdbcons "mm globallimit" | grep limit
    
    grep -E "global_allocation_limit|preload_column_tables" \
         /hana/shared/${SID}/global/hdb/custom/config/global.ini
    
  4. 비프로덕션 SAP HANA 시스템에 대한 리소스를 다시 활성화합니다.

    NODE2 에서 다음 명령을 실행합니다.

    pcs resource manage group_${sid_np}_non_prod
    

    비프로덕션 SAP HANA 시스템의 리소스는 ${SID_NP} 에서 관리되며 비프로덕션 시스템은 NODE2 에서 시작됩니다.

    pcs status --full
    

Test3- 기본 데이터베이스를 실행 중인 노드의 테스트 실패

다음 정보를 사용하여 기본 데이터베이스를 실행 중인 노드의 장애를 테스트합니다.

Test3- 설명

기본 HANA 데이터베이스를 실행하는 노드의 충돌을 시뮬레이션합니다.

Test3- 전제 조건

  • HANA 시스템 복제를 위한 기능적인 2노드 RHEL HA 애드온 클러스터입니다.
  • 두 클러스터 노드 모두 활성 상태입니다.
  • 클러스터는 NODE1 및 NODE2 에서 시작됩니다.
  • 클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=true 로 구성됩니다.
  • SAP HANA 시스템 복제 상태를 확인합니다:
    • 기본 SAP HANA 데이터베이스는 NODE1 에서 실행 중입니다.
    • 보조 SAP HANA 데이터베이스는 NODE2 에서 실행 중입니다.
    • HANA 시스템 복제가 활성화되고 동기화됩니다.
  • NODE2 의 보조 SAP HANA 데이터베이스가 메모리 감소 구성으로 실행 중입니다.
    • global_allocation_limit 이 줄어듭니다.
    • 열 테이블 미리 로드가 비활성화됩니다(preload_column_tables = false).
  • 비프로덕션 SAP HANA 시스템 ${SID_NP} 이 NODE2 에서 실행 중입니다.

Test3- 테스트 절차

크래시 시스템 요청을 보내 NODE1 에서 기본 크래시를 발생시킵니다.

NODE1 에서 다음 명령을 실행합니다.

sync; echo c > /proc/sysrq-trigger

Test3- 예상되는 동작

  • NODE1 종료됩니다.
  • 클러스터는 실패한 노드를 감지하고 해당 상태를 OFFLINE 로 설정합니다.
  • 이 클러스터는 NODE2 의 보조 HANA 데이터베이스를 새로운 기본 데이터베이스로 승격합니다.
    • 클러스터는 NODE2 에서 비프로덕션 데이터베이스 ${SID_NP} 를 중지합니다.
    • 활성화하는 동안 SAP HANA ${SID}global_allocation_limitpreload_column_tables 매개 변수가 재설정됩니다.
  • 클러스터는 새 기본값의 NODE2 에서 가상 IP 주소를 얻습니다.
  • SAP NetWeaver 와 같은 애플리케이션이 SAP HANA 의 테넌트 데이터베이스에 연결되어 있는 경우 애플리케이션은 자동으로 새 기본 데이터베이스에 다시 연결됩니다.

Test3- 복구 절차

IBM Cloud® 콘솔에 로그인하고 NODE1 을 시작합니다. NODE1 을 다시 사용할 수 있을 때까지 기다린 다음 클러스터 프레임워크를 다시 시작합니다.

NODE1 에서 다음 명령을 실행합니다.

pcs cluster start
pcs status --full

클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=true 로 구성되어 있으므로 NODE1 이 클러스터에 가입하면 SAP HANA 이 다시 시작되고 이전 기본 리소스가 보조 리소스로 등록됩니다.

그런 다음 Test2- SAPHana 리소스를 다른 노드로 수동 이동 테스트의 단계를 다시 실행하여 를 실행하여 초기 상황으로 되돌립니다.

Test4- 보조 데이터베이스 인스턴스의 테스트 실패

다음 정보를 사용하여 보조 데이터베이스 인스턴스의 장애를 테스트합니다.

Test4- 설명

보조 HANA 데이터베이스의 충돌을 시뮬레이션합니다.

Test4- 전제 조건

  • HANA 시스템 복제를 위한 기능적인 2노드 RHEL HA 애드온 클러스터입니다.
  • 두 노드 모두 활성 상태입니다.
  • 클러스터는 NODE1 및 NODE2 에서 시작됩니다.
  • 클러스터 리소스 SAPHana_${SID}_${INSTNO}AUTOMATED_REGISTER=true 로 구성됩니다.
  • SAP HANA 시스템 복제 상태를 확인합니다:
    • 기본 SAP HANA 데이터베이스는 NODE1 에서 실행 중입니다.
    • 보조 SAP HANA 데이터베이스는 NODE2 에서 실행 중입니다.
    • HANA 시스템 복제가 활성화되고 동기화됩니다.

Test4- 테스트 절차

사용자 ${sid}adm 로 시그킬 신호를 전송하여 SAP HANA 보조를 충돌시킵니다.

NODE2 에서 다음 명령을 실행합니다.

sudo -i -u ${sid}adm -- HDB kill-9

Test4- 예상되는 동작

  • SAP HANA NODE2 충돌이 발생합니다.
  • 클러스터는 중지된 보조 HANA 데이터베이스를 감지하고 리소스를 failed 로 표시합니다.
  • 클러스터가 보조 HANA 데이터베이스를 다시 시작합니다.
  • 클러스터가 시스템 복제가 다시 동기화되었음을 감지합니다.

Test4- 복구 절차

보조 HANA 인스턴스가 시작되고 다시 동기화될 때까지 기다린 다음(SOK), pcs status 에 표시된 대로 실패한 리소스 작업을 정리합니다.

NODE2 에서 다음 명령을 실행합니다.

pcs resource refresh SAPHana_${SID}_${INSTNO}
pcs status --full