재해 복구를 위해 SAP HANA scale-Up Multitarget 시스템 복제 구성


Red Hat Enterprise Linux for SAP Solutions 8

Red Hat Customer Content Services

초록

이 가이드에서는 특히 재해 복구 시나리오에 맞게 조정된 스케일 업 구성에서 HANA 시스템 복제를 구성하는 프로세스를 간략하게 설명합니다. 이 가이드에서는 여러 사이트에서 HANA 시스템 복제를 구현한 후 3개 이상의 사이트에 중점을 두고 있습니다.

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

Red Hat은 코드 및 문서에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 사항은 향후 릴리스에 걸쳐 점진적으로 구현될 예정입니다. 언어를 보다 포괄적으로 만드는 방법에 대한 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

Red Hat 문서에 관한 피드백 제공

문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.

Jira를 통해 피드백 제출 (등록 필요)

  1. Jira 웹 사이트에 로그인되어 있는지 확인하십시오.
  2. 이 링크를 클릭하여 피드백을 제공합니다.
  3. 요약 필드에 설명 제목을 입력합니다.
  4. 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
  5. 향후 업데이트에 대한 알림을 받으려면 Reporter 로 할당되었는지 확인하십시오.
  6. 대화 상자 하단에서 생성 을 클릭합니다.

1장. 개요

가용성에 대한 수요가 증가함에 따라 하나의 데이터 사본으로는 충분하지 않습니다.
비즈니스 연속성을 보장하기 위해 안정적이고 가용성이 높은 아키텍처는 하나 이상의 복제 사이트에서 데이터를 복제해야 합니다. 다중 대상 시스템 복제를 사용하면 기본 사이트에서 두 개 이상의 보조 사이트에 데이터 변경 사항을 복제할 수 있습니다. 자세한 내용은 SAP HANA Multitarget System Replication 을 참조하십시오.

이 문서에서는 RHEL HA 애드온을 사용하여 SAP HANA scale-Up 시스템 복제 자동화에 설명된 대로 설치된 2-노드 클러스터에서 SAP HANA Multitarget System Replication을 사용하여 재해 복구를 위해 추가 복제 사이트를 구성하는 방법을 설명합니다.

샘플 구성은 다음과 같습니다.

text

초기 설정은 다음과 같습니다.

  • 기본 사이트 1(DC1)을 두 번째 사이트 2(DC2)로 복제
  • 기본 사이트 1 (DC1)을 두 번째 사이트 3 (DC3)으로 복제합니다.

기본 사이트에 실패하면 기본 사이트는 보조 사이트 2(DC2)로 전환되고 이전 기본 사이트 1(DC1)은 보조 웹사이트가 됩니다.

text

장애 조치가 발생하면 이 솔루션을 통해 구성된 기본 사이트도 세 번째 사이트에서 전환됩니다. 장애 조치 후 구성은 다음과 같습니다.

  • DC2에서 기본 실행
  • DC1에서 2차 실행(DC2에서 동기화됨)
  • DC3에서 2차 실행(DC2에서 동기화됨)

장애 조치(failover) 중에 이 인스턴스가 실행 중인 한 remotehost3의 SAP HANA 인스턴스가 새 기본 인스턴스에 자동으로 다시 등록됩니다.

이 문서에서는 주 데이터베이스를 세 번째 사이트로 전환하는 예제도 설명합니다.

text

데이터베이스에 클라이언트를 연결하려면 추가 네트워크 구성이 필요합니다. 이 문서의 범위에 포함되지 않습니다.

자세한 내용은 다음을 확인하십시오.

2장. 매개 변수

기존의 2-노드 클러스터의 매개 변수는 세 번째 사이트를 설정하는 데 사용됩니다.

매개변수예제설명

SID

RH2

HANA 데이터베이스의 시스템 ID

첫 번째 SITE

DC1

첫 번째 데이터 센터 이름 / 사이트

두 번째 SITE

DC2

두 번째 데이터 센터 이름 / 사이트

세 번째 SITE

DC3

세 번째 데이터 센터 이름 / 사이트

InstanceNr

02

HANA 인스턴스 번호

<Sid>adm uid

1000

SAP HANA 관리자 사용자의 사용자 ID(rh2adm)

sapsys gid

980

sapsys의 그룹 ID

세 개의 HANA 인스턴스는 모두 다음과 같은 값을 사용해야 합니다.

  • SID
  • InstanceNr
  • <Sid>adm uid
  • sapsys gid

3장. 사전 요구 사항

솔루션이 작동하려면 다음 요구 사항을 충족해야 합니다.

모든 노드는 동일해야 합니다.

  • CPU 및 RAM 수
  • 소프트웨어 구성
  • RHEL 릴리스(최소 RHEL 8.6 필요)
  • 방화벽 설정
  • SAP HANA 릴리스 (SAP HANA 2.0 SPS04 이상)

pacemaker 패키지는 클러스터 노드에만 설치되고 resource-agents-sap-hana (0.162.1 이상)의 동일한 버전을 사용해야 합니다.

SAP HANA Multitarget System Replication 을 지원할 수 있으려면 SAP HANA Multitarget 시스템 복제 추가 지원을 참조하십시오. 또한 다음을 설정합니다.

  • use register_secondaries_on_takeover=true
  • use log_mode=normal

초기 설정은 RHEL HA 애드온을 사용하여 SAP HANA 스케일업 시스템 복제를 자동화하는 설치 가이드를 기반으로 합니다.

모든 SAP HANA 인스턴스의 시스템 복제 구성은 SAP 요구 사항을 기반으로 합니다. 자세한 내용은 SAP HANA 관리 가이드 를 기반으로 SAP 의 지침을 참조하십시오.

4장. 설치

이 장에서는 추가 SAP HANA 인스턴스 설치에 대해 설명합니다.

4.1. 장애 조치 테스트를 사용하여 2-노드 기본 설치 확인

RHEL HA 애드온을 사용하여 SAP HANA 스케일업 시스템 복제 자동화에 따라 설치가 완료되었는지 확인합니다.

SAP HANA Multitarget System Replication 을 사용하려면 resource-agents-sap-hana 버전이 0.162.1 이상이어야 합니다. 아래 표시된 대로 이를 확인할 수 있습니다.

# rpm -q resource-agents-sap-hana

장애 조치 테스트를 실행하여 환경이 작동하는지 확인할 수 있습니다. SAPHana 리소스를 이동할 수 있습니다. 이 리소스는 Go를 사용하여 Cryostat the SAPHana Resource에도 설명되어 있습니다.

4.2. 세 번째 사이트에 SAP HANA 설치

세 번째 사이트에서는 다음과 같이 두 노드 Pacemaker 클러스터에서 SAP HANA 인스턴스와 동일한 버전 및 매개 변수를 사용하여 SAP HANA를 설치해야 합니다.

매개변수현재의

SID

RH2

InstanceNumber

02

<Sid>adm 사용자 ID

rh2adm 999

sapsys 그룹 ID

sapsys 999

SAP HANA 설치는 hdblcm 를 사용하여 수행됩니다. 자세한 내용은 hdbclm을 사용한 SAP HANA 설치를 참조하십시오. 선택적으로 Ansible을 사용하여 설치를 수행할 수도 있습니다.

이 장의 예제에서는 다음을 사용합니다.

  • 호스트: 사이트 DC1, 사이트 DC2의 clusternode2 및 사이트 DC3의 remotehost3의 clusternode1
  • SID RH2
  • adminuser rh2adm

4.3. 세 번째 사이트에 SAP HANA 시스템 복제 설정

기존 설치에는 이미 두 노드 클러스터의 기본 및 보조 SAP HANA 인스턴스 간에 SAP HANA 시스템 복제가 구성되어 있습니다. SAP HANA 시스템 복제는 기본 SAP HANA 데이터베이스 인스턴스에서 사용할 수 있습니다.

이 장에서는 사이트 DC3의 remotehost3 노드의 보조 HANA 시스템 복제 사이트로 세 번째 SAP HANA 인스턴스를 등록하는 방법을 설명합니다. 이 단계는 노드 clusternode2에서 원래의 HANA 인스턴스(DC2) 등록과 유사합니다. 자세한 내용은 다음 장에서 설명합니다. 추가 정보가 필요한 경우 SAP HANA 시스템 복제 구성에 대한 일반 사전 요구 사항 도 확인할 수 있습니다.

4.3.1. 주 데이터베이스 확인

다른 데이터베이스가 실행 중이고 시스템 복제가 제대로 작동하는지 확인해야 합니다. 다음 사항에 유의하십시오.

다음을 사용하여 기본 HANA 인스턴스를 검색할 수 있습니다.

clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "primary masters|^mode"
mode: primary

4.3.2. 데이터베이스 키 복사

새 보조 HANA 인스턴스를 등록하려면 기본 HANA 인스턴스의 데이터베이스 키를 새 추가 HANA 복제 사이트에 복사해야 합니다. 이 예제에서 세 번째 사이트의 호스트 이름은 remotehost3입니다.

예를 들어 기본 노드 clusternode1에서 다음을 실행합니다.

clusternode1:rh2adm> scp -rp /usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/data/SSFS_${SAPSYSTEMNAME}.DAT  remotehost3:/usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/data/SSFS_${SAPSYSTEMNAME}.DAT
clusternode1:rh2adm> scp -rp /usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/key/SSFS_${SAPSYSTEMNAME}.KEY remotehost3:/usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/key/SSFS_${SAPSYSTEMNAME}.KEY

4.3.3. 추가 HANA 인스턴스를 보조 HANA 복제 사이트로 등록합니다.

기본 데이터베이스 를 실행 중인 노드의 호스트 이름을 알아야 합니다.

등록을 모니터링하려면 기본 노드의 별도의 터미널에서 다음 명령을 실행할 수 있습니다.

clusternode1:rh2adm> watch python
/usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/python_support/systemReplicationStatus.py

그러면 진행 상황 및 오류가 발생하면 표시됩니다.

세 번째 사이트(DC3)에 HANA 인스턴스를 추가 보조 SAP HANA 인스턴스로 등록하려면 세 번째 사이트 호스트 remotehost3에서 다음 명령을 실행합니다.

remotehost3:rh2adm> hdbnsutil -sr_register --name=DC3 --remoteHost=clusternode1 --remoteInstance=${TINSTANCE} --replicationMode=async --operationMode=logreplay --online

이 예에서 DC3는 세 번째 사이트의 이름이며 clusternode1은 기본 노드의 호스트 이름입니다.

데이터베이스 인스턴스가 이미 실행 중인 경우 중지할 필요가 없습니다. --online 옵션을 사용하면 온라인 상태의 인스턴스를 등록합니다. 그런 다음 인스턴스의 필요한 재시작(중지 및 시작)이 hdbnsutil 자체에 의해 시작됩니다.

참고

옵션 --online 은 HANA 인스턴스가 온라인 및 오프라인일 때(이 옵션은 SAP HANA 2.0 SPS04 이상에서 사용할 수 있음) 모든 경우에 작동합니다.

HANA 인스턴스가 오프라인 상태이면 세 번째 노드가 등록된 후 이를 시작해야 합니다. SAP HANA 시스템 복제 에서 추가 정보를 찾을 수 있습니다.

4.3.4. SAP HANA Multitarget 시스템 복제 자동 등록 지원 추가

register_secondaries_on_takeover = true 라는 SAP HANA 시스템 복제 옵션을 사용하고 있습니다. 이렇게 하면 이전 기본 사이트와 다른 보조 사이트 간의 장애 조치(failover)가 있는 경우 보조 HANA 인스턴스를 새 기본 사이트로 자동으로 다시 등록합니다. 이 옵션은 모든 잠재적인 기본 사이트의 global.ini 파일에 추가해야 합니다.

모든 HANA 인스턴스는 global.ini 에 이 항목이 있어야 합니다.

[system_replication]
register_secondaries_on_takeover = true

다음 두 장에서는 global.ini 구성에 대해 자세히 설명합니다.

경고

매개 변수에도 장애 조치가 시작될 때 세 번째 노드의 보조 HANA 인스턴스가 다운 된 경우 이 HANA 인스턴스를 수동으로 다시 등록해야 합니다.

4.3.5. pacemaker 노드에서 global.ini 구성

register_secondaries_on_takeover = true 옵션을 pacemaker 클러스터에서 관리하는 SAP HANA 인스턴스의 글로벌.ini 에 추가해야 합니다. 해당 노드에서 항상 global.ini 파일을 편집하고 다른 노드에서 파일을 복사하지 마십시오.

참고

global.ini 파일은 사이트의 HANA 인스턴스가 처리를 중지한 경우에만 편집해야 합니다.

rh2adm 사용자로 global.ini 를 편집합니다.

clusternode1:rh2adm> vim /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.ini

예제:

# global.ini last modified 2023-07-14 16:31:14.120444 by hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=02 --replicationMode=syncmem --operationMode=logreplay --name=DC2
[multidb]
mode = multidb
database_isolation = low
singletenant = yes

[ha_dr_provider_SAPHanaSR]
provider = SAPHanaSR
path = /hana/shared/myHooks
execution_order = 1

[persistence]
basepath_datavolumes = /hana/data/RH2
basepath_logvolumes = /hana/log/RH2
log_mode = normal
enable_auto_log_backup = true

[system_replication]
register_secondaries_on_takeover = true
timetravel_logreplay_mode = auto
operation_mode = logreplay
mode = primary
actual_mode = syncmem
site_id = 1
site_name = DC2

[system_replication_site_masters]
2 = clusternode1:30201

[trace]
ha_dr_saphanasr = info

이 옵션은 SAP HANA 데이터베이스 인스턴스가 시작된 즉시 활성화됩니다.

4.3.6. 세 번째 사이트에서 global.ini 구성

< sid>adm 사용자로 global.ini 를 편집합니다.

remotehost3:rh2adm> vim /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.ini

remotehost3에서는 ha_dr_provider_SAPHanaSR 섹션이 사용되지 않습니다.

remotehost3의 global.ini 예:

# global.ini last modified 2023-06-22 17:22:54.154508 by hdbnameserver
[multidb]
mode = multidb
database_isolation = low
singletenant = yes

[persistence]
basepath_datavolumes = /hana/data/RH2
basepath_logvolumes = /hana/log/RH2
log_mode = normal
enable_auto_log_backup = true

[system_replication]
operation_mode = logreplay
register_secondaries_on_takeover = true
reconnect_time_interval = 5
timetravel_logreplay_mode = auto
site_id = 3
mode = syncmem
actual_mode = syncmem
site_name = DC3

[system_replication_site_masters]
2 = clusternode1:30201

4.3.7. 설치 확인

설치 후 모든 HANA 인스턴스가 실행 중인지와 HANA 시스템 복제가 작동하는지 확인해야 합니다. 가장 쉬운 방법은 시스템 복제 상태 확인에서 자세히 설명된 대로 systemReplicationStatus 확인하는 것입니다.

자세한 내용은 데이터베이스 상태 확인 도 참조하십시오.

HANA 시스템 복제가 올바르게 작동하려면 "log_mode" 매개변수가 "normal"로 설정되어 있는지 확인하십시오. 자세한 내용은 SAP HANA 데이터베이스의 log_mode 를 참조하십시오.

설정이 예상대로 작동하는지 확인하려면 다음 장에서 설명하는 테스트 사례를 실행하십시오.

5장. 테스트 사례

설치가 완료되면 몇 가지 기본 테스트를 실행하여 설치를 확인하고 SAP HANA Multitarget System Replication이 작동하는 방법과 실패에서 복구하는 방법을 확인하는 것이 좋습니다. 프로덕션을 시작하기 전에 이러한 테스트 사례를 실행하는 것이 항상 좋습니다. 가능한 경우 프로덕션을 시작하기 전에 변경 사항을 확인하기 위해 테스트 환경을 준비할 수도 있습니다. 가능한 경우 프로덕션에서 적용하기 전에 변경 사항을 확인하기 위해 테스트 환경을 준비할 수도 있습니다.

모든 사례는 다음을 설명합니다.

  • 테스트 제목
  • 테스트 사전 조건
  • 테스트 단계
  • 테스트 모니터링
  • 테스트 시작
  • 예상 결과
  • 초기 상태로 돌아가는 방법

클러스터에서 관리하는 새 보조 HANA 복제 사이트로 이전 기본 HANA 복제 사이트를 자동으로 등록하려면 SAPHana 리소스에서 AUTOMATED_REGISTER=true 옵션을 사용할 수 있습니다. 자세한 내용은 AUTOMATED_REGISTER 를 참조하십시오.

예제에 사용되는 HA 클러스터 노드의 이름 및 HANA 복제 사이트(대괄호)는 다음과 같습니다.

  • clusternode1 (DC1)
  • clusternode2 (DC2)
  • remotehost3 (DC3)

다음 매개 변수는 HANA 인스턴스 및 클러스터를 구성하는 데 사용됩니다.

  • SID=RH2
  • INSTANCENUMBER=02
  • CLUSTERNAME=cluster1

테스트 환경의 /etc/hosts 에서 clusternode1-2, remotehost3을 별칭으로 사용할 수도 있습니다.

테스트는 예제 및 사전 조건의 추가 검사를 포함하여 더 자세히 설명합니다. 결국 추가 테스트를 위해 환경을 정리하는 방법의 예가 있습니다.

경우에 따라 clusternode1-2와 remotehost3 간의 거리가 너무 길면 -replicationMode=syncmem 대신 -replcationMode=async 를 사용해야 합니다. 또한 올바른 옵션을 선택하기 전에 SAP HANA 관리자에게 문의하십시오.

5.1. 테스트 준비

테스트를 실행하기 전에 전체 환경이 정확하고 정상적이어야 합니다.

다음을 통해 클러스터와 데이터베이스를 확인해야 합니다.

  • pcs status --full
  • python $DIR_EXECUTABLE/python_support/systemReplicationStatus.py
  • df -h

pcs status --full 의 예는 pcs status를 사용하여 Check cluster status 에서 확인할 수 있습니다. "Migration Summary"에 경고 또는 이전 오류가 있는 경우 테스트를 시작하기 전에 클러스터를 정리해야 합니다.

[root@clusternode1]# pcs resource clear SAPHana_RH2_02-clone

ClusterClean up은 더 많은 방법을 설명합니다. 클러스터 및 모든 리소스를 시작하는 것이 중요합니다.

클러스터 외에도 데이터베이스도 가동 및 실행 중이어야 합니다. 데이터베이스의 적절한 상태를 확인하는 가장 쉬운 방법은 시스템 복제 상태를 확인하는 것입니다. 복제 상태 도 참조하십시오. 이는 주 데이터베이스에서 확인해야 합니다.

기본 노드를 검색하려면 기본 데이터베이스 검색을 선택하거나 다음을 사용합니다.

[root@clusternode1]# pcs status | grep -E "Promoted|Master"
[root@clusternode1]# hdbnsutil -sr_stateConfiguration

다음을 실행하여 파일 시스템에 충분한 공간이 있는지 확인합니다.

[root@clusternode1]# df -h

계속하기 전에 시스템 점검 지침을 따르십시오. 환경이 정리되면 테스트를 실행할 준비가 된 것입니다.

5.2. 환경 모니터링

이 섹션에서는 테스트 중 환경을 모니터링하는 데 중점을 두고 있습니다. 이 섹션에서는 변경 사항을 확인하는 데 필요한 모니터만 다룹니다. 전용 터미널에서 이러한 모니터를 실행하는 것이 좋습니다. 테스트 중에 변경 사항을 감지하려면 테스트를 시작하기 전에 모니터링을 시작하는 것이 좋습니다.

Useful Commands 섹션에는 더 많은 예제가 표시됩니다.

5.2.1. 기본 노드 검색

기본 노드를 검색하여 장애 조치를 모니터링하거나 기본 노드에서 실행될 때 복제 상태에 대한 정보만 제공하는 특정 명령을 실행해야 합니다.

기본 노드를 검색하려면 다음 명령을 < sid>adm 사용자로 실행할 수 있습니다.

clusternode1:rh2adm> watch -n 5 'hdbnsutil -sr_stateConfiguration | egrep -e "primary masters|^mode"'

출력 예: clusternode2가 기본 데이터베이스인 경우:

mode: syncmem
primary masters: clusternode2

기본 데이터베이스를 실행하는 노드의 출력은 다음과 같습니다.

mode: primary

5.2.2. 복제 상태 확인

복제 상태에는 주 데이터베이스 노드와 복제의 현재 상태 간의 관계가 표시됩니다.

복제 상태를 검색하려면 < sid>adm 사용자로 실행할 수 있습니다.

clusternode1:rh2adm> hdbnsutil -sr_stateConfiguration

시스템 복제 상태의 변경 사항을 영구적으로 모니터링하려면 다음 명령을 실행하십시오.

clusternode1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'

이 예제에서는 현재 반환 코드를 결정합니다.
반환 코드(상태)가 15이면 복제 상태가 정상입니다. 다른 반환 코드는 다음과 같습니다.

  • 10: NoHSR
  • 11: 오류
  • 12: 알 수 없음
  • 13: 초기화
  • 14: 동기화
  • 15: active

새 보조를 등록하는 경우 기본 노드의 별도의 창에서 실행할 수 있으며 복제 진행 상황을 확인할 수 있습니다. 장애 조치(failover)를 모니터링하려는 경우 이전 주 데이터베이스 서버는 물론 새 주 데이터베이스 서버에서 병렬로 실행할 수 있습니다.If you want to monitor a failover, you can run it in parallel on the old primary as well as on the new primary database server. 자세한 내용은 Check SAP HANA System Replication Status 를 참조하십시오.

5.2.3. /var/log/messages 항목 확인

Pacemaker에서 /var/log/messages 파일에 많은 정보를 쓰고 있습니다. 장애 조치 중에 이 메시지 파일에 많은 수의 메시지가 기록됩니다. SAP HANA 리소스 에이전트에 따라 중요한 메시지만 팔로우하려면 pacemaker SAP 리소스의 자세한 활동을 필터링하는 것이 좋습니다. 단일 클러스터 노드에서 메시지 파일을 확인하는 것으로 충분합니다.

예를 들어 다음 별칭을 사용할 수 있습니다.

[root@clusternode1]# tmsl='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_$SAPSYSTEMNAME_HDB${TINSTANCE}|sr_register|WAITING4LPA|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED|LPT"'

별도의 창에서 tmsl 을 실행하여 테스트 진행 상황을 모니터링합니다. 모니터 장애 조치 및 동기화 상태 예제도 확인하십시오.

5.2.4. 클러스터 상태

클러스터 상태를 확인하는 방법은 여러 가지가 있습니다.

  • 클러스터가 실행 중인지 확인합니다.

    • pcs 클러스터 상태
  • 클러스터 및 모든 리소스를 확인합니다.

    • pcs status
  • 클러스터, 모든 리소스 및 모든 노드 속성을 확인합니다.

    • pcs status --full
  • 리소스만 확인합니다.

    • pcs 리소스

pcs status --full 명령은 필요한 모든 정보를 제공합니다. 변경 사항을 모니터링하려면 watch를 사용하여 이 명령을 실행할 수 있습니다.

[root@clusternode1]# watch pcs status --full

출력 예 및 추가 옵션은 클러스터 상태 확인 에서 확인할 수 있습니다.

5.2.5. leftovers 검색

다음 테스트를 실행할 준비가 되었는지 확인하려면 이전 테스트의 남은 기간을 수정하거나 제거해야 합니다.

  • STONITH 는 클러스터의 노드를 펜싱하는 데 사용됩니다.

    • detect: [root@clusternode1]# pcs stonith history
    • 수정: [root@clusternode1]# pcs stonith cleanup
  • 여러 기본 데이터베이스:

    • detect: clusternode1:rh2adm> hdbnsutil -sr_stateConfiguration | grep -i primary

      동일한 기본 노드를 식별해야 합니다.

    • 수정: --force_full_replica옵션을 사용하여 잘못된 기본 사항을 다시 등록합니다.
  • 이동으로 인한 위치 제한:

    • detect: [root@clusternode1]# pcs constraint location

      warning 섹션을 확인합니다.

    • 수정: [root@clusternode1]# pcs resource clear <clone-resource-which was moved>
  • 보조 복제 관계:

    • detect: 기본 데이터베이스에서 clusternode1:rh2adm> python $DIR_EXECU Cryostat/python_support/systemReplicationStatus.py를 실행합니다.
    • 수정: 보조 데이터베이스를 등록 취소하고 다시 등록합니다.
  • Check siteReplicationMode (모든 SAP HANA 노드에서 동일한 출력)

    • clusternode1:rh2adm> hdbnsutil -sr_state --sapcontrol=1 |grep site.*Mode
  • pcs 속성:

    • detect: [root@clusternode1]# pcs property config
    • 수정: [root@clusternode1]# pcs 속성 설정 <key=value>
  • 명확한 유지 관리 모드.

    • [root@clusternode1]# pcs property set maintenance-mode=false
  • log_mode:

    • detect: clusternode1:rh2adm> python systemReplicationStatus.py

      는 일반적으로 log_mode 가 필요한 복제 상태에 응답합니다. log_modehdbsql을 사용하여 Inifile 내용을 확인하는 데 설명된 대로 감지할 수 있습니다.

    • 수정: log_mode 를 normal로 변경하고 주 데이터베이스를 다시 시작합니다.
  • CIB 항목:

  • cleanup/clear:

    • detect: [root@clusternode1]# pcs status --full

      종종 오류 또는 경고를 표시합니다. 리소스를 정리/삭제할 수 있으며 모든 것이 정상이면 아무 일도 발생하지 않습니다. 다음 테스트를 실행하기 전에 환경을 정리할 수 있습니다.

    • 수정할 예제:

      [root@clusternode1]# pcs resource clear <name-of-the-clone-resource>[root@clusternode1]# pcs resource cleanup <name-of-the-clone-resource>

이 기능은 기존 환경에 문제가 있는지 확인하려는 경우에도 유용합니다.

자세한 내용은 Useful 명령을 참조하십시오.

5.3. 테스트 1: 활성 세 번째 사이트와 함께 기본 노드의 Cryostat

테스트 제목

세 번째 사이트를 자동으로 다시 등록합니다.

삭제 후 SOK에 동기화 상태가 변경됩니다.

테스트 사전 조건

  • DC1, DC2, DC3의 SAP HANA가 실행 중입니다.
  • 클러스터가 오류 또는 경고 없이 가동 및 실행됩니다.

테스트 단계

pcs [root@clusternode1]# 리소스 이동 <sap-clone-resource> <target-node> 명령을 사용하여 SAPHana 리소스를 이동합니다.

테스트 모니터링

세 번째 사이트에서 rh2adm 으로 실행. 표 끝에 제공된 명령을 실행합니다.(*)

보조 노드에서 root: [root@clusternode1]#에서 pcs status --full을 조사합니다.

테스트 시작

클러스터 명령을 실행합니다.

[root@clusternode1]# pcs move resource SAPHana_RH2_02-clone <target-node>

[root@clusternode1]# pcs resource clear SAPHana_RH2_02-clone

예상 결과

사이트 3의 모니터 명령에서 기본 마스터가 clusternode1에서 clusternode2로 변경됩니다.

리소스를 지우면 동기화 상태가 SFAIL 에서 SOK 로 변경됩니다.

초기 상태로 돌아가는 방법

테스트를 두 번 실행합니다.

(*)

remotehost3:rh2adm>
watch hdbnsutil -sr_state
[root@clusternode1]# tail -1000f /var/log/messages |egrep -e ‘SOK|SWAIT|SFAIL’

자세한 설명

  • clusternode1 또는 clusternode2에서 root로 클러스터의 초기 상태를 확인합니다.

    [root@clusternode1]# pcs status --full
    Cluster name: cluster1
    Cluster Summary:
      * Stack: corosync
      * Current DC: clusternode1 (1) (version 2.1.2-4.el8_6.6-ada5c3b36e2) - partition with quorum
      * Last updated: Mon Sep  4 06:34:46 2023
      * Last change:  Mon Sep  4 06:33:04 2023 by root via crm_attribute on clusternode1
      * 2 nodes configured
      * 6 resource instances configured
    
    Node List:
      * Online: [ clusternode1 (1) clusternode2 (2) ]
    
    Full List of Resources:
      * auto_rhevm_fence1	(stonith:fence_rhevm):	 Started clusternode1
      * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
        * SAPHanaTopology_RH2_02	(ocf::heartbeat:SAPHanaTopology):	 Started clusternode2
        * SAPHanaTopology_RH2_02	(ocf::heartbeat:SAPHanaTopology):	 Started clusternode1
      * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
        * SAPHana_RH2_02	(ocf::heartbeat:SAPHana):	 Slave clusternode2
        * SAPHana_RH2_02	(ocf::heartbeat:SAPHana):	 Master clusternode1
      * vip_RH2_02_MASTER	(ocf::heartbeat:IPaddr2):	 Started clusternode1
    
    Node Attributes:
      * Node: clusternode1 (1):
        * hana_rh2_clone_state            	: PROMOTED
        * hana_rh2_op_mode                	: logreplay
        * hana_rh2_remoteHost             	: clusternode2
        * hana_rh2_roles                  	: 4:P:master1:master:worker:master
        * hana_rh2_site                   	: DC1
        * hana_rh2_sra                    	: -
        * hana_rh2_srah                   	: -
        * hana_rh2_srmode                 	: syncmem
        * hana_rh2_sync_state             	: PRIM
        * hana_rh2_version                	: 2.00.062.00
        * hana_rh2_vhost                  	: clusternode1
        * lpa_rh2_lpt                     	: 1693809184
        * master-SAPHana_RH2_02           	: 150
      * Node: clusternode2 (2):
        * hana_rh2_clone_state            	: DEMOTED
        * hana_rh2_op_mode                	: logreplay
        * hana_rh2_remoteHost             	: clusternode1
        * hana_rh2_roles                  	: 4:S:master1:master:worker:master
        * hana_rh2_site                   	: DC2
        * hana_rh2_sra                    	: -
        * hana_rh2_srah                   	: -
        * hana_rh2_srmode                 	: syncmem
        * hana_rh2_sync_state             	: SOK
        * hana_rh2_version                	: 2.00.062.00
        * hana_rh2_vhost                  	: clusternode2
        * lpa_rh2_lpt                     	: 30
        * master-SAPHana_RH2_02           	: 100
    
    Migration Summary:
    
    Tickets:
    
    PCSD Status:
      clusternode1: Online
      clusternode2: Online
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled

    이 출력은 HANA가 기본 SAP HANA 서버인 clusternode1에서 승격되고 복제 리소스의 이름은 승격 가능한 SAPHana_RH2_02-clone임을 보여줍니다.
    테스트 중에 이를 별도의 창에서 실행하여 변경 사항을 확인할 수 있습니다.

    [root@clusternode1]# watch pcs status --full
  • SAP HANA 복제 리소스의 이름을 식별하는 또 다른 방법은 다음과 같습니다.

    [root@clusternode2]# pcs resource
      * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
        * Started: [ clusternode1 clusternode2 ]
      * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
        * Promoted: [ clusternode2 ]
        * Unpromoted: [ clusternode1 ]
  • 테스트를 시작하기 전에 별도의 터미널 창의 remotehost3에서 기본 서버 시작 모니터링을 보려면 다음을 수행합니다.

    remotehost3:rh2adm> watch 'hdbnsutil -sr_state | grep "primary masters"

    출력은 다음과 같습니다.

    Every 2.0s: hdbnsutil -sr_state | grep "primary masters"                                                                                 remotehost3: Mon Sep  4 08:47:21 2023
    
    primary masters: clusternode1

    테스트 중에 예상되는 출력은 clusternode2로 변경됩니다.

  • 위에서 검색한 복제 리소스를 clusternode2로 이동하여 테스트를 시작합니다.

    [root@clusternode1]# pcs resource move SAPhana_RH2_02-clone clusternode2
  • remotehost3의 모니터 출력은 다음과 같이 변경됩니다.

    Every 2.0s: hdbnsutil -sr_state | grep "primary masters"
    remotehost3: Mon Sep  4 08:50:31 2023
    
    primary masters: clusternode2

    Pacemaker는 복제 리소스를 이동하기 위한 위치 제약 조건을 생성합니다. 이 작업은 수동으로 제거해야 합니다. 다음을 사용하여 제약 조건을 확인할 수 있습니다.

    [root@clusternode1]# pcs constraint location

    이 제약 조건을 제거해야 합니다.

  • 복제 리소스를 지워 위치 제약 조건을 제거합니다.

    [root@clusternode1]#  pcs resource clear SAPhana_RH2_02-clone
    Removing constraint: cli-prefer-SAPHana_RH2_02-clone
  • 리소스를 정리합니다.

    [root@clusternode1]# pcs resource cleanup SAPHana_RH2_02-clone
    Cleaned up SAPHana_RH2_02:0 on clusternode2
    Cleaned up SAPHana_RH2_02:1 on clusternode1
    Waiting for 1 reply from the controller
    ... got reply (done)

테스트 결과

  • remotehost3의 "기본 마스터" 모니터에 새 기본 노드로 즉시 전환해야 합니다.
  • 클러스터 상태를 확인하면 이전 보조가 승격되고 이전 주가 다시 등록되고 Clone_StatePromoted 에서 Undefined 에서 WAITINGFORLPA 에서 DEMOTED 로 변경됩니다.
  • 보조 서버는 SAPHana 모니터가 장애 조치 후 처음으로 시작될 때 sync_stateSFAIL 로 변경합니다. 기존 위치 제약 조건으로 인해 리소스를 지우고 짧은 시간 후에 보조 보조의 sync_stateSOK 로 다시 변경됩니다.
  • 보조가 승격됩니다.

초기 상태를 복원하려면 다음 테스트를 실행하면 됩니다. 테스트를 완료한 후 정리 를 실행하십시오.

5.4. 테스트 2: 기본 노드가 수동 세 번째 사이트를 사용하는 경우

테스트 제목

중지된 세 번째 사이트에 대한 재등록이 없습니다.

세 번째 위치가 다운된 경우에도 페일오버가 작동합니다.

테스트 사전 조건

  • DC1의 SAP HANA가 실행 중이고 DC3에서 중지됩니다.
  • 클러스터가 오류 또는 경고 없이 가동 및 실행됩니다.

테스트 단계

pcs [root@clusternode1]# resource move 명령을 사용하여 SAPHana 리소스를 이동합니다.

테스트 시작

클러스터 명령 실행: [root@clusterclusternode1]# pcs move resource SAPHana_RH2_02-clone clusterclusternode1

예상 결과

DC3에서는 변경되지 않습니다. SAP HANA 시스템 복제는 오래된 관계를 유지합니다.

초기 상태로 돌아가는 방법

DC3를 새로 등록하고 SAP HANA를 시작합니다.

자세한 설명

  • clusternode1 또는 clusternode2에서 root로 클러스터의 초기 상태를 확인합니다.

    [root@clusternode1]# pcs status --full
    Cluster name: cluster1
    Cluster Summary:
      * Stack: corosync
      * Current DC: clusternode1 (1) (version 2.1.2-4.el8_6.6-ada5c3b36e2) - partition with quorum
      * Last updated: Mon Sep  4 06:34:46 2023
      * Last change:  Mon Sep  4 06:33:04 2023 by root via crm_attribute on clusternode1
      * 2 nodes configured
      * 6 resource instances configured
    
    Node List:
      * Online: [ clusternode1 (1) clusternode2 (2) ]
    
    Full List of Resources:
      * auto_rhevm_fence1	(stonith:fence_rhevm):	 Started clusternode1
      * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
        * SAPHanaTopology_RH2_02	(ocf::heartbeat:SAPHanaTopology):	 Started clusternode2
        * SAPHanaTopology_RH2_02	(ocf::heartbeat:SAPHanaTopology):	 Started clusternode1
      * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
        * SAPHana_RH2_02	(ocf::heartbeat:SAPHana):	 Slave clusternode2
        * SAPHana_RH2_02	(ocf::heartbeat:SAPHana):	 Master clusternode1
      * vip_RH2_02_MASTER	(ocf::heartbeat:IPaddr2):	 Started clusternode1
    
    Node Attributes:
      * Node: clusternode1 (1):
        * hana_rh2_clone_state            	: PROMOTED
        * hana_rh2_op_mode                	: logreplay
        * hana_rh2_remoteHost             	: clusternode2
        * hana_rh2_roles                  	: 4:P:master1:master:worker:master
        * hana_rh2_site                   	: DC1
        * hana_rh2_sra                    	: -
        * hana_rh2_srah                   	: -
        * hana_rh2_srmode                 	: syncmem
        * hana_rh2_sync_state             	: PRIM
        * hana_rh2_version                	: 2.00.062.00
        * hana_rh2_vhost                  	: clusternode1
        * lpa_rh2_lpt                     	: 1693809184
        * master-SAPHana_RH2_02           	: 150
      * Node: clusternode2 (2):
        * hana_rh2_clone_state            	: DEMOTED
        * hana_rh2_op_mode                	: logreplay
        * hana_rh2_remoteHost             	: clusternode1
        * hana_rh2_roles                  	: 4:S:master1:master:worker:master
         * hana_rh2_site                   	: DC2
        * hana_rh2_sra                    	: -
        * hana_rh2_srah                   	: -
        * hana_rh2_srmode                 	: syncmem
        * hana_rh2_sync_state             	: SOK
        * hana_rh2_version                	: 2.00.062.00
        * hana_rh2_vhost                  	: clusternode2
        * lpa_rh2_lpt                     	: 30
        * master-SAPHana_RH2_02           	: 100
    
    Migration Summary:
    
    Tickets:
    
    PCSD Status:
      clusternode1: Online
      clusternode2: Online
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled

    이 예제의 출력은 HANA가 기본 SAP HANA 서버인 clusternode1에서 승격되고 복제 리소스 이름은 SAPHana_RH2_02-clone 임을 보여줍니다. HANA 전에 테스트 3을 실행하는 경우 clusternode2에서 승격될 수 있습니다.

  • remotehost3에서 데이터베이스를 중지합니다.

    remotehost3:rh2adm> HDB stop
    hdbdaemon will wait maximal 300 seconds for NewDB services finishing.
    Stopping instance using: /usr/sap/RH2/SYS/exe/hdb/sapcontrol -prot NI_HTTP -nr 02 -function Stop 400
    
    12.07.2023 11:33:14
    Stop
    OK
    Waiting for stopped instance using: /usr/sap/RH2/SYS/exe/hdb/sapcontrol -prot NI_HTTP -nr 02 -function WaitforStopped 600 2
    
    
    12.07.2023 11:33:30
    WaitforStopped
    OK
    hdbdaemon is stopped.
  • remotehost3의 기본 데이터베이스를 확인합니다.

    remotehost3:rh2adm> hdbnsutil -sr_stateConfiguration| grep -i "primary masters"
    
    primary masters: clusterclusternode2
  • 클러스터 노드의 클러스터의 현재 기본 사항을 확인합니다.

    [root@clusterclusternode1]# pcs resource | grep Masters
        * Masters: [ clusternode2 ]
  • sr_state 를 확인하여 SAP HANA 시스템 복제 관계를 확인합니다.

    clusternode2:rh2adm> hdbnsutil -sr_state
    
    System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~
    
    online: true
    
    mode: primary
    operation mode: primary
    site id: 2
    site name: DC1
    
    is source system: true
    is secondary/consumer system: false
    has secondaries/consumers attached: true
    is a takeover active: false
    is primary suspended: false
    
    Host Mappings:
    ~~~~~~~~~~~~~~
    
    clusternode1 -> [DC3] remotehost3
    clusternode1 -> [DC1] clusternode1
    clusternode1 -> [DC2] clusternode2
    
    
    Site Mappings:
    ~~~~~~~~~~~~~~
    DC1 (primary/primary)
        |---DC3 (syncmem/logreplay)
        |---DC2 (syncmem/logreplay)
    
    Tier of DC1: 1
    Tier of DC3: 2
    Tier of DC2: 2
    
    Replication mode of DC1: primary
    Replication mode of DC3: syncmem
    Replication mode of DC2: syncmem
    
    Operation mode of DC1: primary
    Operation mode of DC3: logreplay
    Operation mode of DC2: logreplay
    
    Mapping: DC1 -> DC3
    Mapping: DC1 -> DC2
    done.

SAP HANA 시스템 복제 관계에는 여전히 DC2 및 DC3에 복제되는 하나의 기본(DC1)이 있습니다. 아래 remotehost3의 복제 관계는 다음을 사용하여 표시할 수 있습니다.

remothost3:rh2adm> hdbnsutil -sr_stateConfiguration

System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~

mode: syncmem
site id: 3
site name: DC3
active primary site: 1

primary masters: clusternode1
done.

오프라인 상태인 remotehost3의 데이터베이스는 global.ini 파일의 항목을 확인합니다.

  • 테스트 시작: 클러스터에서 장애 조치(failover)를 시작하여 SAPHana-clone-resource 예제를 이동합니다.

    [root@clusternode1]# pcs resource move SAPHana_RH2_02-clone clusternode2
    참고

    SAPHana가 clusternode2에서 승격된 경우 복제 리소스를 clusternode1로 이동해야 합니다. 이 예제에서는 SAPHana가 clusternode1에서 승격될 것으로 예상합니다.

    출력이 없습니다. 이전 테스트와 유사하게 위치 제약 조건이 생성되고 다음과 같이 표시할 수 있습니다.

    [root@clusternode1]# pcs constraint location
    Location Constraints:
      Resource: SAPHana_RH2_02-clone
        Enabled on:
          Node: clusternode1 (score:INFINITY) (role:Started)

    클러스터가 제대로 보이는 경우에도 이 제약 조건은 제약 조건을 제거하지 않는 한 다른 장애 조치를 방지합니다. 한 가지 방법은 리소스를 지우는 것입니다.

  • 리소스를 지웁니다.

    [root@clusternode1]# pcs constraint location
    Location Constraints:
      Resource: SAPHana_RH2_02-clone
        Enabled on:
          Node: clusternode1 (score:INFINITY) (role:Started)
    [root@clusternode1]# pcs resource clear SAPHana_RH2_02-clone
    Removing constraint: cli-prefer-SAPHana_RH2_02-clone
  • 리소스를 정리합니다.

    [root@clusternode1]# pcs resource cleanup SAPHana_RH2_02-clone
    Cleaned up SAPHana_RH2_02:0 on clusternode2
    Cleaned up SAPHana_RH2_02:1 on clusternode1
    Waiting for 1 reply from the controller
    ... got reply (done)
  • 현재 상태를 확인합니다. 동기화 중이어야 하는 복제 상태를 표시하는 세 가지 방법이 있습니다. remotehost3에서 기본부터 시작합니다.

    remotehost3:rh2adm>  hdbnsutil -sr_stateConfiguration| grep -i primary
    active primary site: 1
    primary masters: clusternode1

    출력에 기본을 clusternode2로 이동하기 전에 먼저 시작된 사이트 1 또는 clusternode1이 표시됩니다. 다음으로 새 주에서 시스템 복제 상태를 확인합니다. 먼저 새 기본 설정을 감지합니다.

    [root@clusternode1]# pcs resource | grep  Master
        * Masters: [ clusternode2 ]

    여기서는 remotehost3을 다시 등록해야 하는 불일치가 있습니다. 테스트를 다시 실행하면 기본 설정을 원래 clusternode1로 다시 전환할 수 있습니다. 이 경우 시스템 복제가 작동하는지 확인하는 세 번째 방법이 있습니다. 기본 노드에서는 clusternode2를 실행합니다.

    clusternode2:rh2adm> cdpy
    clusternode2:rh2adm> python
    $DIR_EXECUTABLE/python_support/systemReplicationStatus.py
    |Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
    |         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
    |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
    |SYSTEMDB |clusternode2 |30201 |nameserver   |        1 |      2 |DC2       |clusternode1    |    30201 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |clusternode2 |30207 |xsengine     |        2 |      2 |DC2       |clusternode1    |    30207 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |clusternode2 |30203 |indexserver  |        3 |      2 |DC2       |clusternode1    |    30203 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    
    status system replication site "1": ACTIVE
    overall system replication status: ACTIVE
    
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    mode: PRIMARY
    site id: 2
    site name: DC2

    이 출력에 remotehost3이 표시되지 않으면 remotehost3을 다시 등록해야 합니다. 등록하기 전에 기본 노드에서 다음을 실행하여 등록 진행 상황을 확인하십시오.

    clusternode2:rh2adm> watch python
    $DIR_EXECUTABLE/python_support/systemReplicationStatus.py

    이제 다음 명령을 사용하여 remotehost3을 다시 등록할 수 있습니다.

    remotehost3:rh2adm> hdbnsutil -sr_register --remoteHost=clusternode2 --remoteInstance=${TINSTANCE} --replicationMode=async --name=DC3 --remoteName=DC2 --operation
    Mode=logreplay --online
    adding site ...
    collecting information ...
    updating local ini files ...
    done.

    remotehost3의 데이터베이스가 아직 시작되지 않더라도 시스템 복제 상태 출력에서 세 번째 사이트를 볼 수 있습니다.
    remotehost3에서 데이터베이스를 시작하여 등록을 완료할 수 있습니다.

    remotehost3:rh2adm> HDB start
    
    
    StartService
    Impromptu CCC initialization by 'rscpCInit'.
      See SAP note 1266393.
    OK
    OK
    Starting instance using: /usr/sap/RH2/SYS/exe/hdb/sapcontrol -prot NI_HTTP -nr 02 -function StartWait 2700 2
    
    
    04.09.2023 11:36:47
    Start
    OK

위에서 시작한 모니터에 remotehost3의 동기화가 즉시 표시됩니다.

  • 다시 전환하려면 테스트를 다시 실행합니다. 선택적 테스트 중 하나는 primary를 remotehost3의 global.ini에 구성한 노드로 전환한 다음 데이터베이스를 시작하는 것입니다. 데이터베이스가 표시될 수 있지만 다시 등록하지 않는 한 시스템 복제 상태의 출력에 표시되지 않습니다.

자세한 내용은 Check SAP HANA System Replication status 에서도 참조하십시오.

5.5. 테스트 3: 기본 노드의 third site

테스트 제목

세 번째 사이트로 기본을 장애 조치합니다.

보조 부분은 세 번째 사이트에 다시 등록됩니다.

테스트 사전 조건

  • DC1, DC2의 SAP HANA가 실행 중입니다.
  • 클러스터가 오류 또는 경고 없이 가동 및 실행됩니다.
  • System Replication is in place and in sync ( python systemReplicationStatus.py)를 확인하십시오.

테스트 단계

클러스터를 유지보수 모드로 설정하여 복구할 수 있습니다.

HANA 데이터베이스는 hdbnsutil -sr_takeover를 사용하여 세 번째 노드를 형성합니다.

테스트 시작

SAP HANA commandon remotehost3: rh2adm>: hdbnsutil -sr_takeover를 실행합니다.

테스트 모니터링

세 번째 사이트에서 run: remotehost3:rh2adm> watch hdbnsutil -sr_state

예상 결과

  • 세 번째 노드가 기본 노드가 됩니다.
  • 보조 노드는 기본 마스터를 remotehost3로 변경합니다. 이전 기본 노드를 새 기본 노드에 다시 등록해야 합니다.

초기 상태로 돌아가는 방법

Run Test 4: Failback of the primary node to the first site.

자세한 설명

  • Check database 를 사용하여 데이터베이스가 실행 중인지 확인하고 복제 상태를 확인합니다.

    clusternode2:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"

출력은 예를 들면 다음과 같습니다.

mode: syncmem
primary masters: clusternode1

이 경우 기본 데이터베이스는 clusternode1입니다. clusternode1에서 이 명령을 실행하면 다음을 얻을 수 있습니다.

mode: primary

이 기본 노드에서는 시스템 복제 상태를 표시할 수도 있습니다. 다음과 같이 표시됩니다.

clusternode1:rh2adm> cdpy
clusternode1:rh2adm> python systemReplicationStatus.py
|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |remotehost3    |    30201 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |remotehost3    |    30207 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |remotehost3    |    30203 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |

status system replication site "3": ACTIVE
status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1
  • 이제 적절한 환경이 있고 별도의 창에서 모든 3개의 노드에서 시스템 복제 상태를 모니터링할 수 있습니다.

테스트를 시작하기 전에 3개의 모니터를 시작해야 합니다. 테스트가 실행되면 출력이 변경됩니다. 테스트가 완료되지 않는 한 계속 실행하십시오.

기존 기본 노드에서 clusternode1은 테스트 중에 별도의 창에서 실행되었습니다.

clusternode1:rh2adm> watch -n 5 'python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?`

clusternode1의 출력은 다음과 같습니다.

Every 5.0s: python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicati...  clusternode1: Tue XXX XX HH:MM:SS 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |
Replication |Replication |Replication    |Secondary    |
|         |	  |	 |             |          |        |          |Host	 |Port      |Site ID   |Site Name |Active Status |
Mode        |Status	 |Status Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |
----------- |----------- |-------------- |------------ |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |	 1 |DC1       |remotehost3    |    30201 |        3 |DC3	  |YES		 |
ASYNC       |ACTIVE	 |               |        True |
|RH2	  |clusternode1 |30207 |xsengine     |        2 |	 1 |DC1       |remotehost3    |    30207 |        3 |DC3	  |YES		 |
ASYNC       |ACTIVE	 |               |        True |
|RH2	  |clusternode1 |30203 |indexserver  |        3 |	 1 |DC1       |remotehost3    |    30203 |        3 |DC3	  |YES		 |
ASYNC       |ACTIVE	 |               |        True |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |	 1 |DC1       |clusternode2    |    30201 |        2 |DC2	  |YES		 |
SYNCMEM     |ACTIVE	 |               |        True |
|RH2	  |clusternode1 |30207 |xsengine     |        2 |	 1 |DC1       |clusternode2    |    30207 |        2 |DC2	  |YES		 |
SYNCMEM     |ACTIVE	 |               |        True |
|RH2	  |clusternode1 |30203 |indexserver  |        3 |	 1 |DC1       |clusternode2    |    30203 |        2 |DC2	  |YES		 |
SYNCMEM     |ACTIVE	 |               |        True |

status system replication site "3": ACTIVE
status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1
Status 15

remotehost3에서 동일한 명령을 실행합니다.

remotehost3:rh2adm> watch -n 5 'python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'

응답은 다음과 같습니다.

this system is either not running or not primary system replication site

테스트가 장애 조치(failover)를 시작한 후 출력이 변경됩니다. 출력은 테스트를 시작하기 전에 기본 노드의 예와 유사합니다.

두 번째 노드에서 다음을 시작합니다.

clusternode2:rh2adm> watch -n 10 'hdbnsutil -sr_state | grep masters'

그러면 현재 마스터 clusternode1이 표시되고 페일오버가 시작된 후 즉시 전환됩니다.

  • 모든 것이 올바르게 구성되었는지 확인하려면 global.ini 도 확인하십시오.
  • DC1, DC2 및 DC3에서 global.ini 를 확인합니다.

세 개의 노드 모두에서 global.ini 는 다음을 포함해야 합니다.

[persistent]
log_mode=normal
[system_replication]
register_secondaries_on_takeover=true

예를 들면 다음과 같이 global.ini를 편집할 수 있습니다.

clusternode1:rh2adm>vim /usr/sap/$SAPSYSTEMNAME/SYS/global/hdb/custom/config/global.ini
  • [선택 사항] 클러스터를 유지 관리 모드로 전환합니다.

    [root@clusternode1]# pcs property set maintenance-mode=true

    테스트 중에 페일오버가 유지 관리 모드를 설정하지 않고 작동하는지 확인할 수 있습니다. 따라서 첫 번째 테스트 없이 실행할 수 있습니다. 복구하는 동안이 작업을 수행하는 동안, 난 단지 당신에게 보여주고 싶습니다, 그리고 함께 작동합니다. 다음 중 기본 옵션과 관련하여 액세스할 수 없는 것은 무엇입니까.

  • test: Cryostat를 DC3로 시작합니다. remotehost3에서 다음을 실행하십시오.

    remotehost3:rh2adm> hdbnsutil -sr_takeover
    done.

테스트가 시작되었으므로 이전에 시작한 모니터의 출력을 확인하십시오.

clusternode1에서 시스템 복제 상태는 remotehost3 및 clusternode2(DC2)와의 관계가 손실됩니다.

Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $?                               clusternode1: Mon Sep  4 11:52:16 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replic
ation                  |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status
 Details               |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------
---------------------- |------------ |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
ication channel closed |       False |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
ication channel closed |       False |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
ication channel closed |       False |

status system replication site "2": ERROR
overall system replication status: ERROR

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1
Status 11

클러스터는 여전히 이 동작을 인식하지 못합니다. 시스템 복제 상태의 반환 코드를 확인하는 경우 반환 코드 11은 오류가 있음을 의미합니다. 액세스 권한이 있는 경우 지금 유지 관리 모드로 전환하는 것이 좋습니다.

remotehost3은 새로운 기본이 되고 clusternode2(DC2)가 remotehost3의 새 기본 설정으로 자동으로 등록됩니다.

remotehost3의 시스템 복제 상태 출력 예:

Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $?                               remotehost3: Mon Sep  4 13:55:29 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replic
ation    |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status
 Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------
-------- |------------ |
|SYSTEMDB |remotehost3 |30201 |nameserver   |        1 |      3 |DC3       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
         |        True |
|RH2      |remotehost3 |30207 |xsengine     |        2 |      3 |DC3       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
         |        True |
|RH2      |remotehost3 |30203 |indexserver  |        3 |      3 |DC3       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
         |        True |

status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 3
site name: DC3
Status 15

반환 코드 15는 모든 것이 정상이지만 clusternode1이 누락되었음을 나타냅니다. 수동으로 다시 등록해야 합니다. 이전 기본 clusternode1이 나열되지 않으므로 복제 관계가 손실됩니다.

  • 유지 관리 모드를 설정합니다.

명령을 사용하여 클러스터의 한 노드에 있는 클러스터에서 maintenance-mode 를 설정하기 전에 아직 수행하지 않은 경우:

[root@clusternode1]# pcs property  set maintenance-mode=true

다음 명령을 실행하여 maintenance-mode 가 활성화되어 있는지 확인할 수 있습니다.

[root@clusternode1]# pcs resource
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode2 (unmanaged)
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode1 (unmanaged)
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Slave clusternode2 (unmanaged)
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Master clusternode1 (unmanaged)
  * vip_RH2_02_MASTER   (ocf::heartbeat:IPaddr2):        Started clusternode1 (unmanaged)

관리되지 않는 리소스가 표시되고 있습니다. 이는 클러스터가 maintenance-mode=true 임을 나타냅니다. 가상 IP 주소는 clusternode1에서 계속 시작됩니다. 다른 노드에서 이 IP를 사용하려면 maintanence-mode=true 를 설정하기 전에 vip_RH2_02_MASTER를 비활성화하십시오.

[root@clusternode1]# pcs resource disable vip_RH2_02_MASTER
  • clusternode1에서 sr_state를 확인할 때 DC2와의 관계만 표시됩니다.

    clusternode1:rh2adm> hdbnsutil -sr_state
    
    System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~
    
    online: true
    
    mode: primary
    operation mode: primary
    site id: 1
    site name: DC1
    
    is source system: true
    is secondary/consumer system: false
    has secondaries/consumers attached: true
    is a takeover active: false
    is primary suspended: false
    
    Host Mappings:
    ~~~~~~~~~~~~~~
    
    clusternode1 -> [DC2] clusternode2
    clusternode1 -> [DC1] clusternode1
    
    
    Site Mappings:
    ~~~~~~~~~~~~~~
    DC1 (primary/primary)
        |---DC2 (syncmem/logreplay)
    
    Tier of DC1: 1
    Tier of DC2: 2
    
    Replication mode of DC1: primary
    Replication mode of DC2: syncmem
    
    Operation mode of DC1: primary
    Operation mode of DC2: logreplay
    
    Mapping: DC1 -> DC2
    done.

    그러나 DC2를 확인할 때 기본 데이터베이스 서버는 DC3입니다. 따라서 DC1의 정보가 정확하지 않습니다.

    clusternode2:rh2adm> hdbnsutil -sr_state

    DC1에서 시스템 복제 상태를 확인하면 반환 코드는 12이며 알 수 없습니다. 따라서 DC1을 다시 등록해야 합니다.

이 명령을 사용하여 이전 기본 clusternode1을 remotehost3의 새 보조로 등록할 수 있습니다.

clusternode1:rh2adm> hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=${TINSTANCE} --replicationMode=async --name=DC1 --remoteName=DC3 --operationMode=logreplay --online

등록이 완료되면 remotehost3에서 복제된 세 개의 사이트 모두 표시되고 상태(반복 코드)가 15로 변경됩니다. 이 오류가 발생하면 DC1 및 DC3에서 복제 관계를 수동으로 제거해야 합니다. Register Secondary 에 설명된 지침을 따르십시오. 예를 들어 다음과 같은 기존 관계가 나열됩니다.

hdbnsutil -sr_state

사용할 수 있는 기존 관계를 제거하는 예:

clusternode1:rh2adm> hdbnsutil -sr_unregister --name=DC2

이는 일반적으로 필요하지 않을 수 있습니다.

테스트 4는 테스트 3 후에 수행됩니다. 따라서 복구 단계는 테스트 4를 실행하는 것입니다.

5.6. 테스트 4: 기본 노드를 첫 번째 사이트로 장애 조치

테스트 제목

기본 전환은 클러스터 노드로 돌아갑니다.

장애 조치(Failback) 및 클러스터를 다시 활성화합니다.

세 번째 사이트를 보조로 다시 등록합니다.

테스트 사전 조건

  • SAP HANA 기본 노드는 세 번째 사이트에서 실행되고 있습니다.
  • 클러스터가 부분적으로 실행되고 있습니다.
  • 클러스터는 유지 관리 모드로 전환됩니다.
  • 이전 클러스터 기본은 액세스할 수 있습니다.

테스트 단계

클러스터의 예상 기본 사항을 확인합니다.

DC3 노드에서 DC1 노드로의 페일오버.

이전 보조가 새 기본 설정으로 전환되었는지 확인합니다.

remotehost3을 새 보조 서버로 다시 등록합니다.

클러스터 maintenance-mode=false 를 설정하고 클러스터가 계속 작동합니다.

테스트 모니터링

새 기본 시작에서 다음을 수행합니다.

remotehost3:rh2adm> watch python $DIR_EXECU Cryostat/python_support/systemReplicationStatus.py [root@clusternode1]# watch pcs status --full on the secondary start: clusternode:rh2adm> watch hdbnsutil -sr_state

테스트 시작

클러스터의 예상 기본 사항 확인: [root@clusternode1]# pcs resource

VIP 및 승격된 SAP HANA 리소스는 잠재적인 새로운 기본 노드인 동일한 노드에서 실행해야 합니다.

이 잠재적인 기본 실행에서 clusternode1:rh2adm> hdbnsutil -sr_takeover

이전 기본 사항을 새 보조로 다시 등록합니다.

clusternode1:rh2adm> hdbnsutil -sr_register \ --remoteHost=clusternode1 \ --remoteInstance=${TINSTANCE} \ --replicationMode=syncmem \ --name=DC3 \ --remoteName=DC1 \ --operationMode=logreplay \ --force_full_replica \ --online

maintenance-mode=false 를 설정한 후 클러스터는 계속 작동합니다.

예상 결과

새로운 기본은 SAP HANA를 시작하는 것입니다.

복제 상태는 복제된 모든 3개의 사이트를 표시합니다.

두 번째 클러스터 사이트는 자동으로 새 기본 항목에 다시 등록됩니다.

Disaster Recovery (DR) 사이트에서는 데이터베이스의 추가 복제본이 됩니다.

초기 상태로 돌아가는 방법

테스트 3을 실행합니다.

자세한 설명

  • 클러스터가 maintenance-mode 로 설정되어 있는지 확인합니다.

    [root@clusternode1]# pcs property config maintenance-mode
    Cluster Properties:
     maintenance-mode: true

    maintenance-mode 가 true가 아닌 경우 다음을 사용하여 설정할 수 있습니다.

    [root@clusternode1]# pcs property set  maintenance-mode=true
  • 시스템 복제 상태를 확인하고 모든 노드에서 기본 데이터베이스를 검색합니다. 먼저 다음을 사용하여 주 데이터베이스를 검색합니다.

    clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"

출력은 다음과 같아야 합니다.

clusternode1에서 다음을 수행합니다.

clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
mode: syncmem
primary masters: remotehost3

clusternode2에서 다음을 수행합니다.

clusternode2:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
mode: syncmem
primary masters: remotehost3

remotehost3에서 다음을 수행합니다.

remotehost3:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
mode: primary

세 개의 노드 모두에서 기본 데이터베이스는 remotehost3입니다. 이 기본 데이터베이스에서는 세 개의 노드 모두에 대해 시스템 복제 상태가 활성이고 반환 코드는 15여야 합니다.

remotehost3:rh2adm> python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py
|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
|SYSTEMDB |remotehost3 |30201 |nameserver   |        1 |      3 |DC3       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |remotehost3 |30207 |xsengine     |        2 |      3 |DC3       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |remotehost3 |30203 |indexserver  |        3 |      3 |DC3       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|SYSTEMDB |remotehost3 |30201 |nameserver   |        1 |      3 |DC3       |clusternode1    |    30201 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |remotehost3 |30207 |xsengine     |        2 |      3 |DC3       |clusternode1    |    30207 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |remotehost3 |30203 |indexserver  |        3 |      3 |DC3       |clusternode1    |    30203 |        1 |DC1       |YES           |SYNCMEM     |ACTIVE      |               |        True |

status system replication site "2": ACTIVE
status system replication site "1": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 3
site name: DC3
[rh2adm@remotehost3: python_support]# echo $?
15
  • 세 가지 sr_states 가 모두 일관되게 일치하는지 확인합니다.

세 개의 노드 hdbnsutil -sr_state --sapcontrol=1 |grep site.*Mode:

clusternode1:rh2adm>hdbnsutil -sr_state --sapcontrol=1 |grep  site.*Mode
clusternode2:rh2adm>hsbnsutil -sr_state --sapcontrol=1 | grep site.*Mode
remotehost3:rh2adm>hsbnsutil -sr_state --sapcontrol=1 | grep site.*Mode

출력은 모든 노드에서 동일해야 합니다.

siteReplicationMode/DC1=primary
siteReplicationMode/DC3=async
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC3=logreplay
siteOperationMode/DC2=logreplay
  • 별도의 창에서 모니터링을 시작합니다.

clusternode1 시작 시 다음을 실행합니다.

clusternode1:rh2adm> watch "python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py; echo \$?"

remotehost3에서 다음을 시작합니다.

remotehost3:rh2adm> watch "python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py; echo \$?"

clusternode2 start에서 다음을 시작합니다.

clusternode2:rh2adm> watch "hdbnsutil -sr_state --sapcontrol=1 |grep  siteReplicationMode"
  • 테스트 시작

clusternode1로 장애 조치하려면 clusternode1에서 시작합니다.

clusternode1:rh2adm> hdbnsutil -sr_takeover
done.
  • 모니터의 출력을 확인합니다.

clusternode1의 모니터가 다음과 같이 변경됩니다.

Every 2.0s: python systemReplicationStatus.py; echo $?                                                                                                                                                            clusternode1: Mon Sep  4 23:34:30 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |

status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1
15

반환 코드 15도 중요합니다. clusternode2의 모니터가 다음과 같이 변경됩니다.

Every 2.0s: hdbnsutil -sr_state --sapcontrol=1 |grep  site.*Mode                                                                clusternode2: Mon Sep  4 23:35:18 2023

siteReplicationMode/DC1=primary
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC2=logreplay

DC3는 사라졌으며 다시 등록해야 합니다. remotehost3에서 systemReplicationStatus는 오류를 보고하고 반환 코드가 11로 변경되었습니다.

  • 클러스터 노드가 다시 등록되는지 확인합니다.

    clusternode1:rh2adm>  hdbnsutil -sr_state
    
    System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~
    
    online: true
    
    mode: primary
    operation mode: primary
    site id: 1
    site name: DC1
    
    is source system: true
    is secondary/consumer system: false
    has secondaries/consumers attached: true
    is a takeover active: false
    is primary suspended: false
    
    Host Mappings:
    ~~~~~~~~~~~~~~
    
    clusternode1 -> [DC2] clusternode2
    clusternode1 -> [DC1] clusternode1
    
    
    Site Mappings:
    ~~~~~~~~~~~~~~
    DC1 (primary/primary)
        |---DC2 (syncmem/logreplay)
    
    Tier of DC1: 1
    Tier of DC2: 2
    
    Replication mode of DC1: primary
    Replication mode of DC2: syncmem
    
    Operation mode of DC1: primary
    Operation mode of DC2: logreplay
    
    Mapping: DC1 -> DC2
    done.

    사이트 매핑 쇼, clusternode2 (DC2)가 다시 등록되었습니다.

  • vip 리소스를 확인하거나 활성화합니다.

    [root@clusternode1]# pcs resource
      * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
        * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode2 (unmanaged)
        * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode1
       (unmanaged)
      * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
        * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Master clusternode2 (unmanaged)
        * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Slave clusternode1
       (unmanaged)
      * vip_RH2_02_MASTER   (ocf::heartbeat:IPaddr2):        Stopped (disabled, unmanaged)

    vip_RH2_02_MASTER 가 중지되었습니다. 다시 시작하려면 다음을 실행합니다.

[root@clusternode1]# pcs resource enable vip_RH2_02_MASTER
Warning: 'vip_RH2_02_MASTER' is unmanaged

maintenance-mode=false 를 제외하고 클러스터가 리소스를 시작하지 않기 때문에 경고가 적합합니다.

  • 클러스터 유지 관리 모드를 중지합니다.

유지 관리 모드를 중지하기 전에 별도의 창에서 두 개의 모니터를 시작하여 변경 사항을 확인해야 합니다. clusternode2에서 다음을 실행합니다.

[root@clusternode2]# watch pcs status --full

clusternode1에서 다음을 실행합니다.

clusternode1:rh2adm> watch "python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py; echo $?"

이제 다음을 실행하여 clusternode1에서 maintenance-mode 를 설정할 수 있습니다.

[root@clusternode1]# pcs property set maintenance-mode=false

clusternode2의 모니터에 모든 것이 예상대로 실행 중임을 표시해야 합니다.

Every 2.0s: pcs status --full                                                                                                                                                                                     clusternode1: Tue Sep  5 00:01:17 2023

Cluster name: cluster1
Cluster Summary:
  * Stack: corosync
  * Current DC: clusternode1
 (1) (version 2.1.2-4.el8_6.6-ada5c3b36e2) - partition with quorum
  * Last updated: Tue Sep  5 00:01:17 2023
  * Last change:  Tue Sep  5 00:00:30 2023 by root via crm_attribute on clusternode1

  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ clusternode1
 (1) clusternode2 (2) ]

Full List of Resources:
  * auto_rhevm_fence1   (stonith:fence_rhevm):   Started clusternode1

  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode2
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode1

  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Slave clusternode2
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Master clusternode1

  * vip_RH2_02_MASTER   (ocf::heartbeat:IPaddr2):        Started clusternode1


Node Attributes:
  * Node: clusternode1
 (1):
    * hana_rh2_clone_state              : PROMOTED
    * hana_rh2_op_mode                  : logreplay
    * hana_rh2_remoteHost               : clusternode2
    * hana_rh2_roles                    : 4:P:master1:master:worker:master
    * hana_rh2_site                     : DC1
    * hana_rh2_sra                      : -
    * hana_rh2_srah                     : -
    * hana_rh2_srmode                   : syncmem
    * hana_rh2_sync_state               : PRIM
    * hana_rh2_version                  : 2.00.062.00
    * hana_rh2_vhost                    : clusternode1

    * lpa_rh2_lpt                       : 1693872030
    * master-SAPHana_RH2_02             : 150
  * Node: clusternode2 (2):
    * hana_rh2_clone_state              : DEMOTED
    * hana_rh2_op_mode                  : logreplay
    * hana_rh2_remoteHost               : clusternode1

    * hana_rh2_roles                    : 4:S:master1:master:worker:master
    * hana_rh2_site                     : DC2
    * hana_rh2_sra                      : -
    * hana_rh2_srah                     : -
    * hana_rh2_srmode                   : syncmem
    * hana_rh2_sync_state               : SOK
    * hana_rh2_version                  : 2.00.062.00
    * hana_rh2_vhost                    : clusternode2
    * lpa_rh2_lpt                       : 30
    * master-SAPHana_RH2_02             : 100

Migration Summary:

Tickets:

PCSD Status:
  clusternode1
: Online
  clusternode2: Online

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

수동 상호 작용 후 ClusterCleanup에 설명된 대로 클러스터를 정리하는 것이 좋습니다.

  • remotehost3을 clusternode1의 새 기본 버전으로 다시 등록합니다.

Remotehost3을 다시 등록해야 합니다. 진행 상황을 모니터링하려면 clusternode1에서 시작하십시오.

clusternode1:rh2adm> watch -n 5 'python
/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'

remotehost3에서 다음을 시작하십시오.

remotehost3:rh2adm> watch 'hdbnsutil -sr_state --sapcontrol=1 |grep  siteReplicationMode'

이제 다음 명령을 사용하여 remotehost3을 다시 등록할 수 있습니다.

remotehost3:rh2adm> hdbnsutil -sr_register --remoteHost=clusternode1 --remoteInstance=${TINSTANCE} --replicationMode=async --name=DC3 --remoteName=DC1 --operationMode=logreplay --online

clusternode1의 모니터가 다음과 같이 변경됩니다.

Every 5.0s: python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?                                                                                         clusternode1: Tue Sep  5 00:14:40 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
|         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |remotehost3    |    30201 |        3 |DC3       |YES           |ASYNC     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |remotehost3    |    30207 |        3 |DC3       |YES           |ASYNC     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |remotehost3    |    30203 |        3 |DC3       |YES           |ASYNC     |ACTIVE      |               |        True |
|SYSTEMDB |clusternode1 |30201 |nameserver   |        1 |      1 |DC1       |clusternode2    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30207 |xsengine     |        2 |      1 |DC1       |clusternode2    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
|RH2      |clusternode1 |30203 |indexserver  |        3 |      1 |DC1       |clusternode2    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |

status system replication site "3": ACTIVE
status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1
Status 15

remotehost3의 모니터가 다음과 같이 변경됩니다.

Every 2.0s: hdbnsutil -sr_state --sapcontrol=1 |grep  site.*Mode                                                                remotehost3: Tue Sep  5 02:15:28 2023

siteReplicationMode/DC1=primary
siteReplicationMode/DC3=syncmem
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC3=logreplay
siteOperationMode/DC2=logreplay

이제 3개의 항목이 다시 있고 remotehost3(DC3)이 clusternode1(DC1)에서 복제된 보조 사이트입니다.

  • 모든 노드가 clusternode1의 시스템 복제 상태에 있는지 확인합니다.

세 개의 노드 hdbnsutil -sr_state --sapcontrol=1 |grep site.*Mode:

clusternode1:rh2adm> hdbnsutil -sr_state --sapcontrol=1 |grep  site.*ModesiteReplicationMode
clusternode2:rh2adm> hsbnsutil -sr_state --sapcontrol=1 | grep site.*Mode
remotehost3:rh2adm> hsbnsutil -sr_state --sapcontrol=1 | grep site.*Mode

모든 노드에서 동일한 출력을 얻을 수 있어야 합니다.

siteReplicationMode/DC1=primary
siteReplicationMode/DC3=syncmem
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC3=logreplay
siteOperationMode/DC2=logreplay
  • pcs status --fullSOK 를 확인합니다. 다음을 실행합니다.
[root@clusternode1]# pcs status --full| grep sync_state

출력은 PRIM 또는 SOK 여야 합니다.

 * hana_rh2_sync_state             	: PRIM
    * hana_rh2_sync_state             	: SOK

마지막으로, sync_state PRIMSOK 를 포함하여 클러스터 상태가 다음과 같아야 합니다.

[root@clusternode1]# pcs status --full
Cluster name: cluster1
Cluster Summary:
  * Stack: corosync
  * Current DC: clusternode1
 (1) (version 2.1.2-4.el8_6.6-ada5c3b36e2) - partition with quorum
  * Last updated: Tue Sep  5 00:18:52 2023
  * Last change:  Tue Sep  5 00:16:54 2023 by root via crm_attribute on clusternode1

  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ clusternode1
 (1) clusternode2 (2) ]

Full List of Resources:
  * auto_rhevm_fence1   (stonith:fence_rhevm):   Started clusternode1

  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode2
    * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started clusternode1

  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Slave clusternode2
    * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Master clusternode1

  * vip_RH2_02_MASTER   (ocf::heartbeat:IPaddr2):        Started clusternode1


Node Attributes:
  * Node: clusternode1
 (1):
    * hana_rh2_clone_state              : PROMOTED
    * hana_rh2_op_mode                  : logreplay
    * hana_rh2_remoteHost               : clusternode2
    * hana_rh2_roles                    : 4:P:master1:master:worker:master
    * hana_rh2_site                     : DC1
    * hana_rh2_sra                      : -
    * hana_rh2_srah                     : -
    * hana_rh2_srmode                   : syncmem
    * hana_rh2_sync_state               : PRIM
    * hana_rh2_version                  : 2.00.062.00
    * hana_rh2_vhost                    : clusternode1

    * lpa_rh2_lpt                       : 1693873014
    * master-SAPHana_RH2_02             : 150
  * Node: clusternode2 (2):
    * hana_rh2_clone_state              : DEMOTED
    * hana_rh2_op_mode                  : logreplay
    * hana_rh2_remoteHost               : clusternode1

    * hana_rh2_roles                    : 4:S:master1:master:worker:master
    * hana_rh2_site                     : DC2
    * hana_rh2_sra                      : -
    * hana_rh2_srah                     : -
    * hana_rh2_srmode                   : syncmem
    * hana_rh2_sync_state               : SOK
    * hana_rh2_version                  : 2.00.062.00
    * hana_rh2_vhost                    : clusternode2
    * lpa_rh2_lpt                       : 30
    * master-SAPHana_RH2_02             : 100

Migration Summary:

Tickets:

PCSD Status:
  clusternode1
: Online
  clusternode2: Online

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

클러스터 상태 확인데이터베이스 확인 을 참조하여 모든 작업이 제대로 작동하는지 확인합니다.

6장. 유용한 명령

다음은 유용한 명령의 세 가지 섹션입니다. 대부분의 경우 작업 또는 구성을 확인하는 데 도움이 됩니다. 예제는 응답과 함께 나열됩니다. 형식 지정 이유로 출력이 조정되는 경우도 있습니다.

참고
  • < sid>adm 사용자가 실행할 때 이 문서에 나열된 모든 명령은 > 로 시작합니다.
  • root 사용자가 실행하는 모든 명령은 # 로 시작합니다.
  • 명령을 실행하려면 접두사 > 또는 # 을 생략합니다.

6.1. SAP HANA 명령

SAP HANA 명령은 < sid>adm 사용자가 실행합니다. 예제:

[root@clusternode1]# su - rh2adm
clusternode1:rh2adm> cdpy
clusternode1:rh2adm> pwd
/usr/sap/RH2/HDB02/exe/python_support
clusternode1:rh2adm> python systemReplicationStatus.py -h
systemReplicationStatus.py [-h|--help] [-a|--all] [-l|--localhost] [-m|--multiTaget] [-s|--site=<site name>] [-t|--printLandscapeTree] [--omitSecondaryActiveStatus] [--sapcontrol=1]
clusternode1:rh2adm> python landscapeHostConfiguration.py -h
landscapeHostConfiguration.py [-h|--help] [--localhost] [--sapcontrol=1]
clusternode1:rh2adm> hdbnsutil # run hdbnsutil without parameters to get help

6.1.1. hdbclm을 사용한 SAP HANA 설치

세 번째 사이트의 설치는 두 번째 사이트의 설치와 유사합니다. root 사용자로 hdblcm 를 사용하여 설치를 수행할 수 있습니다. 이전에 아무것도 설치하지 않았는지 확인하려면 hdbuninst 를 실행하여 SAP HANA가 이 노드에 설치되어 있지 않은지 확인합니다.

HANA 제거의 출력 예:

[root@remotehost3]# cd /software/DATA_UNITS/HDB_SERVER_LINUX_X86_64
root@DC3/software/DATA_UNITS/HDB_SERVER_LINUX_X86_64# ./hdbuninst
Option 0 will remove an already existing HANA Installation
No SAP HANA Installation found is the expected answer

DC3에 HANA 설치 출력 예:

----[root@remotehost3]# cd /software/DATA_UNITS/HDB_SERVER_LINUX_X86_64
# ./hdbuninst
Option 0 will remove an already existing HANA Installation
No SAP HANA Installation found is the expected answer
----
Example output of HANA installation:
[source,text]
----
[root@remotehost3]# ./hdblcm
1 install
2 server
/hana/shared is default directory
Enter Local Hostname [remotehost3]: use the default name
additional hosts only during Scale-Out Installation y default is n
ENTER SAP HANA System ID: RH2
Enter Instance Number [02]:
Enter Local Host Worker Group [default]:
Select System Usage / Enter Index [4]:
Choose encryption
Enter Location of Data Volumes [/hana/data/RH2]:
Enter Location of Log Volumes [/hana/log/RH2]:
Restrict maximum memory allocation? [n]:
Enter Certificate Host Name
Enter System Administrator (rh2adm) Password: <Y0urPasswd>
Confirm System Administrator (rh2adm) Password: <Y0urPasswd>
Enter System Administrator Home Directory [/usr/sap/RH2/home]:
Enter System Administrator Login Shell [/bin/sh]:
Enter System Administrator User ID [1000]:
Enter System Database User (SYSTEM) Password: <Y0urPasswd>
Confirm System Database User (SYSTEM) Password: <Y0urPasswd>
Restart system after machine reboot? [n]:
----

설치가 시작되기 전에 요약이 나열됩니다.

SAP HANA Database System Installation
   Installation Parameters
      Remote Execution: ssh
      Database Isolation: low
      Install Execution Mode: standard
      Installation Path: /hana/shared
      Local Host Name: dc3host
      SAP HANA System ID: RH2
      Instance Number: 02
      Local Host Worker Group: default
      System Usage: custom
      Location of Data Volumes: /hana/data/RH2
      Location of Log Volumes: /hana/log/RH2
      SAP HANA Database secure store: ssfs
      Certificate Host Names: remotehost3 -> remotehost3      System Administrator Home Directory: /usr/sap/RH2/home
      System Administrator Login Shell: /bin/sh
      System Administrator User ID: 1000
      ID of User Group (sapsys): 1010
   Software Components
      SAP HANA Database
         Install version 2.00.052.00.1599235305
         Location: /software/DATA_UNITS/HDB_SERVER_LINUX_X86_64/server
      SAP HANA Local Secure Store
         Do not install
      SAP HANA AFL (incl.PAL,BFL,OFL)
         Do not install
      SAP HANA EML AFL
         Do not install
      SAP HANA EPM-MDS
         Do not install
      SAP HANA Database Client
         Do not install
      SAP HANA Studio
         Do not install
      SAP HANA Smart Data Access
         Do not install
      SAP HANA XS Advanced Runtime
         Do not install
   Log File Locations
      Log directory: /var/tmp/hdb_RH2_hdblcm_install_2021-06-09_18.48.13
      Trace location: /var/tmp/hdblcm_2021-06-09_18.48.13_31307.trc

Do you want to continue? (y/n):

설치를 시작하려면 y를 입력합니다.

6.1.2. hdbsql 을 사용하여 Inifile 콘텐츠 확인

clusternode1:rh2adm> hdbsql -i ${TINSTANCE} -u system -p Y0urP8ssw0rd

Welcome to the SAP HANA Database interactive terminal.

Type:  \h for help with commands
       \q to quit

hdbsql RH2=> select * from M_INIFILE_CONTENTS where section='system_replication'
FILE_NAME,LAYER_NAME,TENANT_NAME,HOST,SECTION,KEY,VALUE
"global.ini","DEFAULT","","","system_replication","actual_mode","primary"
"global.ini","DEFAULT","","","system_replication","mode","primary"
"global.ini","DEFAULT","","","system_replication","operation_mode","logreplay"
"global.ini","DEFAULT","","","system_replication","register_secondaries_on_takeover
","true"
"global.ini","DEFAULT","","","system_replication","site_id","1"
"global.ini","DEFAULT","","","system_replication","site_name","DC2"
"global.ini","DEFAULT","","","system_replication","timetravel_logreplay_mode","auto
"
"global.ini","DEFAULT","","","system_replication","alternative_sources",""
"global.ini","DEFAULT","","","system_replication","datashipping_logsize_threshold",
"5368709120"
"global.ini","DEFAULT","","","system_replication","datashipping_min_time_interval",
"600"
"global.ini","DEFAULT","","","system_replication","datashipping_parallel_channels",
"4"
"global.ini","DEFAULT","","","system_replication","datashipping_parallel_processing
","true"
"global.ini","DEFAULT","","","system_replication","datashipping_snapshot_max_retent
ion_time","300"
"global.ini","DEFAULT","","","system_replication","enable_data_compression","false"
"global.ini","DEFAULT","","","system_replication","enable_full_sync","false"
"global.ini","DEFAULT","","","system_replication","enable_log_compression","false"
"global.ini","DEFAULT","","","system_replication","enable_log_retention","auto"
"global.ini","DEFAULT","","","system_replication","full_replica_on_failed_delta_syn
c_check","false"
"global.ini","DEFAULT","","","system_replication","hint_based_routing_site_name",""
"global.ini","DEFAULT","","","system_replication","keep_old_style_alert","false"
"global.ini","DEFAULT","","","system_replication","logshipping_async_buffer_size","
67108864"
"global.ini","DEFAULT","","","system_replication","logshipping_async_wait_on_buffer
_full","true"
"global.ini","DEFAULT","","","system_replication","logshipping_max_retention_size",
"1048576"
"global.ini","DEFAULT","","","system_replication","logshipping_replay_logbuffer_cac
he_size","1073741824"
"global.ini","DEFAULT","","","system_replication","logshipping_replay_push_persiste
nt_segment_count","5"
"global.ini","DEFAULT","","","system_replication","logshipping_snapshot_logsize_thr
eshold","3221225472"
"global.ini","DEFAULT","","","system_replication","logshipping_snapshot_min_time_in
terval","900"
"global.ini","DEFAULT","","","system_replication","logshipping_timeout","30"
"global.ini","DEFAULT","","","system_replication","preload_column_tables","true"
"global.ini","DEFAULT","","","system_replication","propagate_log_retention","off"
"global.ini","DEFAULT","","","system_replication","reconnect_time_interval","30"
"global.ini","DEFAULT","","","system_replication","retries_before_register_to_alter
native_source","20"
"global.ini","DEFAULT","","","system_replication","takeover_esserver_without_log_ba
ckup","false"
"global.ini","DEFAULT","","","system_replication","takeover_wait_until_esserver_res
tart","true"
"global.ini","DEFAULT","","","system_replication","timetravel_call_takeover_hooks",
"off"
"global.ini","DEFAULT","","","system_replication","timetravel_log_retention_policy"
,"none"
"global.ini","DEFAULT","","","system_replication","timetravel_max_retention_time","
0"
"global.ini","DEFAULT","","","system_replication","timetravel_snapshot_creation_int
erval","1440"
"indexserver.ini","DEFAULT","","","system_replication","logshipping_async_buffer_si
ze","268435456"
"indexserver.ini","DEFAULT","","","system_replication","logshipping_replay_logbuffe
r_cache_size","4294967296"
"indexserver.ini","DEFAULT","","","system_replication","logshipping_replay_push_per
sistent_segment_count","20"
41 rows selected (overall time 1971.958 msec; server time 31.359 msec)

6.1.3. 데이터베이스 확인

데이터베이스가 실행 중인지 확인하고 현재 기본 노드를 검색합니다.

데이터베이스 인스턴스 나열

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function
GetSystemInstanceList

23.06.2023 12:08:17
GetSystemInstanceList
OK
hostname, instanceNr, httpPort, httpsPort, startPriority, features, dispstatus
node1, 2, 50213, 50214, 0.3, HDB|HDB_WORKER, GREEN

출력이 녹색이면 인스턴스가 실행 중입니다.

데이터베이스 프로세스 나열

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function GetProcessList
GetProcessList
OK
name, description, dispstatus, textstatus, starttime, elapsedtime, pid
hdbdaemon, HDB Daemon, GREEN, Running, 2023 09 04 14:34:01, 18:41:33, 3788067
hdbcompileserver, HDB Compileserver, GREEN, Running, 2023 09 04 22:35:40, 10:39:54, 445299
hdbindexserver, HDB Indexserver-RH2, GREEN, Running, 2023 09 04 22:35:40, 10:39:54, 445391
hdbnameserver, HDB Nameserver, GREEN, Running, 2023 09 04 22:35:34, 10:40:00, 445178
hdbpreprocessor, HDB Preprocessor, GREEN, Running, 2023 09 04 22:35:40, 10:39:54, 445306
hdbwebdispatcher, HDB Web Dispatcher, GREEN, Running, 2023 09 04 22:35:53, 10:39:41, 445955
hdbxsengine, HDB XSEngine-RH2, GREEN, Running, 2023 09 04 22:35:40, 10:39:54, 445394

일반적으로 모든 데이터베이스 프로세스의 상태는 GREEN 입니다.

SAP HANA 프로세스 나열

clusternode1:rh2adm> HDB info
USER          PID     PPID  %CPU        VSZ        RSS COMMAND
rh2adm       1560     1559   0.0       6420       3136 watch -n 5 sapcontrol -nr 02 -functi
rh2adm       1316     1315   0.0       8884       5676 -sh
rh2adm       2549     1316   0.0       7516       4072  \_ /bin/sh /usr/sap/RH2/HDB02/HDB i
rh2adm       2579     2549   0.0      10144       3576      \_ ps fx -U rh2adm -o user:8,pi
rh2adm       2388        1   0.0     679536      55520 hdbrsutil  --start --port 30203 --vo
rh2adm       1921        1   0.0     679196      55312 hdbrsutil  --start --port 30201 --vo
rh2adm       1469        1   0.0       8852       3260 sapstart pf=/usr/sap/RH2/SYS/profile
rh2adm       1476     1469   0.7     438316      86288  \_ /usr/sap/RH2/HDB02/remotehost3/trace/
rh2adm       1501     1476  11.7    9690172    1574796      \_ hdbnameserver
rh2adm       1845     1476   0.8     410696     122988      \_ hdbcompileserver
rh2adm       1848     1476   1.0     659464     154072      \_ hdbpreprocessor
rh2adm       1899     1476  14.7    9848276    1765208      \_ hdbindexserver -port 30203
rh2adm       1902     1476   8.4    5023288    1052768      \_ hdbxsengine -port 30207
rh2adm       2265     1476   5.2    2340284     405016      \_ hdbwebdispatcher
rh2adm       1117        1   1.1     543532      30676 /usr/sap/RH2/HDB02/exe/sapstartsrv p
rh2adm       1029        1   0.0      20324      11572 /usr/lib/systemd/systemd --user
rh2adm       1030     1029   0.0      23256       3536  \_ (sd-pam)

SAP HANA 환경 구성 표시

clusternode1:rh2adm>
/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/Python/bin/python
/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/landscapeHostConfiguration.py;echo $?
| Host   | Host   | Host   | Failover | Remove | Storage   | Storage   | Failover | Failover | NameServer | NameServer | IndexServer | IndexServer | Host   | Host   | Worker  | Worker  |
|        | Active | Status | Status   | Status | Config    | Actual    | Config   | Actual   | Config     | Actual     | Config      | Actual      | Config | Actual | Config  | Actual  |
|        |        |        |          |        | Partition | Partition | Group    | Group    | Role       | Role       | Role        | Role        | Roles  | Roles  | Groups  | Groups  |
| ------ | ------ | ------ | -------- | ------ | --------- | --------- | -------- | -------- | ---------- | ---------- | ----------- | ----------- | ------ | ------ | ------- | ------- |
| clusternode1 | yes    | ok     |          |        |         1 |         1 | default  | default  | master 1   | master     | worker      | master      | worker | worker | default | default |

overall host status: ok
4

반환 코드:

  • 0: fatal
  • 1: 오류
  • 2: 경고
  • 3 : 정보
  • 4: OK

기본 데이터베이스 검색

clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "primary masters|^mode"

보조 서버에서 확인의 예:

clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "primary masters|^mode"
mode: syncmem
primary masters: clusternode1

현재 주에서 검사의 예:

clusternode1:rh2adm> hdbnsutil -sr_state | egrep -e "primary masters|^mode"
mode: primary

clusternode1:rh2adm>hdbnsutil -sr_state --sapcontrol=1 |grep  site.*Mode
siteReplicationMode/DC1=primary
siteReplicationMode/DC3=async
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC3=logreplay
siteOperationMode/DC2=logreplay

데이터베이스 버전 표시

SQL 쿼리 사용 예:

hdbsql RH2=> select * from m_database
SYSTEM_ID,DATABASE_NAME,HOST,START_TIME,VERSION,USAGE
"RH2","RH2","node1","2023-06-22 15:33:05.235000000","2.00.059.02.1647435895","CUSTOM"
1 row selected (overall time 29.107 msec; server time 927 usec)

systemOverview.py 사용 예:

clusternode1:rh2adm> python ./systemOverview.py
| Section    | Name            | Status  | Value                                               |
| ---------- | --------------- | ------- | --------------------------------------------------- |
| System     | Instance ID     |         | RH2                                                 |
| System     | Instance Number |         | 02                                                  |
| System     | Distributed     |         | No                                                  |
| System     | Version         |         | 2.00.059.02.1647435895 (fa/hana2sp05)               |
| System     | Platform        |         | Red Hat Enterprise Linux 9.2 Beta (Plow) 9.2 (Plow) |
| Services   | All Started     | OK      | Yes                                                 |
| Services   | Min Start Time  |         | 2023-07-14 16:31:19.000                             |
| Services   | Max Start Time  |         | 2023-07-26 11:23:17.324                             |
| Memory     | Memory          | OK      | Physical 31.09 GB, Swap 10.00 GB, Used 26.38        |
| CPU        | CPU             | OK      | Available 4, Used 1.04                              |
| Disk       | Data            | OK      | Size 89.0 GB, Used 59.3 GB, Free 33 %               |
| Disk       | Log             | OK      | Size 89.0 GB, Used 59.3 GB, Free 33 %               |
| Disk       | Trace           | OK      | Size 89.0 GB, Used 59.3 GB, Free 33 %               |
| Statistics | Alerts          | WARNING | cannot check statistics w/o SQL connection          |

6.1.4. SAP HANA 시작 및 중지

옵션 1:HDB 명령

clusternode1:rh2adm> HDB help
Usage: /usr/sap/RH2/HDB02/HDB { start|stop|reconf|restart|version|info|proc|admin|kill|kill-<sig>|term }
  kill or kill-9 should never be used in a productive environment!
  • 데이터베이스 시작

    clusternode1:rh2adm> HDB start
  • 데이터베이스를 중지

    clusternode1:rh2adm> HDB stop

옵션 2 (권장): sapcontrol사용

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function StartSystem HDB

03.07.2023 14:08:30
StartSystem
OK
clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function StopSystem HDB

03.07.2023 14:09:33
StopSystem
OK

GetProcessList 를 사용하여 HANA 서비스의 시작 및 중지를 모니터링합니다.

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function GetProcessList

6.1.5. SAP HANA 시스템 복제 상태 확인

SAP HANA 시스템 복제 상태를 확인하는 방법은 여러 가지가 있습니다.

  • 'clusternode1:rh2adm> python systemReplicationStatus.py ' 기본 노드의
  • clusternode1:rh2adm> echo $? # (systemReplicationStatus의 코드 반환)
  • clusternode1:rh2adm> hdbnsutil -sr_state
  • clusternode1:rh2adm> hdbnsutil -sr_stateConfiguration

모니터로 실행되는 systemReplicationStatus.py 출력의 예:

clusternode1:rh2adm> watch -n 5 "python
/usr/sap/${SAPSYSTEMNAME}/HDB{TINSTACE}/exe/python_support/systemReplicationStatus.py;echo \$?"
 concurrent-fencing: true
Every 5.0s: python systemReplicationStatus.py;echo $?                                                                                                                              hana08: Fri Jul 28 17:01:05 2023

|Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |
|         |	  |	 |             |          |        |          |Host	 |Port      |Site ID   |Site Name |Active Status |Mode        |Status	   |Status Details |
|-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |
|SYSTEMDB |hana08 |30201 |nameserver   |        1 |	 1 |DC2       |hana09    |    30201 |        3 |DC3	  |YES           |SYNCMEM     |ACTIVE	   |               |
|RH2	  |hana08 |30207 |xsengine     |        2 |	 1 |DC2       |hana09    |    30207 |        3 |DC3	  |YES           |SYNCMEM     |ACTIVE	   |               |
|RH2	  |hana08 |30203 |indexserver  |        3 |	 1 |DC2       |hana09    |    30203 |        3 |DC3	  |YES           |SYNCMEM     |ACTIVE	   |               |
|SYSTEMDB |hana08 |30201 |nameserver   |        1 |	 1 |DC2       |remotehost3    |    30201 |        2 |DC1	  |YES           |SYNCMEM     |ACTIVE	   |               |
|RH2	  |hana08 |30207 |xsengine     |        2 |	 1 |DC2       |remotehost3    |    30207 |        2 |DC1	  |YES           |SYNCMEM     |ACTIVE	   |               |
|RH2	  |hana08 |30203 |indexserver  |        3 |	 1 |DC2       |remotehost3    |    30203 |        2 |DC1	  |YES           |SYNCMEM     |ACTIVE	   |               |

status system replication site "3": ACTIVE
status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC2
15

반환 코드에 대한 예상 결과는 다음과 같습니다.

  • 10: NoHSR
  • 11: 오류
  • 12: 알 수 없음
  • 13: 초기화
  • 14: 동기화
  • 15: active

대부분의 경우 시스템 복제 검사는 반환 코드 15 와 함께 반환됩니다. 또 다른 디스플레이 옵션은 -t (printLandscapeTree)를 사용하는 것입니다.

현재 기본 기본 출력의 예는 다음과 같습니다.

clusternode1:rh2adm> python systemReplicationStatus.py -t
HANA System Replication landscape:
  DC1  ( primary )
     | --- DC3  ( syncmem )
     | --- DC2  ( syncmem )

hdbnsutil -sr_state 의 예:

[root@clusternode1]# su - rh2adm
clusternode1:rh2adm> watch -n 10 hdbnsutil -sr_state
Every 10.0s: hdbnsutil -sr_state                                                                           clusternode1: Thu Jun 22 08:42:00 2023


System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~

online: true

mode: syncmem
operation mode: logreplay
site id: 2
site name: DC1

is source system: false
is secondary/consumer system: true
has secondaries/consumers attached: false
is a takeover active: false
is primary suspended: false
is timetravel enabled: false
replay mode: auto
active primary site: 1

primary masters: clusternode2

Host Mappings:
~~~~~~~~~~~~~~

clusternode1 -> [DC3] remotehost3
clusternode1 -> [DC1] clusternode1
clusternode1 -> [DC2] clusternode2


Site Mappings:
~~~~~~~~~~~~~~
DC2 (primary/primary)
    |---DC3 (syncmem/logreplay)
    |---DC1 (syncmem/logreplay)

Tier of DC2: 1
Tier of DC3: 2
Tier of DC1: 2

Replication mode of DC2: primary
[2] 0:ssh*

기본 설정의 sr_stateConfiguation 예:

clusternode1:rh2adm> hdbnsutil -sr_stateConfiguration

System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~

mode: primary
site id: 2
site name: DC1
done.

보조에 대한 sr_stateConfiguration 의 예:

clusternode1:rh2adm> hdbnsutil -sr_stateConfiguration

System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~

mode: syncmem
site id: 1
site name: DC2
active primary site: 2

primary masters: clusternode1
done.

보조 데이터베이스에서 현재 기본 노드가 무엇인지 확인할 수도 있습니다. 장애 조치 중에 두 개의 기본 데이터베이스가 있으며 이 정보는 잠재적인 기본 데이터베이스가 잘못된지 결정하고 보조 데이터베이스로 다시 등록해야 합니다.During the failover it happens to have two primary databases and this information is needed to decide which potential primary database is wrong and needs to be re-registered as secondary.

자세한 내용은 예를 참조하십시오 . 기본 및 보조 시스템의 상태 점검을 참조하십시오.

6.1.6. 보조 노드 등록

SAP HANA 시스템 복제 환경에 대한 보조 데이터베이스를 등록하는 사전 조건:

등록 예:

clusternode1:rh2adm> hdbnsutil -sr_register --remoteHost=clusternode2 --remoteInstance=${TINSTANCE} --replicationMode=syncmem --name=DC1 --online
--operationMode not set; using default from global.ini/[system_replication]/operation_mode: logreplay
adding site ...
collecting information ...
updating local ini files ...
done.

등록하면 global.ini 파일이 자동으로 업데이트됩니다.

…​ 에서 다음을 수행합니다.

# global.ini last modified 2023-06-15 09:55:05.665341 by /usr/sap/RH2/HDB02/exe/hdbnsutil -initTopology --workergroup=default --set_user_system_pw
[multidb]
mode = multidb
database_isolation = low
singletenant = yes

[persistence]
basepath_datavolumes = /hana/data/RH2
basepath_logvolumes = /hana/log/RH2

…​:

# global.ini last modified 2023-06-15 11:25:44.516946 by hdbnsutil -sr_register --remoteHost=node2 --remoteInstance=02 --replicationMode=syncmem --name=DC1 --online
[multidb]
mode = multidb
database_isolation = low
singletenant = yes

[persistence]
basepath_datavolumes = /hana/data/RH2
basepath_logvolumes = /hana/log/RH2

[system_replication]
timetravel_logreplay_mode = auto
site_id = 3
mode = syncmem
actual_mode = syncmem
site_name = DC1
operation_mode = logreplay

[system_replication_site_masters]
1 = clusternode2:30201

6.1.7. sapcontrol GetProcessList

활성 SAP HANA 데이터베이스의 프로세스 확인

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function GetProcessList                                          clusternode1: Wed Jun  7 08:23:03 2023

07.06.2023 08:23:03
GetProcessList
OK
name, description, dispstatus, textstatus, starttime, elapsedtime, pid
hdbdaemon, HDB Daemon, GREEN, Running, 2023 06 02 16:59:42, 111:23:21, 4245
hdbcompileserver, HDB Compileserver, GREEN, Running, 2023 06 02 17:01:35, 111:21:28, 7888
hdbindexserver, HDB Indexserver-RH2, GREEN, Running, 2023 06 02 17:01:36, 111:21:27, 7941
hdbnameserver, HDB Nameserver, GREEN, Running, 2023 06 02 17:01:29, 111:21:34, 7594
hdbpreprocessor, HDB Preprocessor, GREEN, Running, 2023 06 02 17:01:35, 111:21:28, 7891
hdbwebdispatcher, HDB Web Dispatcher, GREEN, Running, 2023 06 02 17:01:42, 111:21:21, 8339
hdbxsengine, HDB XSEngine-RH2, GREEN, Running, 2023 06 02 17:01:36, 111:21:27, 7944

6.1.8. sapcontrol GetInstanceList

이렇게 하면 SAP HANA 데이터베이스의 인스턴스 상태가 나열됩니다. 포트도 표시됩니다. 상태 이름은 다음 세 가지가 있습니다.

  • GREEN(실행 중)
  • GRAY(중지됨)
  • YELLOW(현재 상태 변경)

활성 인스턴스의 예:

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function GetSystemInstanceList                                   clusternode1: Wed Jun  7 08:24:13 2023


07.06.2023 08:24:13
GetSystemInstanceList
OK
hostname, instanceNr, httpPort, httpsPort, startPriority, features, dispstatus
remotehost3, 2, 50213, 50214, 0.3, HDB|HDB_WORKER, GREEN

중지된 인스턴스의 예:

clusternode1:rh2adm> sapcontrol -nr ${TINSTANCE} -function GetSystemInstanceList

22.06.2023 09:14:55
GetSystemInstanceList
OK
hostname, instanceNr, httpPort, httpsPort, startPriority, features, dispstatus
remotehost3, 2, 50213, 50214, 0.3, HDB|HDB_WORKER, GRAY

6.1.9. hdbcons

또한HDB 콘솔을 사용하여 데이터베이스에 대한 정보를 표시할 수도 있습니다.

  • hdbcons -e hdbindexserver 'replication info'
  • hdbcons -e hdbindexserver 도움말 더 많은 옵션

'replication info'의 예:

clusternode1:rh2adm> hdbcons -e hdbindexserver 'replication info'
hdbcons -p `pgrep hdbindex` 'replication info'
SAP HANA DB Management Client Console (type '\?' to get help for client commands)
Try to open connection to server process with PID 451925
SAP HANA DB Management Server Console (type 'help' to get help for server commands)
Executable: hdbindexserver (PID: 451925)
[OK]
--
## Start command at: 2023-06-22 09:05:25.211
listing default statistics for volume 3
System Replication Primary Information
======================================
System Replication Primary Configuration
 [system_replication] logshipping_timeout                         = 30
 [system_replication] enable_full_sync                            = false
 [system_replication] preload_column_tables                       = true
 [system_replication] ensure_backup_history                       = true
 [system_replication_communication] enable_ssl                    = off
 [system_replication] keep_old_style_alert                        = false
 [system_replication] enable_log_retention                        = auto
 [system_replication] logshipping_max_retention_size              = 1048576
 [system_replication] logshipping_async_buffer_size               = 268435456
 - lastLogPos                  : 0x4ab2700
 - lastLogPosTimestamp         : 22.06.2023-07.05.25 (1687417525193952)
 - lastConfirmedLogPos         : 0x4ab2700
 - lastConfirmedLogPosTimestamp: 22.06.2023-07.05.25 (1687417525193952)
 - lastSavepointVersion        : 1286
 - lastSavepointLogPos         : 0x4ab0602
 - lastSavepointTimestamp      : 22.06.2023-07.02.42 (1687417362853007)
 2 session registered.
Session index 0
 - SiteID              : 3
 - RemoteHost          : 192.168.5.137
Log Connection
 - ptr               : 0x00007ff04c0a1000
 - channel           : {<NetworkChannelSSLFilter>={<NetworkChannelBase>={this=140671686293528, fd=70, refCnt=2, idx=5, local=192.168.5.134/40203_tcp, remote=192.168.5.137/40406_tcp, state=Connected, pending=[r---]}}}
 - SSLActive           : false
 - mode              : syncmem
Data Connection
 - ptr               : 0x00007ff08b730000
 - channel           : {<NetworkChannelSSLFilter>={<NetworkChannelBase>={this=140671436247064, fd=68, refCnt=2, idx=6, local=192.168.5.134/40203_tcp, remote=192.168.5.137/40408_tcp, state=Connected, pending=[r---]}}}
 - SSLActive           : false
Primary Statistics
 - Creation Timestamp              : 20.06.2023-13.55.07 (1687269307772532)
 - Last Reset Timestamp            : 20.06.2023-13.55.07 (1687269307772532)
 - Statistic Reset Count           : 0
 - ReplicationMode                 : syncmem
 - OperationMode                   : logreplay
 - ReplicationStatus               : ReplicationStatus_Active
 - ReplicationStatusDetails        :
 - ReplicationFullSync             : DISABLED
 - shippedLogPos                   : 0x4ab2700
 - shippedLogPosTimestamp          : 22.06.2023-07.05.25 (1687417525193952)
 - sentLogPos                      : 0x4ab2700
 - sentLogPosTimestamp             : 22.06.2023-07.05.25 (1687417525193952)
 - sentMaxLogWriteEndPosition      : 0x4ab2700
 - sentMaxLogWriteEndPositionReqCnt: 0x1f6b8
 - shippedLogBuffersCount          : 142439
 - shippedLogBuffersSize           : 805855232 bytes
 - shippedLogBuffersSizeUsed       : 449305792 bytes (55.76clusternode1:rh2adm>)
 - shippedLogBuffersSizeNet        : 449013696 bytes (55.72clusternode1:rh2adm>)
 - shippedLogBufferDuration        : 83898615 microseconds
 - shippedLogBufferDurationMin     : 152 microseconds
 - shippedLogBufferDurationMax     : 18879 microseconds
 - shippedLogBufferDurationSend    : 7301067 microseconds
 - shippedLogBufferDurationComp    : 0 microseconds
 - shippedLogBufferThroughput      : 9709099.18 bytes/s
 - shippedLogBufferPendingDuration : 80583785 microseconds
 - shippedLogBufferRealThrougput   : 10073190.40 bytes/s
 - replayLogPos                    : 0x4ab2700
 - replayLogPosTimestamp           : 22.06.2023-07.05.25 (1687417525193952)
 - replayBacklog                   : 0 microseconds
 - replayBacklogSize               : 0 bytes
 - replayBacklogMax                : 822130896 microseconds
 - replayBacklogSizeMax            : 49455104 bytes
 - shippedSavepointVersion         : 0
 - shippedSavepointLogPos          : 0x0
 - shippedSavepointTimestamp       : not set
 - shippedFullBackupCount          : 0
 - shippedFullBackupSize           : 0 bytes
 - shippedFullBackupSizeNet        : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedFullBackupDuration       : 0 microseconds
 - shippedFullBackupDurationComp   : 0 microseconds
 - shippedFullBackupThroughput     : 0.00 bytes/s
 - shippedFullBackupStreamCount     : 0
 - shippedFullBackupResumeCount     : 0
 - shippedLastFullBackupSize       : 0 bytes
 - shippedLastFullBackupSizeNet    : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedLastFullBackupStart      : not set
 - shippedLastFullBackupEnd        : not set
 - shippedLastFullBackupDuration   : 0 microseconds
 - shippedLastFullBackupStreamCount : 0
 - shippedLastFullBackupResumeCount : 0
 - shippedDeltaBackupCount         : 0
 - shippedDeltaBackupSize          : 0 bytes
 - shippedDeltaBackupSizeNet       : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedDeltaBackupDuration      : 0 microseconds
 - shippedDeltaBackupDurationComp  : 0 microseconds
 - shippedDeltaBackupThroughput    : 0.00 bytes/s
 - shippedDeltaBackupStreamCount   : 0
 - shippedDeltaBackupResumeCount   : 0
 - shippedLastDeltaBackupSize      : 0 bytes
 - shippedLastDeltaBackupSizeNet   : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedLastDeltaBackupStart     : not set
 - shippedLastDeltaBackupEnd       : not set
 - shippedLastDeltaBackupDuration  : 0 microseconds
 - shippedLastDeltaBackupStreamCount : 0
 - shippedLastDeltaBackupResumeCount : 0
 - currentTransferType             : None
 - currentTransferSize             : 0 bytes
 - currentTransferPosition         : 0 bytes (0clusternode1:rh2adm>)
 - currentTransferStartTime        : not set
 - currentTransferThroughput       : 0.00 MB/s
 - currentTransferStreamCount      : 0
 - currentTransferResumeCount      : 0
 - currentTransferResumeStartTime  : not set
 - Secondary sync'ed via Log Count : 1
 - syncLogCount                    : 3
 - syncLogSize                     : 62840832 bytes
 - backupHistoryComplete           : 1
 - backupLogPosition               : 0x4a99980
 - backupLogPositionUpdTimestamp   : 22.06.2023-06.56.27 (0x5feb26227e7af)
 - shippedMissingLogCount          : 0
 - shippedMissingLogSize           : 0 bytes
 - backlogSize                     : 0 bytes
 - backlogTime                     : 0 microseconds
 - backlogSizeMax                  : 0 bytes
 - backlogTimeMax                  : 0 microseconds
 - Secondary Log Connect time      : 20.06.2023-13.55.31 (1687269331361049)
 - Secondary Data Connect time     : 20.06.2023-13.55.33 (1687269333768341)
 - Secondary Log Close time        : not set
 - Secondary Data Close time       : 20.06.2023-13.55.31 (1687269331290050)
 - Secondary Log Reconnect Count   : 0
 - Secondary Log Failover Count    : 0
 - Secondary Data Reconnect Count  : 1
 - Secondary Data Failover Count   : 0
----------------------------------------------------------------
Session index 1
 - SiteID              : 2
 - RemoteHost          : 192.168.5.133
Log Connection
 - ptr               : 0x00007ff0963e4000
 - channel           : {<NetworkChannelSSLFilter>={<NetworkChannelBase>={this=140671506282520, fd=74, refCnt=2, idx=0, local=192.168.5.134/40203_tcp, remote=192.168.5.133/40404_tcp, state=Connected, pending=[r---]}}}
 - SSLActive           : false
 - mode              : syncmem
Data Connection
 - ptr               : 0x00007ff072c04000
 - channel           : {<NetworkChannelSSLFilter>={<NetworkChannelBase>={this=140671463146520, fd=75, refCnt=2, idx=1, local=192.168.5.134/40203_tcp, remote=192.168.5.133/40406_tcp, state=Connected, pending=[r---]}}}
 - SSLActive           : false
Primary Statistics
 - Creation Timestamp              : 20.06.2023-13.55.49 (1687269349892111)
 - Last Reset Timestamp            : 20.06.2023-13.55.49 (1687269349892111)
 - Statistic Reset Count           : 0
 - ReplicationMode                 : syncmem
 - OperationMode                   : logreplay
 - ReplicationStatus               : ReplicationStatus_Active
 - ReplicationStatusDetails        :
 - ReplicationFullSync             : DISABLED
 - shippedLogPos                   : 0x4ab2700
 - shippedLogPosTimestamp          : 22.06.2023-07.05.25 (1687417525193952)
 - sentLogPos                      : 0x4ab2700
 - sentLogPosTimestamp             : 22.06.2023-07.05.25 (1687417525193952)
 - sentMaxLogWriteEndPosition      : 0x4ab2700
 - sentMaxLogWriteEndPositionReqCnt: 0x1f377
 - shippedLogBuffersCount          : 142326
 - shippedLogBuffersSize           : 793939968 bytes
 - shippedLogBuffersSizeUsed       : 437675200 bytes (55.13clusternode1:rh2adm>)
 - shippedLogBuffersSizeNet        : 437565760 bytes (55.11clusternode1:rh2adm>)
 - shippedLogBufferDuration        : 76954026 microseconds
 - shippedLogBufferDurationMin     : 115 microseconds
 - shippedLogBufferDurationMax     : 19285 microseconds
 - shippedLogBufferDurationSend    : 2951495 microseconds
 - shippedLogBufferDurationComp    : 0 microseconds
 - shippedLogBufferThroughput      : 10446578.53 bytes/s
 - shippedLogBufferPendingDuration : 73848247 microseconds
 - shippedLogBufferRealThrougput   : 10875889.97 bytes/s
 - replayLogPos                    : 0x4ab2700
 - replayLogPosTimestamp           : 22.06.2023-07.05.25 (1687417525193952)
 - replayBacklog                   : 0 microseconds
 - replayBacklogSize               : 0 bytes
 - replayBacklogMax                : 113119944 microseconds
 - replayBacklogSizeMax            : 30171136 bytes
 - shippedSavepointVersion         : 0
 - shippedSavepointLogPos          : 0x0
 - shippedSavepointTimestamp       : not set
 - shippedFullBackupCount          : 0
 - shippedFullBackupSize           : 0 bytes
 - shippedFullBackupSizeNet        : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedFullBackupDuration       : 0 microseconds
 - shippedFullBackupDurationComp   : 0 microseconds
 - shippedFullBackupThroughput     : 0.00 bytes/s
 - shippedFullBackupStreamCount     : 0
 - shippedFullBackupResumeCount     : 0
 - shippedLastFullBackupSize       : 0 bytes
 - shippedLastFullBackupSizeNet    : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedLastFullBackupStart      : not set
 - shippedLastFullBackupEnd        : not set
 - shippedLastFullBackupDuration   : 0 microseconds
 - shippedLastFullBackupStreamCount : 0
 - shippedLastFullBackupResumeCount : 0
 - shippedDeltaBackupCount         : 0
 - shippedDeltaBackupSize          : 0 bytes
 - shippedDeltaBackupSizeNet       : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedDeltaBackupDuration      : 0 microseconds
 - shippedDeltaBackupDurationComp  : 0 microseconds
 - shippedDeltaBackupThroughput    : 0.00 bytes/s
 - shippedDeltaBackupStreamCount   : 0
 - shippedDeltaBackupResumeCount   : 0
 - shippedLastDeltaBackupSize      : 0 bytes
 - shippedLastDeltaBackupSizeNet   : 0 bytes (-nanclusternode1:rh2adm>)
 - shippedLastDeltaBackupStart     : not set
 - shippedLastDeltaBackupEnd       : not set
 - shippedLastDeltaBackupDuration  : 0 microseconds
 - shippedLastDeltaBackupStreamCount : 0
 - shippedLastDeltaBackupResumeCount : 0
 - currentTransferType             : None
 - currentTransferSize             : 0 bytes
 - currentTransferPosition         : 0 bytes (0clusternode1:rh2adm>)
 - currentTransferStartTime        : not set
 - currentTransferThroughput       : 0.00 MB/s
 - currentTransferStreamCount      : 0
 - currentTransferResumeCount      : 0
 - currentTransferResumeStartTime  : not set
 - Secondary sync'ed via Log Count : 1
 - syncLogCount                    : 3
 - syncLogSize                     : 61341696 bytes
 - backupHistoryComplete           : 1
 - backupLogPosition               : 0x4a99980
 - backupLogPositionUpdTimestamp   : 22.06.2023-06.56.27 (0x5feb26227e670)
 - shippedMissingLogCount          : 0
 - shippedMissingLogSize           : 0 bytes
 - backlogSize                     : 0 bytes
 - backlogTime                     : 0 microseconds
 - backlogSizeMax                  : 0 bytes
 - backlogTimeMax                  : 0 microseconds
 - Secondary Log Connect time      : 20.06.2023-13.56.21 (1687269381053599)
 - Secondary Data Connect time     : 20.06.2023-13.56.27 (1687269387399610)
 - Secondary Log Close time        : not set
 - Secondary Data Close time       : 20.06.2023-13.56.21 (1687269381017244)
 - Secondary Log Reconnect Count   : 0
 - Secondary Log Failover Count    : 0
 - Secondary Data Reconnect Count  : 1
 - Secondary Data Failover Count   : 0
----------------------------------------------------------------
[OK]
## Finish command at: 2023-06-22 09:05:25.212 command took: 572.000 usec
--
[EXIT]
--
[BYE]

도움말 예:

clusternode1:rh2adm> hdbcons  -e hdbindexserver help
SAP HANA DB Management Client Console (type '\?' to get help for client commands)
Try to open connection to server process with PID 451925
SAP HANA DB Management Server Console (type 'help' to get help for server commands)
Executable: hdbindexserver (PID: 451925)
[OK]
--
## Start command at: 2023-06-22 09:07:16.784
Synopsis:
help [<command name>]: Print command help
   - <command name> - Command name for which to display help
Available commands:
ae_tableload - Handle loading of column store tables and columns
all - Print help and other info for all hdbcons commands
authentication - Authentication management.
binarysemaphore - BinarySemaphore management
bye - Exit console client
cd - ContainerDirectory management
cfgreg - Basis Configurator
checktopic - CheckTopic management
cnd - ContainerNameDirectory management
conditionalvariable - ConditionalVariable management
connection - Connection management
context - Execution context management (i.e., threads)
converter - Converter management
cpuresctrl - Manage cpu resources such as last-level cache allocation
crash - Crash management
crypto - Cryptography management (SSL/SAML/X509/Encryption).
csaccessor - Display diagnostics related to the CSAccessor library
ddlcontextstore - Get DdlContextStore information
deadlockdetector - Deadlock detector.
debug - Debug management
distribute - Handling distributed systems
dvol - DataVolume management
ELF - ELF symbol resolution management
encryption - Persistence encryption management
eslog - Manipulate logger on extended storage
event - Event management
exit - Exit console client
flightrecorder - Flight Recorder
hananet - HANA-Net command interface
help - Display help for a command or command list
hkt - HANA Kernal Tracer (HKT) management
indexmanager - Get IndexManager information, especially for IndexHandles
itab - Internaltable diagnostics
jexec - Information and actions for Job Executor/Scheduler
licensing - Licensing management.
log - Show information about logger and manipulate logger
machine - Information about the machine topology
mm - Memory management
monitor - Monitor view command
mproxy - Malloc proxy management
msl - Mid size LOB management
mutex - Mutex management
numa - Provides NUMA statistics for all columns of a given table, broken down by column constituents like dictionary, data vector and index.
nvmprovider - NVM Provider
output - Command for managing output from the hdbcons
page - Page management
pageaccess - PageAccess management
profiler - Profiler
quit - Exit console client
readwritelock - ReadWriteLock management
replication - Monitor data and log replication
resman - ResourceManager management
rowstore - Row Store
runtimedump - Generate a runtime dump.
savepoint - Savepoint management
semaphore - Semaphore management
servicethreads - Thread information M_SERVICE_THREADS
snapshot - Snapshot management
stat - Statistics management
statisticsservercontroller - StatisticsServer internals
statreg - Statistics registry command
syncprimi - Syncprimitive management (Mutex, CondVariable, Semaphore, BinarySemaphore,
ReadWriteLock)
table - Table Management
tablepreload - Manage and monitor table preload
trace - Trace management
tracetopic - TraceTopic management
transaction - Transaction management
ut - UnifiedTable Management
version - Version management
vf - VirtualFile management
x2 - get X2 info
[OK]
## Finish command at: 2023-06-22 09:07:16.785 command took: 209.000 usec
--
[EXIT]
--
[BYE]

6.1.10. SAP HANA 백업 만들기

SAP HANA 시스템 복제를 사용하려면 먼저 기본 시스템에 백업을 만들어야 합니다.

이 작업을 수행하는 방법의 예는 사용자 < sid>adm:입니다.

clusternode1:rh2adm> hdbsql -i ${TINSTANCE} -u system -d SYSTEMDB "BACKUP DATA USING FILE ('/hana/backup/')"
clusternode1:rh2adm> hdbsql -i ${TINSTANCE} -u system -d ${SAPSYSTEMNAME} "BACKUP DATA USING FILE ('/hana/backup/')"

6.1.11. 기본 데이터베이스에서 SAP HANA 시스템 복제 활성화

SAP HANA 시스템 복제를 기본 노드에서 활성화해야 합니다. 먼저 백업을 수행해야 합니다.

clusternode1:rh2adm> hdbnsutil -sr_enable --name=DC1
nameserver is active, proceeding ...
successfully enabled system as system replication source site
done.

6.1.12. 보조 노드에 데이터베이스 키 복사

데이터베이스 키를 보조 데이터베이스로 등록하려면 먼저 주 데이터베이스에서 보조 데이터베이스로 복사해야 합니다.

예를 들면 다음과 같습니다.

clusternode1:rh2adm> scp -rp /usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/data/SSFS_${SAPSYSTEMNAME}.DAT  remotehost3:/usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/data/SSFS_${SAPSYSTEMNAME}.DAT
clusternode1:rh2adm> scp -rp /usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/key/SSFS_${SAPSYSTEMNAME}.KEY remotehost3:/usr/sap/${SAPSYSTEMNAME}/SYS/global/security/rsecssfs/key/SSFS_${SAPSYSTEMNAME}.KEY

6.1.13. SAP HANA 시스템 복제를 위한 보조 노드 등록

먼저 데이터베이스 키가 보조 노드에 복사되었는지 확인하십시오. 그런 다음 등록 명령을 실행합니다.

clusternode1:rh2adm> hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=${TINSTANCE} --replicationMode=syncmem --name=DC1 --remoteName=DC3 --operationMode=logreplay --online

매개변수 설명:

  • remotehost: 소스 데이터베이스를 실행하는 활성 노드의 호스트 이름 (기본)
  • remoteInstance: 데이터베이스의 인스턴스 번호
  • ReplicationMode: 다음 옵션 중 하나

    • sync: 하드 디스크 동기화
    • Async: 비동기 복제
    • syncmem: 메모리 동기화
  • name: 이 복제 사이트의 별칭입니다.
  • remoteName: 소스 데이터베이스의 별칭 이름
  • operationMode: 다음 옵션 중 하나

    • delta_datashipping: 데이터가 주기적으로 전송됩니다. 테이버는 조금 더 오래 걸립니다.
    • logreplay: 원격 사이트에서 즉시 로그가 빨간색됩니다. takeover가 더 빠릅니다.
    • logreplay_readaccess: 두 번째 사이트에 대한 추가 logreplay 읽기 전용 액세스가 가능합니다.

6.1.14. SAP HANA 데이터베이스의 log_mode 확인

log_mode 를 설정하는 방법은 다음 두 가지가 있습니다.

  • log_mode=overwrite
  • log_mode=normal: 이는 기본값이며 데이터베이스 인스턴스가 primary로 실행되는 경우에도 필요합니다. SAP HANA Multitarget 시스템 복제를 사용하면 log_mode=normal 를 사용해야 합니다. log_mode 를 확인하는 가장 좋은 방법은 hdbsql 을 사용하는 것입니다.

잘못된 덮어쓰기 항목이 포함된 예:

clusternode1:rh2adm> hdbsql -i ${TINSTANCE} -d ${SAPSYSTEMNAME} -u system
Password:

Welcome to the SAP HANA Database interactive terminal.

Type:  \h for help with commands
       \q to quit

hdbsql RH2=> select * from m_inifile_contents where key='log_mode'
FILE_NAME,LAYER_NAME,TENANT_NAME,HOST,SECTION,KEY,VALUE
"global.ini","DEFAULT","","","persistence","log_mode","normal"
"global.ini","HOST","","node2","persistence","log_mode","overwrite"
2 rows selected (overall time 46.931 msec; server time 30.845 msec)

hdbsql RH2=>exit

이 경우 두 개의 global.ini 파일이 있습니다.

  • DEFAULT

    • /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.ini
  • 호스트

    • /HANA/shared/${SAPSYSTEMNAME}/HDB$TINSTANCE}/${HOSTNAME}/global.ini HOST 값은 DEFAULT 값을 덮어씁니다. 데이터베이스가 시작되기 전에 두 파일을 모두 확인한 다음 hdbsql 을 다시 사용하여 올바른 설정을 확인할 수도 있습니다. global.ini 파일을 편집하여 log_mode 를 변경할 수 있습니다.

예제:

clusternode1:rh2adm> vim /hana/shared/${SAPSYSTEMNAME}/HDB${TINSTANCE}/${HOSTNAME}/global.ini
# global.ini last modified 2023-04-06 16:15:03.521715 by hdbnameserver
[persistence]
log_mode = overwrite
# global.ini last modified 2023-04-06 16:15:03.521715 by hdbnameserver
[persistence]
log_mode = normal

global.ini 파일을 확인하거나 업데이트한 후 log_mode 값을 확인합니다.

clusternode1:rh2adm> hdbsql -d ${SAPSYSTEMNAME} -i ${TINSTANCE} -u SYSTEM;
hdbsql RH2=> select * from m_inifile_contents where section='persistence' and key='log_mode'
FILE_NAME,LAYER_NAME,TENANT_NAME,HOST,SECTION,KEY,VALUE
"global.ini","DEFAULT","","","persistence","log_mode","normal"
"global.ini","HOST","","node2","persistence","log_mode","normal"
2 rows selected (overall time 60.982 msec; server time 20.420 msec)

또한 섹션에서는 이 매개 변수를 [persistence] 섹션에 설정해야 함을 보여줍니다. 로그 모드를 덮어쓰기 에서 정상으로 변경하면 데이터베이스를 복구할 수 있도록 전체 데이터 백업을 생성하는 것이 좋습니다.

6.1.15. 기본 데이터베이스 검색

예를 들어 기본 노드를 식별하는 방법은 여러 가지가 있습니다.

  • pcs status | grep Promoted
  • hdbnsutil -sr_stateConfiguration
  • systemReplicationStatus.py

옵션 1 - systemReplicationStatus.py 스크립트 및 필터의 다음 예제에서는 모든 노드의 기본 데이터베이스 위치를 반환합니다.

clusternode1:rh2adm>
/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/Python/bin/python
/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py --sapcontrol=1 | egrep -e
"3${TINSTANCE}01/HOST|PRIMARY_MASTERS"| head -1 | awk -F"=" '{ print $2 }'

출력:

clusternode2

옵션 2 - 다음 예제에서는 모든 노드에 대해 비슷한 방식으로 systemReplicationStatus 를 표시합니다.

rh2adm>hdbnsutil -sr_state --sapcontrol=1 | grep site.*Mode

출력:

siteReplicationMode/DC1=primary
siteReplicationMode/DC3=async
siteReplicationMode/DC2=syncmem
siteOperationMode/DC1=primary
siteOperationMode/DC3=logreplay
siteOperationMode/DC2=logreplay

6.1.16. 기본 가져 오기

기본 노드와 보조 노드를 확인하려면 복제 상태 확인 섹션을 참조하십시오. 또한 다음도 참조하십시오.

클러스터에 대한 유지보수 모드를 활성화하는 예는 다음과 같습니다.

[root@clusternode1]# pcs property set maintenance-mode=true

새 기본이 될 보조 항목에서 < sidadm> 사용자로 실행합니다.

clusternode1:rh2adm> hdbnsutil -sr_takeover

이 보조 데이터베이스는 기본이 되고, 다른 활성 보조 데이터베이스는 새 주 데이터베이스에 다시 등록되며 이전 주 데이터베이스를 보조 서버로 수동으로 다시 등록해야 합니다.

6.1.17. 이전 기본 사항을 보조로 다시 등록

클러스터가 중지되었거나 유지 관리 모드로 전환 되었는지 확인하십시오. 예제:

clusternode2:rh2adm> hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=${TINSTANCE} --replicationMode=syncmem --name=DC2 --online --remoteName=DC3 --operationMode=logreplay --force_full_replica --online

예제에서는 전체 복제를 사용하고 있습니다. SAP HANA 시스템 관리자는 전체 복제가 필요한 시기를 알아야 합니다.

6.1.18. 장애 조치에서 복구

SAP HANA 시스템 복제 상태 확인기본 노드 검색을 참조하십시오. 정보가 일관되게 유지되는 것이 중요합니다. 노드가 systemReplicationStatus.py 출력에 포함되지 않고 시스템 복제 상태가 다른 경우 이 노드를 다시 등록해야 하는 경우 데이터베이스 관리자에게 확인하십시오.

이 문제를 해결하는 한 가지 방법은이 사이트를 새로운 보조로 다시 등록하는 것입니다.

경우에 따라 보조 인스턴스가 표시되지 않는 경우가 있습니다. 그런 다음 다시 등록하기 전에 이 사이트를 등록 취소합니다. 보조 DC1 등록 취소의 예:

clusternode1:rh2adm> hdbnsutil -sr_unregister --name=DC1

DC1 재등록 예:

clusternode1:rh2adm> hdbnsutil -sr_register --name=DC1 --remoteHost=node2 --remoteInstance=02 --replicationMode=sync --operationMode=logreplay --online

데이터베이스를 시작하고 실행 중인지 확인해야 합니다. 마지막으로 복제 상태를 확인합니다.

6.2. Pacemaker 명령

6.2.1. 클러스터 시작 및 중지

모든 노드에서 클러스터를 시작하려면 다음 명령을 실행합니다.

# pcs cluster start -all

재부팅 후 서비스가 활성화된 경우에만 클러스터가 자동으로 시작됩니다. 명령은 클러스터가 시작되었는지 여부와 데몬을 자동으로 시작할 수 있는지 확인하는 데 도움이 됩니다.

# pcs cluster status

다음을 사용하여 클러스터 자동 시작을 활성화할 수 있습니다.

# pcs cluster enable --all

기타 옵션은 다음과 같습니다.

  • 클러스터를 중지합니다.
  • 노드를 대기 상태로 설정합니다.
  • 클러스터를 유지 관리 모드로 설정합니다.

자세한 내용은 pcs cluster help를 확인하십시오.

# pcs cluster stop --all
# pcs cluster help

6.2.2. 클러스터를 유지 관리 모드로 전환

pacemaker 클러스터의 개입을 피하려면 유지보수 모드에 배치하여 클러스터를 "해제"할 수 있습니다.

# pcs property set maintenance-mode=true

유지 관리 모드를 확인하는 쉬운 방법은 리소스가 관리되지 않는지 확인하는 것입니다.

# pcs resource
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
    * SAPHanaTopology_RH2_02    (ocf:heartbeat:SAPHanaTopology):         Started clusternode1 (unmanaged)
    * SAPHanaTopology_RH2_02    (ocf:heartbeat:SAPHanaTopology):         Started clusternode2 (unmanaged)
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
    * SAPHana_RH2_02    (ocf:heartbeat:SAPHana):         Unpromoted clusternode1 (unmanaged)
    * SAPHana_RH2_02    (ocf:heartbeat:SAPHana):         Promoted clusternode2 (unmanaged)
  * vip_RH2_02_MASTER   (ocf:heartbeat:IPaddr2):         Started clusternode2 (unmanaged)

클러스터가 유지 관리 모드에 있고 리소스 상태 변경 사항을 업데이트하지 않는 동안 클러스터 리소스를 새로 고침합니다.

# pcs resource refresh

이는 아직 올바르지 않은 항목이 있는지 여부를 나타내며 유지 관리 모드에서 제거되는 즉시 클러스터의 수정 조치를 취합니다.

다음을 실행하여 maintenance-mode 를 제거합니다.

# pcs property set maintenance-mode=false

이제 클러스터가 계속 작동합니다. 문제가 발생하면 지금 반응할 것입니다.

6.2.3. 클러스터 상태 확인

다음은 클러스터 상태를 확인하는 몇 가지 방법입니다.

  • 클러스터가 실행 중인지 확인합니다.

    # pcs cluster status
  • 클러스터 및 모든 리소스를 확인합니다.

    # pcs status
  • 클러스터, 모든 리소스 및 모든 노드 속성을 확인합니다.

    # pcs status --full
  • 리소스만 확인합니다.

    # pcs resource status --full
  • Stonith 기록을 확인하십시오.

    # pcs stonith history
  • 위치 제한 조건을 확인합니다.

    # pcs constraint location
참고

펜싱을 구성하고 테스트해야 합니다. 가능한 자동화된 솔루션을 얻으려면 클러스터를 지속적으로 활성화해야 하므로 재부팅 후 클러스터가 자동으로 시작됩니다. 프로덕션 환경에서 재시작을 비활성화하면 예를 들어 충돌 후 수동 개입이 가능합니다. 데몬 상태도 확인하십시오.

예제:

# pcs status --full
Cluster name: cluster1
Status of pacemakerd: 'Pacemaker is running' (last updated 2023-06-22 17:56:01 +02:00)
Cluster Summary:
  * Stack: corosync
  * Current DC: clusternode2 (2) (version 2.1.5-7.el9-a3f44794f94) - partition with quorum
  * Last updated: Thu Jun 22 17:56:01 2023
  * Last change:  Thu Jun 22 17:53:34 2023 by root via crm_attribute on clusternode1
  * 2 nodes configured
  * 6 resource instances configured
Node List:
  * Node clusternode1 (1): online, feature set 3.16.2
  * Node clusternode2 (2): online, feature set 3.16.2
Full List of Resources:
  * h7fence	(stonith:fence_rhevm):	 Started clusternode2
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode1
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode2
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Promoted clusternode1
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Unpromoted clusternode2
  * vip_RH2_02_MASTER	(ocf:heartbeat:IPaddr2):	 Started clusternode1
Node Attributes:
  * Node: clusternode1 (1):
    * hana_rh2_clone_state            	: PROMOTED
    * hana_rh2_op_mode                	: logreplay
    * hana_rh2_remoteHost             	: clusternode2
    * hana_rh2_roles                  	: 4:P:master1:master:worker:master
    * hana_rh2_site                   	: DC1
    * hana_rh2_sra                    	: -
    * hana_rh2_srah                   	: -
    * hana_rh2_srmode                 	: syncmem
    * hana_rh2_sync_state             	: PRIM
    * hana_rh2_version                	: 2.00.059.02
    * hana_rh2_vhost                  	: clusternode1
    * lpa_rh2_lpt                     	: 1687449214
    * master-SAPHana_RH2_02           	: 150
  * Node: clusternode2 (2):
    * hana_rh2_clone_state            	: DEMOTED
    * hana_rh2_op_mode                	: logreplay
    * hana_rh2_remoteHost             	: clusternode1
    * hana_rh2_roles                  	: 4:S:master1:master:worker:master
    * hana_rh2_site                   	: DC2
    * hana_rh2_sra                    	: -
    * hana_rh2_srah                   	: -
    * hana_rh2_srmode                 	: syncmem
    * hana_rh2_sync_state             	: SOK
    * hana_rh2_version                	: 2.00.059.02
    * hana_rh2_vhost                  	: clusternode2
    * lpa_rh2_lpt                     	: 30
    * master-SAPHana_RH2_02           	: 100
Migration Summary:
Tickets:
PCSD Status:
  clusternode1: Online
  clusternode2: Online
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

6.2.4. 리소스 상태 확인

pcs 리소스 를 사용하여 모든 리소스의 상태를 확인합니다. 그러면 리소스 목록과 현재 상태가 출력됩니다.

예제:

# pcs resource
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
    * Started: [ clusternode1 clusternode2 ]
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
    * Promoted: [ clusternode1 ]
    * Unpromoted: [ clusternode2 ]
  * vip_RH2_02_MASTER	(ocf:heartbeat:IPaddr2):	 Started clusternode1

6.2.5. 리소스 구성 확인

다음은 현재 리소스 구성을 표시합니다.

# pcs resource config
Resource: vip_RH2_02_MASTER (class=ocf provider=heartbeat type=IPaddr2)
  Attributes: vip_RH2_02_MASTER-instance_attributes
    ip=192.168.5.136
  Operations:
    monitor: vip_RH2_02_MASTER-monitor-interval-10s
      interval=10s
      timeout=20s
    start: vip_RH2_02_MASTER-start-interval-0s
      interval=0s
      timeout=20s
    stop: vip_RH2_02_MASTER-stop-interval-0s
      interval=0s
      timeout=20s
Clone: SAPHanaTopology_RH2_02-clone
  Meta Attributes: SAPHanaTopology_RH2_02-clone-meta_attributes
    clone-max=2
    clone-node-max=1
    interleave=true
  Resource: SAPHanaTopology_RH2_02 (class=ocf provider=heartbeat type=SAPHanaTopology)
    Attributes: SAPHanaTopology_RH2_02-instance_attributes
      InstanceNumber=02
      SID=RH2
    Operations:
      methods: SAPHanaTopology_RH2_02-methods-interval-0s
        interval=0s
        timeout=5
      monitor: SAPHanaTopology_RH2_02-monitor-interval-10
        interval=10
        timeout=600
      reload: SAPHanaTopology_RH2_02-reload-interval-0s
        interval=0s
        timeout=5
      start: SAPHanaTopology_RH2_02-start-interval-0s
        interval=0s
        timeout=600
      stop: SAPHanaTopology_RH2_02-stop-interval-0s
        interval=0s
        timeout=600
Clone: SAPHana_RH2_02-clone
  Meta Attributes: SAPHana_RH2_02-clone-meta_attributes
    clone-max=2
    clone-node-max=1
    interleave=true
    notify=true
    promotable=true
  Resource: SAPHana_RH2_02 (class=ocf provider=heartbeat type=SAPHana)
    Attributes: SAPHana_RH2_02-instance_attributes
      AUTOMATED_REGISTER=true
      DUPLICATE_PRIMARY_TIMEOUT=300
      HANA_CALL_TIMEOUT=10
      InstanceNumber=02
      PREFER_SITE_TAKEOVER=true
      SID=RH2
    Operations:
      demote: SAPHana_RH2_02-demote-interval-0s
        interval=0s
        timeout=3600
      methods: SAPHana_RH2_02-methods-interval-0s
        interval=0s
        timeout=5
      monitor: SAPHana_RH2_02-monitor-interval-251
        interval=251
        timeout=700
        role=Unpromoted
      monitor: SAPHana_RH2_02-monitor-interval-249
        interval=249
        timeout=700
        role=Promoted
      promote: SAPHana_RH2_02-promote-interval-0s
        interval=0s
        timeout=3600
      reload: SAPHana_RH2_02-reload-interval-0s
        interval=0s
        timeout=5
      start: SAPHana_RH2_02-start-interval-0s
        interval=0s
        timeout=3200
      stop: SAPHana_RH2_02-stop-interval-0s
        interval=0s
        timeout=3100

그러면 설치 및 구성된 리소스 에이전트를 구성하는 데 사용되는 모든 매개 변수가 나열됩니다.

6.2.6. saphana 리소스 옵션 AUTOMATED_REGISTER=true

SAPHana 리소스에서 이 옵션을 사용하는 경우 pacemaker는 보조 데이터베이스를 자동으로 다시 등록합니다.

첫 번째 테스트에 이 옵션을 사용하는 것이 좋습니다. AUTOMATED_REGISTER=false 를 사용하는 경우 관리자는 보조 노드를 수동으로 다시 등록해야 합니다.

6.2.7. 리소스 처리

리소스 관리를 위한 몇 가지 옵션이 있습니다. 자세한 내용은 사용 가능한 도움말을 확인하십시오.

# pcs resource help

사용된 리소스 에이전트를 나열합니다.

# pcs resource config | grep "type=" | awk -F"type=" '{ print $2 }' | sed -e "s/)//g"

출력 예:

IPaddr2
SAPHanaTopology
SAPHana

특정 리소스 에이전트 설명 및 구성 매개변수를 표시합니다.

# pcs resource describe <resource agent>

예(출력 없음):

# pcs resource describe IPaddr2

리소스 에이전트 IPaddr2 의 예(출력 포함):

Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')
ocf:heartbeat:IPaddr2 - Manages virtual IPv4 and IPv6 addresses (Linux specific version)

This Linux-specific resource manages IP alias IP addresses. It can add an IP alias, or remove one. In
addition, it can implement Cluster Alias IP functionality if invoked as a clone resource.  If used as a
clone, "shared address with a trivial, stateless (autonomous) load-balancing/mutual exclusion on
ingress" mode gets applied (as opposed to "assume resource uniqueness" mode otherwise). For that, Linux
firewall (kernel and userspace) is assumed, and since recent distributions are ambivalent in plain
"iptables" command to particular back-end resolution, "iptables-legacy" (when present) gets prioritized
so as to avoid incompatibilities (note that respective ipt_CLUSTERIP firewall extension in use here is,
at the same time, marked deprecated, yet said "legacy" layer can make it workable, literally, to this
day) with "netfilter" one (as in "iptables-nft"). In that case, you should explicitly set clone-node-max
>= 2, and/or clone-max < number of nodes. In case of node failure, clone instances need to be re-
allocated on surviving nodes. This would not be possible if there is already an instance on those nodes,
and clone-node-max=1 (which is the default).  When the specified IP address gets assigned to a
respective interface, the resource agent sends unsolicited ARP (Address Resolution Protocol, IPv4) or NA
(Neighbor Advertisement, IPv6) packets to inform neighboring machines about the change. This
functionality is controlled for both IPv4 and IPv6 by shared 'arp_*' parameters.

Resource options:
  ip (required) (unique): The IPv4 (dotted quad notation) or IPv6 address (colon hexadecimal notation)
      example IPv4 "192.168.1.1". example IPv6 "2001:db8:DC28:0:0:FC57:D4C8:1FFF".
  nic: The base network interface on which the IP address will be brought online.  If left empty, the
      script will try and determine this from the routing table.  Do NOT specify an alias interface in
      the form eth0:1 or anything here; rather, specify the base interface only. If you want a label,
      see the iflabel parameter.  Prerequisite:  There must be at least one static IP address, which is
      not managed by the cluster, assigned to the network interface. If you can not assign any static IP
      address on the interface, modify this kernel parameter:  sysctl -w
      net.ipv4.conf.all.promote_secondaries=1 # (or per device)
  cidr_netmask: The netmask for the interface in CIDR format (e.g., 24 and not 255.255.255.0)  If
      unspecified, the script will also try to determine this from the routing table.
  broadcast: Broadcast address associated with the IP. It is possible to use the special symbols '+' and
      '-' instead of the broadcast address. In this case, the broadcast address is derived by
      setting/resetting the host bits of the interface prefix.
  iflabel: You can specify an additional label for your IP address here. This label is appended to your
      interface name.  The kernel allows alphanumeric labels up to a maximum length of 15 characters
      including the interface name and colon (e.g. eth0:foobar1234)  A label can be specified in nic
      parameter but it is deprecated. If a label is specified in nic name, this parameter has no effect.
  lvs_support: Enable support for LVS Direct Routing configurations. In case a IP address is stopped,
      only move it to the loopback device to allow the local node to continue to service requests, but
      no longer advertise it on the network.  Notes for IPv6: It is not necessary to enable this option
      on IPv6. Instead, enable 'lvs_ipv6_addrlabel' option for LVS-DR usage on IPv6.
  lvs_ipv6_addrlabel: Enable adding IPv6 address label so IPv6 traffic originating from the address's
      interface does not use this address as the source. This is necessary for LVS-DR health checks to
      realservers to work. Without it, the most recently added IPv6 address (probably the address added
      by IPaddr2) will be used as the source address for IPv6 traffic from that interface and since that
      address exists on loopback on the realservers, the realserver response to pings/connections will
      never leave its loopback. See RFC3484 for the detail of the source address selection.  See also
      'lvs_ipv6_addrlabel_value' parameter.
  lvs_ipv6_addrlabel_value: Specify IPv6 address label value used when 'lvs_ipv6_addrlabel' is enabled.
      The value should be an unused label in the policy table which is shown by 'ip addrlabel list'
      command. You would rarely need to change this parameter.
  mac: Set the interface MAC address explicitly. Currently only used in case of the Cluster IP Alias.
      Leave empty to chose automatically.
  clusterip_hash: Specify the hashing algorithm used for the Cluster IP functionality.
  unique_clone_address: If true, add the clone ID to the supplied value of IP to create a unique address
      to manage
  arp_interval: Specify the interval between unsolicited ARP (IPv4) or NA (IPv6) packets in
      milliseconds.  This parameter is deprecated and used for the backward compatibility only. It is
      effective only for the send_arp binary which is built with libnet, and send_ua for IPv6. It has no
      effect for other arp_sender.
  arp_count: Number of unsolicited ARP (IPv4) or NA (IPv6) packets to send at resource initialization.
  arp_count_refresh: For IPv4, number of unsolicited ARP packets to send during resource monitoring.
      Doing so helps mitigate issues of stuck ARP caches resulting from split-brain situations.
  arp_bg: Whether or not to send the ARP (IPv4) or NA (IPv6) packets in the background. The default is
      true for IPv4 and false for IPv6.
  arp_sender: For IPv4, the program to send ARP packets with on start. Available options are:  -
      send_arp: default  - ipoibarping: default for infiniband interfaces if ipoibarping is available  -
      iputils_arping: use arping in iputils package  - libnet_arping: use another variant of arping
      based on libnet
  send_arp_opts: For IPv4, extra options to pass to the arp_sender program. Available options are vary
      depending on which arp_sender is used.  A typical use case is specifying '-A' for iputils_arping
      to use ARP REPLY instead of ARP REQUEST as Gratuitous ARPs.
  flush_routes: Flush the routing table on stop. This is for applications which use the cluster IP
      address and which run on the same physical host that the IP address lives on. The Linux kernel may
      force that application to take a shortcut to the local loopback interface, instead of the
      interface the address is really bound to. Under those circumstances, an application may, somewhat
      unexpectedly, continue to use connections for some time even after the IP address is deconfigured.
      Set this parameter in order to immediately disable said shortcut when the IP address goes away.
  run_arping: For IPv4, whether or not to run arping for collision detection check.
  nodad: For IPv6, do not perform Duplicate Address Detection when adding the address.
  noprefixroute: Use noprefixroute flag (see 'man ip-address').
  preferred_lft: For IPv6, set the preferred lifetime of the IP address. This can be used to ensure that
      the created IP address will not be used as a source address for routing. Expects a value as
      specified in section 5.5.4 of RFC 4862.
  network_namespace: Specifies the network namespace to operate within. The namespace must already
      exist, and the interface to be used must be within the namespace.

Default operations:
  start:
    interval=0s
    timeout=20s
  stop:
    interval=0s
    timeout=20s
  monitor:
    interval=10s
    timeout=20s

클러스터가 중지되면 모든 리소스도 중지됩니다. 클러스터가 유지 관리 모드에 배치되면 모든 리소스가 계속 실행되고 있지만 모니터링 또는 관리되지 않습니다.

6.2.8. 유지 관리 모드를 위한 클러스터 속성 처리

정의된 모든 속성을 나열합니다.

[root@clusternode1] pcs property
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: cluster1
 concurrent-fencing: true
 dc-version: 2.1.5-7.el9-a3f44794f94
 hana_rh2_site_srHook_DC1: PRIM
 hana_rh2_site_srHook_DC2: SFAIL
 have-watchdog: false
 last-lrm-refresh: 1688548036
 maintenance-mode: true
 priority-fencing-delay: 10s
 stonith-enabled: true
 stonith-timeout: 900

데이터베이스를 재구성하려면 구성이 완료될 때까지 변경 사항을 무시하도록 클러스터에 지시해야 합니다. 다음을 사용하여 클러스터를 유지보수 모드에 배치할 수 있습니다.

# pcs property set maintenance-mode=true

maintenance-mode 를 확인합니다.

# pcs resource
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode1 (unmanaged)
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode2 (unmanaged)
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Promoted clusternode1 (unmanaged)
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Unpromoted clusternode2 (unmanaged)
  * vip_RH2_02_MASTER	(ocf:heartbeat:IPaddr2):	 Started clusternode1 (unmanaged)

모든 리소스가 "관리되지 않음"인지 확인합니다.

[root@clusternode1]# pcs status
Cluster name: cluster1
Status of pacemakerd: 'Pacemaker is running' (last updated 2023-06-27 16:02:15 +02:00)
Cluster Summary:
  * Stack: corosync
  * Current DC: clusternode2 (version 2.1.5-7.el9-a3f44794f94) - partition with quorum
  * Last updated: Tue Jun 27 16:02:16 2023
  * Last change:  Tue Jun 27 16:02:14 2023 by root via cibadmin on clusternode1
  * 2 nodes configured
  * 6 resource instances configured

              *** Resource management is DISABLED ***
  The cluster will not attempt to start, stop or recover services

Node List:
  * Online: [ clusternode1 clusternode2 ]

Full List of Resources:
  * h7fence	(stonith:fence_rhevm):	 Started clusternode2 (unmanaged)
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode1 (unmanaged)
    * SAPHanaTopology_RH2_02	(ocf:heartbeat:SAPHanaTopology):	 Started clusternode2 (unmanaged)
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Promoted clusternode1 (unmanaged)
    * SAPHana_RH2_02	(ocf:heartbeat:SAPHana):	 Unpromoted clusternode2 (unmanaged)
  * vip_RH2_02_MASTER	(ocf:heartbeat:IPaddr2):	 Started clusternode1 (unmanaged)

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

maintenance-mode 를 설정 해제하면 리소스가 다시 Managed로 전환됩니다.

# pcs property set maintenance-mode=false

6.2.9. 이동을 사용하여 SAPHana 리소스 장애 조치

SAP HANA 데이터베이스 장애 조치(failover) 방법의 간단한 예는 pcs resource move 명령을 사용하는 것입니다. 다음과 같이 복제 리소스 이름을 사용하고 리소스를 이동해야 합니다.

# pcs resource move <SAPHana-clone-resource>

이 예제에서 복제 리소스는 SAPHana_RH2_02-clone:입니다.

[root@clusternode1]# pcs resource
  * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02]:
    * Started: [ clusternode1 clusternode2 ]
  * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable):
    * Promoted: [ clusternode1 ]
    * Unpromoted: [ clusternode2 ]
  * vip_RH2_02_MASTER	(ocf:heartbeat:IPaddr2):	 Started clusternode1

리소스를 이동합니다.

# pcs resource move SAPHana_RH2_02-clone
Location constraint to move resource 'SAPHana_RH2_02-clone' has been created
Waiting for the cluster to apply configuration changes...
Location constraint created to move resource 'SAPHana_RH2_02-clone' has been removed
Waiting for the cluster to apply configuration changes...
resource 'SAPHana_RH2_02-clone' is promoted on node 'clusternode2'; unpromoted on node 'clusternode1'

나머지 제약 조건이 있는지 확인합니다.

# pcs constraint location

리소스를 지워 장애 조치 중에 생성된 위치 제약 조건을 제거할 수 있습니다. 예제:

[root@clusternode1]# pcs resource clear SAPHana_RH2_02-clone

"Migration Summary"에 남아 있는 경고 또는 항목이 있는지 확인합니다.

# pcs status --full

stonith 기록을 확인하십시오.

# pcs stonith history

필요한 경우 stonith 기록을 지웁니다.

# pcs stonith history cleanup

2.1.5 이전의 pacemaker 버전을 사용하는 경우 pcs resource move를 실행할 때 제약 조건을 관리하고 나머지 제약 조건을 확인할 수 있습니다.

6.2.10. 페일오버 및 동기화 상태 모니터링

모든 pacemaker 작업은 클러스터 노드의 /var/log/messages 파일에 기록됩니다. 다른 많은 메시지가 있으므로 SAP 리소스 에이전트와 관련된 메시지를 읽기가 어려울 수 있습니다. SAP 리소스 에이전트와 관련된 메시지만 필터링하는 명령 별칭을 구성할 수 있습니다.

별칭 tmsl 예:

# alias tmsl='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_$SAPSYSTEMNAME_HDB${TINSTANCE}|sr_register|WAITING4LPA|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED|LPT"'

tsml 출력 예:

[root@clusternode1]# tmsl
Jun 22 13:59:54 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: secondary with sync status SOK ==> possible takeover node
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: saphana_monitor_secondary: scoring_crm_master(4:S:master1:master:worker:master,SOK)
Jun 22 13:59:55 clusternode1 SAPHana(SAPHana_RH2_02)[907482]: INFO: DEC: scoring_crm_master: sync(SOK) is matching syncPattern (SOK)
Jun 22 14:04:06 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:04:06 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:04:06 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: secondary with sync status SOK ==> possible takeover node
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: saphana_monitor_secondary: scoring_crm_master(4:S:master1:master:worker:master,SOK)
Jun 22 14:04:09 clusternode1 SAPHana(SAPHana_RH2_02)[914625]: INFO: DEC: scoring_crm_master: sync(SOK) is matching syncPattern (SOK)
Jun 22 14:08:21 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:08:21 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:08:21 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:08:23 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:08:23 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:08:23 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: secondary with sync status SOK ==> possible takeover node
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: saphana_monitor_secondary: scoring_crm_master(4:S:master1:master:worker:master,SOK)
Jun 22 14:08:24 clusternode1 SAPHana(SAPHana_RH2_02)[922136]: INFO: DEC: scoring_crm_master: sync(SOK) is matching syncPattern (SOK)
Jun 22 14:12:35 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:12:35 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:12:36 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:12:38 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:12:38 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:12:38 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:12:38 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: secondary with sync status SOK ==> possible takeover node
Jun 22 14:12:39 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:12:39 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:12:39 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:12:39 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: saphana_monitor_secondary: scoring_crm_master(4:S:master1:master:worker:master,SOK)
Jun 22 14:12:39 clusternode1 SAPHana(SAPHana_RH2_02)[929408]: INFO: DEC: scoring_crm_master: sync(SOK) is matching syncPattern (SOK)
Jun 22 14:14:01 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_clone_state[clusternode2]: PROMOTED -> DEMOTED
Jun 22 14:14:02 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_clone_state[clusternode2]: DEMOTED -> UNDEFINED
Jun 22 14:14:19 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_clone_state[clusternode1]: DEMOTED -> PROMOTED
Jun 22 14:14:21 clusternode1 SAPHana(SAPHana_RH2_02)[932762]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:14:21 clusternode1 SAPHana(SAPHana_RH2_02)[932762]: INFO: DEC: hana_rh2_site_srHook_DC1 is empty or SWAIT. Take polling attribute: hana_rh2_sync_state=SOK
Jun 22 14:14:21 clusternode1 SAPHana(SAPHana_RH2_02)[932762]: INFO: DEC: Finally get_SRHOOK()=SOK
Jun 22 14:15:14 clusternode1 SAPHana(SAPHana_RH2_02)[932762]: INFO: DEC: hana_rh2_site_srHook_DC1=SWAIT
Jun 22 14:15:22 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_sync_state[clusternode1]: SOK -> PRIM
Jun 22 14:15:23 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_sync_state[clusternode2]: PRIM -> SOK
Jun 22 14:15:23 clusternode1 SAPHana(SAPHana_RH2_02)[934810]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:15:25 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_clone_state[clusternode2]: UNDEFINED -> DEMOTED
Jun 22 14:15:32 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_sync_state[clusternode2]: SOK -> SFAIL
Jun 22 14:19:36 clusternode1 pacemaker-attrd[10150]: notice: Setting hana_rh2_sync_state[clusternode2]: SFAIL -> SOK
Jun 22 14:19:36 clusternode1 SAPHana(SAPHana_RH2_02)[942693]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:23:49 clusternode1 SAPHana(SAPHana_RH2_02)[950623]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:28:02 clusternode1 SAPHana(SAPHana_RH2_02)[958633]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:32:15 clusternode1 SAPHana(SAPHana_RH2_02)[966683]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:36:27 clusternode1 SAPHana(SAPHana_RH2_02)[974736]: INFO: ACT site=DC1, setting SOK for secondary (1)
Jun 22 14:40:40 clusternode1 SAPHana(SAPHana_RH2_02)[982934]: INFO: ACT site=DC1, setting SOK for secondary (1)

필터를 사용하면 발생하는 상태 변경 사항을 더 쉽게 파악할 수 있습니다. 세부 정보가 누락된 경우 전체 메시지 파일을 열어 모든 정보를 읽을 수 있습니다.

장애 조치(failover) 후 리소스를 지울 수 있습니다. 또한 남은 위치 제약 조건이 없는지 확인하십시오.

6.2.11. 클러스터 일관성 확인

설치 중에 구성이 마지막으로 완료되기 전에 리소스가 시작되는 경우가 있습니다. 이로 인해 CIB(Cluster Information Base)에 항목이 발생하여 잘못된 동작이 발생할 수 있습니다. 이는 구성을 완료한 후 쉽게 확인하고 수동으로 수정할 수 있습니다.

SAPHana 리소스를 시작하면 누락된 항목이 다시 생성됩니다. 잘못된 항목은 pcs 명령으로 처리할 수 없으며 수동으로 제거해야 합니다.

CIB 항목을 확인합니다.

# cibadmin --query

DC3 및 SFAIL은 클러스터 멤버가 DC1 및 DC2인 경우 및 노드 간 동기화 상태가 SOK로 보고되는 경우 클러스터 정보 베이스에 존재하지 않아야 하는 항목입니다.

해당 항목을 확인하는 예:

# cibadmin --query |grep '"DC3"'
# cibadmin --query |grep '"SFAIL"'

root 사용자로 클러스터의 모든 노드에서 명령을 실행할 수 있습니다. 일반적으로 명령 출력이 비어 있습니다. 구성에 오류가 계속 있는 경우 출력은 다음과 같습니다.

        <nvpair id="SAPHanaSR-hana_rh1_glob_sec" name="hana_rh1_glob_sec" value="DC3"/>

이러한 항목은 다음 명령을 사용하여 제거할 수 있습니다.

# cibadmin --delete --xml-text '<...>'

위 예제의 항목을 제거하려면 다음을 입력해야 합니다. 출력에는 큰따옴표가 포함되어 있으므로 텍스트를 작은따옴표로 포함해야 합니다.

# cibadmin --delete --xml-text '        <nvpair id="SAPHanaSR-hana_rh1_glob_sec" name="hana_rh1_glob_sec" value="DC3"/>'

제거된 CIB 항목이 없는지 확인합니다. 반환된 출력은 비어 있어야 합니다.

# cibadmin --query |grep 'DC3"'

6.2.12. 클러스터 정리

장애 조치 테스트 중에 제약 조건 뒤에 남아 있고 다른 하나는 이전 테스트에서 남아 있을 수 있습니다.During the failover tests there might be left behind constraints and other remains from previous tests. 다음 테스트를 시작하기 전에 클러스터를 지워야 합니다.

클러스터 상태에 실패 이벤트가 있는지 확인합니다.

# pcs status --full

"Migration Summary"에 클러스터 경고 또는 항목이 표시되면 리소스를 지우고 정리해야 합니다.

# pcs resource clear SAPHana_RH2_02-clone
# pcs resource cleanup SAPHana_RH2_02-clone

출력:

Cleaned up SAPHana_RH2_02:0 on clusternode1
Cleaned up SAPHana_RH2_02:1 on clusternode2

예를 들어 이전 장애 조치의 경우 원하지 않는 위치 제약 조건이 있는지 확인합니다.

# pcs constraint location

기존 제약 조건을 자세히 확인합니다.

# pcs constraint --full

리소스 이동 후 위치 제한 조건의 예:

      Node: hana08 (score:-INFINITY) (role:Started) (id:cli-ban-SAPHana_RH2_02-clone-on-hana08)

이 위치 제약 조건을 지웁니다.

# pcs resource clear SAPHana_RH2_02-clone

제약 조건이 제약 조건 목록에서 사라졌는지 확인합니다. 유지되는 경우 제약 조건 ID를 사용하여 명시적으로 삭제합니다.

# pcs constraint delete cli-ban-SAPHana_RH2_02-clone-on-hana08

펜싱을 사용하여 여러 테스트를 실행하는 경우 stonith 기록을 지울 수도 있습니다.

# pcs stonith history cleanup

모든 pcs 명령은 root 사용자로 실행됩니다. 또한 Discover leftovers 를 확인하시기 바랍니다.

6.2.13. 기타 클러스터 명령

다양한 클러스터 명령 예

# pcs status --full
# crm_mon -1Arf # Provides an overview
# pcs resource # Lists all resources and shows if they are running
# pcs constraint --full # Lists all constraint ids which should be removed
# pcs cluster start --all # This will start the cluster on all nodes
# pcs cluster stop --all # This will stop the cluster on all nodes
# pcs node attribute # Lists node attributes

6.3. RHEL 및 일반 명령

6.3.1. 현재 상태 검색

여러 단계를 수행하여 환경의 현재 상태를 알아야 합니다. 환경 모니터링을 참조하십시오. 또한 다음을 수행하는 것이 좋습니다.

  • /var/log/messages 를 확인하고, 더 쉬운 로그 검토 를 위해 Aliases 를 사용합니다.
  • 적절한 작업을 계속하기 위해 이전 활동에서 클러스터를 정리해야 하는 경우가 있습니다. 남은 시간을 발견하고 필요한 경우 정리하십시오.

6.3.2. yum info

# yum info resource-agents-sap-hana
Last metadata expiration check: 2:47:28 ago on Tue 06 Jun 2023 03:13:57 AM CEST.
Installed Packages
Name         : resource-agents-sap-hana
Epoch        : 1
Version      : 0.162.1
Release      : 2.el9_2
Architecture : noarch
Size         : 174 k
Source       : resource-agents-sap-hana-0.162.1-2.el9_2.src.rpm
Repository   : @System
Summary      : SAP HANA cluster resource agents
URL          : https://github.com/SUSE/SAPHanaSR
License      : GPLv2+
Description  : The SAP HANA resource agents interface with Pacemaker to allow
             : SAP instances to be managed in a cluster environment.

6.3.3. RPM 표시 버전

# rpm -q resource-agents-sap-hana
resource-agents-sap-hana-0.162.1-2.el9_2.noarch

6.3.4. 모니터링에 대한 별칭

이를 쉘 프로필에 추가할 수 있습니다. 예제에서 루트 별칭은 < sid>adm 별칭에 따라 달라지며, 따라서 이미 정의되어 있어야 합니다.

  • root(/. bashrc에추가):

    # export ListInstances=$(/usr/sap/hostctrl/exe/saphostctrl -function ListInstances| head -1 )
    export sid=$(echo "$ListInstances" |cut -d " " -f 5| tr [A-Z] [a-z])
    export SID=$(echo $sid | tr [a-z] [A-Z])
    export Instance=$(echo "$ListInstances" |cut -d " " -f 7 )
    alias crmm='watch -n 1 crm_mon -1Arf'
    alias crmv='watch -n 1 /usr/local/bin/crmmv'
    alias cglo='su - ${sid}adm -c cglo'
    alias cdh='cd /usr/lib/ocf/resource.d/heartbeat'
    alias gtr='su - ${sid}adm  -c gtr'
    alias hdb='su - ${sid}adm  -c hdb'
    alias hdbi='su - ${sid}adm  -c hdbi'
    alias hgrep='history | grep $1'
    alias hri='su - ${sid}adm  -c hri'
    alias hris='su - ${sid}adm  -c hris'
    alias killnode="echo 'b' > /proc/sysrq-trigger"
    alias lhc='su - ${sid}adm  -c lhc'
    alias pit='ssh pitunnel'
    alias python='/usr/sap/${SID}/HDB${Instance}/exe/Python/bin/python'
    alias srstate='su - ${sid}adm  -c srstate'
    alias shr='watch -n 5 "SAPHanaSR-monitor --sid=${SID}"'
    alias sgsi='su - ${sid}adm  -c sgsi'
    alias srm='su - ${sid}adm  -c srm'
    alias srs='su - ${sid}adm  -c srs'
    alias sapstart='su - ${sid}adm  -c sapstart'
    alias sapstop='su - ${sid}adm  -c sapstop'
    alias tma='tmux attach -t `tmux ls | grep -v atta| head -1 |cut -d " " -f 1`'
    alias tm='tail -100f /var/log/messages |grep -v systemd'
    alias tms='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_${SID}_HDB${Instance}|sr_register|WAITING4
    LPA|EXCLUDE as possible takeover node|SAPHanaSR|failed|${HOSTNAME}|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStop
    ped|FAILED"'
    alias tmss='tail -1000f /var/log/messages | grep -v systemd| egrep -s "secondary with sync status|Setting master-rsc_SAPHa
    na_${SID}_HDB${Instance}|sr_register|WAITING4LPA|EXCLUDE as possible takeover node|SAPHanaSR|failed|${HOSTNAME}|PROMOTED|DE
    MOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED"'
    alias tmm='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_${SID}_HDB${Instance}|sr_register|WAITING4
    LPA|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED|LPT|SOK|SFAIL|SAPHanaSR-mon"| grep -v systemd'
    alias tmsl='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_${SID}_HDB${Instance}|sr_register|WAITING
    4LPA|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED|LPT|SOK|SFAIL|SAPHanaSR-mon"'
    alias vih='vim /usr/lib/ocf/resource.d/heartbeat/SAPHanaStart'
    alias vglo='su - ${sid}adm  -c vglo'
  • & lt;Sid>adm (/ .customer.sh에 추가 ):

    alias tm='tail -100f /var/log/messages |grep -v systemd'
    alias tms='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_$SAPSYSTEMNAME_HDB${TINSTANCE}|sr_register|WAITING4LPA|EXCLUDE as possible takeover node|SAPHanaSR|failed|${HOSTNAME}|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED"'
    alias tmsl='tail -1000f /var/log/messages | egrep -s "Setting master-rsc_SAPHana_$SAPSYSTEMNAME_HDB${TINSTANCE}|sr_register|WAITING4LPA|PROMOTED|DEMOTED|UNDEFINED|master_walk|SWAIT|WaitforStopped|FAILED|LPT"'
    alias sapstart='sapcontrol -nr ${TINSTANCE} -function StartSystem HDB;hdbi'
    alias sapstop='sapcontrol -nr ${TINSTANCE} -function StopSystem HDB;hdbi'
    alias sgsi='watch sapcontrol -nr ${TINSTANCE} -function GetSystemInstanceList'
    alias spl='watch sapcontrol -nr ${TINSTANCE} -function GetProcessList'
    alias splh='watch "sapcontrol -nr ${TINSTANCE} -function GetProcessList| grep hdbdaemon"'
    alias srm='watch "hdbnsutil -sr_state --sapcontrol=1 |grep site.*Mode"'
    alias srs="watch -n 5 'python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status \$?'"
    alias srstate='watch -n 10 hdbnsutil -sr_state'
    alias hdb='watch -n 5 "sapcontrol -nr ${TINSTANCE} -function GetProcessList| egrep -s hdbdaemon\|hdbnameserver\|hdbindexserver "'
    alias hdbi='watch -n 5 "sapcontrol -nr ${TINSTANCE} -function GetProcessList| egrep -s hdbdaemon\|hdbnameserver\|hdbindexserver;sapcontrol -nr ${TINSTANCE} -function GetSystemInstanceList "'
    alias hgrep='history | grep $1'
    alias vglo="vim /usr/sap/$SAPSYSTEMNAME/SYS/global/hdb/custom/config/global.ini"
    alias vgloh="vim /hana/shared/${SAPSYSTEMNAME}/HDB${TINSTANCE}/${HOSTNAME}/global.ini"
    alias hri='hdbcons -e hdbindexserver "replication info"'
    alias hris='hdbcons -e hdbindexserver "replication info" | egrep -e "SiteID|ReplicationStatus_"'
    alias gtr='watch -n 10 /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/Python/bin/python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/getTakeoverRecommendation.py --sapcontrol=1'
    alias lhc='/usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/Python/bin/python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/landscapeHostConfiguration.py;echo $?'

7장. 참고 자료

7.1. Red Hat

7.2. SAP

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.