3.17. Metro-DR로 대체 클러스터 복구
기본 클러스터에 오류가 발생하면 복구하거나, 기존 클러스터의 복구를 기다리거나, 클러스터를 확인할 수 없는 경우 클러스터를 완전히 교체할 수 있는 옵션이 제공됩니다. 이 솔루션은 실패한 기본 클러스터를 새 클러스터로 교체하고 이 새 클러스터로 장애 조치(복구)를 활성화할 때 안내합니다.
이 지침에서는 애플리케이션을 설치하고 보호한 후 RHACM 관리 클러스터를 교체해야 한다고 가정합니다. 이 섹션의 경우 RHACM 관리 클러스터는 대체 클러스터이며 교체 되지 않은 클러스터는 남아 있는 클러스터 이며 새 클러스터는 복구 클러스터 입니다.
Discovered 애플리케이션의 클러스터 복구는 현재 지원되지 않습니다. 관리형 애플리케이션만 지원됩니다.
사전 요구 사항
- RHACM(Red Hat Advance Cluster Management)을 사용하여 설치된 애플리케이션으로 Metro-DR 환경이 구성되었는지 확인합니다.
- 애플리케이션에 클러스터 오류로부터 보호하는 데이터 정책이 할당되었는지 확인합니다.
프로시저
Hub 클러스터에서 다음 단계를 수행합니다.
CLI 터미널을 사용하여 DRCluster 리소스를 편집하여 교체 클러스터를 펜싱합니다. 여기서 < drcluster_name >은 대체 클러스터 이름입니다.
oc edit drcluster <drcluster_name>apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: ## Add or modify this line clusterFence: Fenced cidrs: [...] [...]- RHACM 콘솔을 사용하여 애플리케이션으로 이동하여 실패한 클러스터에서 남아 있는 클러스터로 보호된 모든 애플리케이션을 장애 조치(failover)합니다.
보호된 모든 애플리케이션이 현재 남아 있는 클러스터에서 실행 중인지 확인하고 확인합니다.
참고각 애플리케이션 DRPlacementControl의 PROGRESSION 상태는
정리로 표시됩니다. 교체 클러스터가 오프라인 상태이거나 다운된 경우 이 문제가 예상됩니다.
교체 클러스터의 펜싱을 해제합니다.
CLI 터미널을 사용하여 DRCluster 리소스를 편집합니다. 여기서 < drcluster_name >은 대체 클러스터 이름입니다.
$ oc edit drcluster <drcluster_name>apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: ## Modify this line clusterFence: Unfenced cidrs: [...] [...]교체 클러스터의 DRCluster를 삭제합니다.
$ oc delete drcluster <drcluster_name> --wait=false참고DRCluster는 이후 단계까지 삭제되지 않으므로 --wait=false를 사용합니다.
남아 있는 클러스터의 각 보호된 애플리케이션에 대해 Hub 클러스터에서 재해 복구를 비활성화합니다.
각 애플리케이션에 대해 배치를 편집하고 남아 있는 클러스터가 선택되어 있는지 확인합니다.
참고서브스크립션 기반 애플리케이션의 경우 연결된 배치는 관리 클러스터와 유사한 허브 클러스터의 동일한 네임스페이스에 있습니다. ApplicationSets 기반 애플리케이션의 경우 관련 배치는 hub 클러스터의
openshift-gitops네임스페이스에서 확인할 수 있습니다.$ oc edit placement <placement_name> -n <namespace>apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...] spec: clusterSets: - submariner predicates: - requiredClusterSelector: claimSelector: {} labelSelector: matchExpressions: - key: name operator: In values: - cluster1 <-- Modify to be surviving cluster name [...]보호된 각 애플리케이션의 VolumeReplicationGroup에 대해 남아 있는 클러스터에서 다음 명령을 실행하여
s3Profile이 교체 클러스터에 대해 제거되었는지 확인합니다.$ oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq보호된 애플리케이션 배치 리소스가 모두 남아 있는 클러스터 및 보호된 애플리케이션에서 제거된 교체 클러스터 s3Profile을 사용하도록 구성된 후 Hub 클러스터에서 모든
DRPlacementControl리소스를 삭제해야 합니다.$ oc delete drpc <drpc_name> -n <namespace>참고서브스크립션 기반 애플리케이션의 경우 연결된 DRPlacementControl은 hub 클러스터의 관리 클러스터와 동일한 네임스페이스에서 찾을 수 있습니다. ApplicationSets 기반 애플리케이션의 경우 연결된 DRPlacementControl은 hub 클러스터의
openshift-gitops네임스페이스에서 확인할 수 있습니다.다음 단계를 진행하기 전에 모든 DRPlacementControl 리소스가 삭제되었는지 확인합니다. 이 명령은 모든 네임스페이스에 대한 쿼리입니다. 리소스를 찾을 수 없습니다.
$ oc get drpc -A마지막 단계는 각 애플리케이션 배치를 편집하고
cluster.open-cluster-management.io/experimental-scheduling: "true"주석을 제거하는 것입니다.$ oc edit placement <placement_name> -n <namespace>apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: ## Remove this annotation cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...]
- 남아 있는 클러스터의 모든 보호된 애플리케이션에 대해 마지막 단계에 자세히 설명된 프로세스를 반복합니다. 이제 보호된 애플리케이션에 대한 DR 비활성화가 완료되었습니다.
Hub 클러스터에서 다음 스크립트를 실행하여 남아 있는 클러스터 및 허브 클러스터에서 모든 재해 복구 구성을 제거합니다.
#!/bin/bash secrets=$(oc get secrets -n openshift-operators | grep Opaque | cut -d" " -f1) echo $secrets for secret in $secrets do oc patch -n openshift-operators secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge done mirrorpeers=$(oc get mirrorpeer -o name) echo $mirrorpeers for mp in $mirrorpeers do oc patch $mp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $mp done drpolicies=$(oc get drpolicy -o name) echo $drpolicies for drp in $drpolicies do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done drclusters=$(oc get drcluster -o name) echo $drclusters for drp in $drclusters do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done oc delete project openshift-operators managedclusters=$(oc get managedclusters -o name | cut -d"/" -f2) echo $managedclusters for mc in $managedclusters do secrets=$(oc get secrets -n $mc | grep multicluster.odf.openshift.io/secret-type | cut -d" " -f1) echo $secrets for secret in $secrets do set -x oc patch -n $mc secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge oc delete -n $mc secret/$secret done done oc delete clusterrolebinding spoke-clusterrole-bindings참고이 스크립트는
oc delete project openshift-operators명령을 사용하여 hub 클러스터에서 이 네임스페이스의 Disaster Recovery(DR) Operator를 제거합니다. 이 네임스페이스에 다른 non-DR Operator가 있는 경우 OperatorHub에서 다시 설치해야 합니다.네임스페이스
openshift-operators가 자동으로 생성된 후 재해 복구 메트릭을 수집하기 위해 모니터링 레이블을 다시 추가합니다.$ oc label namespace openshift-operators openshift.io/cluster-monitoring='true'남아 있는 클러스터에서 DR 설치 중에 생성된 오브젝트 버킷이 삭제되었는지 확인합니다. 스크립트에서 제거되지 않은 경우 오브젝트 버킷을 삭제합니다. DR에 사용되는 오브젝트 버킷의 이름은
odrbucket으로 시작됩니다.$ oc get obc -n openshift-storageRHACM 콘솔에서 인프라
클러스터 보기로 이동합니다. - 교체 클러스터를 분리합니다.
- 새 OpenShift 클러스터(복구 클러스터)를 생성하고 새 클러스터를 RHACM 콘솔로 가져옵니다. 자세한 내용은 클러스터 생성 및 대상 관리 클러스터를 허브 클러스터로 가져오기를 참조하십시오.
복구 클러스터에 OpenShift Data Foundation Operator를 설치하고 남은 클러스터와 동일한 외부 Ceph 스토리지 시스템에 연결합니다. 자세한 내용은 외부 모드에서 OpenShift Data Foundation 배포를 참조하십시오.
참고OpenShift Data Foundation 버전이 4.15 이상(또는 그 이상)이고 동일한 OpenShift Data Foundation 버전이 남아 있는 클러스터에 있는지 확인합니다.
- 허브 클러스터에서 OperatorHub에서 ODF Multicluster Orchestrator Operator를 설치합니다. 자세한 내용은 OpenShift Data Foundation Multicluster Orchestrator Operator 설치 장을 참조하십시오.
RHACM 콘솔을 사용하여 Data Services
데이터 정책으로 이동합니다. - Create DRPolicy 를 선택하고 정책 이름을 지정합니다.
- 복구 클러스터 및 남아 있는 클러스터를 선택합니다.
- 정책을 생성합니다. Hub 클러스터에서 재해 복구 정책 생성 장을 참조하십시오.
DRPolicy 상태가
Validated로 변경된 경우에만 다음 단계로 이동합니다.- 교체 클러스터가 실패하기 전에 원래 보호되었던 클러스터의 애플리케이션에 DRPolicy를 적용합니다.
- 남아 있는 클러스터에서 새로 보호된 애플리케이션을 새 복구(기본) 클러스터로 재배치합니다. RHACM 콘솔을 사용하여 애플리케이션 메뉴로 이동하여 재배치를 수행합니다.