주:

콜드 대기 토폴로지에 대한 OCI CLI로 전체 스택 재해 복구 자동화

소개

Oracle Cloud Infrastructure Full Stack Disaster Recovery(Full Stack DR)는 인프라, 데이터베이스, 애플리케이션을 포함한 전체 스택 클라우드 애플리케이션의 모든 계층에 대해 완전히 자동화된 종합적인 재해 복구 통합관리 솔루션을 제공합니다. Full Stack DR을 사용하면 OCI 리전 또는 동일한 리전 내 가용성 도메인 전체에서 전체 스택 애플리케이션을 복구할 수 있습니다.

Oracle Cloud Infrastructure 명령행 인터페이스(OCI CLI)는 자체적으로 또는 Oracle Cloud 콘솔을 사용하여 OCI(Oracle Cloud Infrastructure) 작업을 완료하는 데 사용할 수 있는 작은 설치 공간 도구입니다. CLI(명령행 인터페이스)는 Oracle Cloud 콘솔과 동일한 핵심 기능과 추가 명령들을 제공합니다. 스크립트를 실행하는 기능과 같은 일부 기능은 콘솔 기능을 확장합니다.

CLI는 Python용 OCI SDK에 구축되어 Mac, Windows 또는 Linux에서 실행됩니다. Python 코드는 Oracle Cloud Infrastructure API를 호출하여 다양한 서비스에 대해 구현된 기능을 제공합니다. HTTPS 요청 및 응답을 사용하는 REST API입니다.

목표

콜드 대기 재해 복구 토폴로지에 대해 OCI CLI(명령행 인터페이스)를 사용하여 전체 스택 재해 복구 단계를 자동화합니다.

: 이 예에서는 FRANKFURT를 기본 영역으로, LONDON을 대기 영역으로 사용합니다.

배포 아키텍처

FSDR 구조

필요 조건

구현

이 자습서에서는 이미 다음 리소스를 만들었습니다.

리소스 주요 지역 - 프랑크푸르트
오브젝트 스토리지 버킷 FSDR_storage_primary_test
구획 sathish.mahadev
네임스페이스 frrudica1wgd
인스턴스 memberId ocid1.instance.......................
sourceVnicId ocid1.vnic.oc1……………………
리소스 스탠디 지역 - 런던
오브젝트 스토리지 버킷 FSDR_storage_secondary_test
구획 sathish.mahadev
네임스페이스 frrudica1wgd

작업 1: 기본 및 대기 영역에서 DR 보호 그룹 생성

  1. 원하는 플랫폼을 기반으로 OCI CLI를 설치했다고 가정합니다. OCI Linux VM에 OCI CLI가 설치되었습니다. OCI 인증서 및 프로파일을 설정하여 프랑크푸르트 영역에 접속합니다.

  2. 다음은 DR 보호 그룹을 만들기 위한 구문입니다.

    사용법:

    oci disaster-recovery dr-protection-group create [OPTIONS]
    

    필수 매개변수:

    --compartment-id, -c [text]
    --display-name [text]
    --log-location [complex type]
    

    값이 적합한 JSON이어야 하는 복합 유형입니다.

  3. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 log-location.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    {
      "bucket": "FSDR_storage_primary_test",
      "namespace": "frrudica1wgd"
    }
    
  4. 다음 명령을 사용하여 프랑크푸르트 지역에서 DR 보호 그룹을 만듭니다.

    oci disaster-recovery dr-protection-group create --compartment-id ocid1.compartment.oc1............ --display-name CLI_FSDR_Primary_test --log-location file://log-location.json
    

    CLI_FSDR_Primary

  5. 기본 영역(프랑크푸르트)에서 DR 보호 그룹 세부정보를 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, 재해 복구재해 복구 보호 그룹으로 이동할 수 있습니다. DR 보호 그룹의 상태는 Active여야 합니다.

    CLI_FSDR_Primary

  6. OCI 인증서 및 프로파일을 설정하여 런던 지역에 접속합니다. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 log-sec-location.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    {
      "bucket": "FSDR_storage_secondary_test",
      "namespace": "frrudica1wgd"
    }
    
  7. 다음 명령을 사용하여 런던 지역에서 DR 보호 그룹을 만듭니다.

    oci disaster-recovery dr-protection-group create --compartment-id ocid1.compartment.oc1............ --display-name CLI_FSDR_Secondry_test --log-location file://log-sec-location.json
    

    CLI_FSDR_Secondry

  8. 대기 영역(런던)에서 DR 보호 그룹 세부정보를 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, 재해 복구, 재해 복구 보호 그룹으로 이동할 수 있습니다. DR 보호 그룹의 상태는 Active여야 합니다.

    CLI_FSDR_Secondry

작업 2: DR 보호 그룹 연관

  1. 다음은 DR 보호 그룹을 연관시키는 구문입니다.

    사용법:

    oci disaster-recovery dr-protection-group associate [OPTIONS]
    

    필수 매개변수:

    --dr-protection-group-id [text]
    --role [text]
    --peer-id [text]
    --peer-region [text]
    
  2. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 AssociateDrProtection.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    {
      "peerRegion": "uk-london-1",
      "peerId": "ocid1.drprotectiongroup.oc1.uk................................",
      "role": "PRIMARY"
    }
    
  3. 다음 명령을 사용하여 두 영역 간의 연관을 생성합니다.

    oci disaster-recovery dr-protection-group associate --dr-protection-group-id ocid1.drprotectiongroup.oc1............ --from-json file://AssociateDrProtection.json
    

    AssociateDrProtection

    • 기본 영역:

      기본 영역(프랑크푸르트)의 두 영역 간 연관을 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, 재해 복구 보호 그룹으로 이동할 수 있습니다. DR 보호 그룹의 상태는 Active여야 합니다.

      AssociateDrProtection

    • 대기 영역:

      대기 영역(프랑크푸르트)에서 햄버거 메뉴를 눌러 마이그레이션 및 재해 복구, 재해 복구 보호 그룹으로 이동할 수 있습니다. DR 보호 그룹의 상태는 Active여야 합니다.

      AssociateDrProtection

작업 3: DR 보호 그룹에 구성원 추가

사전 요구 사항

  1. 다음은 DR 보호 그룹에 멤버를 추가하는 구문입니다.

    사용법:

    oci disaster-recovery dr-protection-group update [OPTIONS]
    

    필수 매개변수:

    --dr-protection-group-id [text]
    --members
    
  2. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 instance_members.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM.If의 현재 작업 디렉토리에 파일을 저장했습니다. 인스턴스 이동에 필요한 속성을 추가할 수 있는 고급 옵션이 있습니다.

    DR 보호 그룹에 멤버(컴퓨트 및 볼륨 그룹)를 추가하는 JSON 파일입니다.

    {
      "displayName": "CLI_FSDR_Primary",
            "members": [
          {
            "memberId": "ocid1.instance.oc1....................................",
            "memberType": "COMPUTE_INSTANCE",
            "isMovable": true,
            "vnicMapping": [
              {
                "sourceVnicId": "ocid1.vnic.oc1................................",
                "destinationSubnetId": "ocid1.subnet.oc1........................"
    
            }
          ],
          "destinationCompartmentId": "ocid1.compartment.oc1...................."
            },
    
        {
          "memberId": "ocid1.volumegroup.oc1...................................",
          "memberType": "VOLUME_GROUP"
            }],
    
            "logLocation": {
            "bucket": "FSDR_storage_primary",
            "namespace": "frrudixxxxx"
            }
    }
    
  3. 다음 명령을 사용하여 DRPG에 멤버를 추가합니다.

    oci disaster-recovery dr-protection-group update --dr-protection-group-id ocid1.drprotectiongroup.oc1..................................... --from-json file://instance_members.json --force --debug
    

    AddMembers

  4. 기본 영역(프랑크푸르트)에서 DRPG 작업 요청 상태 업데이트를 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, 재해 복구 보호 그룹으로 이동하고 CLI_FSDR_Primary_test을 선택한 후 작업 요청을 누릅니다.

    AddMembers

  5. 컴퓨트 및 볼륨 그룹 리소스가 기본 영역(프랑크푸르트) DRPG에 성공적으로 추가되었는지 확인하고, 햄버거 메뉴를 누르고, 마이그레이션 및 재해 복구, 재해 복구 보호 그룹으로 이동하여 CLI_FSDR_Primary_test을 선택하고, 멤버를 누를 수 있습니다.

    AddMembers

작업 4: Standby 영역에 Switchover Plan 생성

  1. 다음은 Switchover Plan을 생성하는 구문입니다.

    사용법:

    oci disaster-recovery dr-plan create [OPTIONS]
    

    필수 매개변수:

    --dr-protection-group-id [text]
    --display-name [text]
    --type [text]
    
  2. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 CreateDrPlan.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    {
      "drProtectionGroupId": "ocid1.drprotectiongroup...........................",
      "displayName": "My_OCI_DR_Plan",
      "type": "SWITCHOVER"
    }
    
  3. 다음 명령을 사용하여 switchover 계획을 생성합니다.

    oci disaster-recovery dr-plan create --dr-protection-group-id ocid1.drprotectiongroup.oc1..................................... --from-json file://CreateDrPlan.json
    

    CreateDrPlan

  4. 대기 영역(런던)에서 DR 계획을 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, CLI_storage_secondary_test계획으로 이동할 수 있습니다.

    CreateDrPlan

작업 5: 사용자 정의 계획 그룹으로 전환 계획 사용자 정의

  1. 전체 스택 DR을 사용하면 사용자 정의 계획 그룹을 생성하여 작업 4에서 만든 drPlanId로 식별된 DR 계획에 대한 DR plans.Get 세부정보를 사용자정의할 수 있습니다.

    oci disaster-recovery dr-plan get --dr-plan-id ocid1.drplan.oc1......... > dr-plan-get.json
    

    그러면 OCI Linux VM의 현재 작업 디렉토리에 다음 콘텐츠가 포함된 dr-plan-get.json라는 JSON 파일이 생성됩니다.

    {
      "data": {
        "compartment-id": "ocid1.compartment.oc1................................",
        "defined-tags": {
          "Oracle-Tags": {
            "CreatedBy": "oracleidentitycloudservice/sathish.mahadev@oracle.com",
            "CreatedOn": "2023-11-23T09:22:09.222Z"
          }
        },
        "display-name": "My OCI DR Plan",
        "dr-protection-group-id": "ocid1.drprotectiongroup.oc1.................",
        "freeform-tags": {},
        "id": "ocid1.drplan.oc1.eu-frankfurt-1.aaaaaaaacmfg3v..................",
        "life-cycle-details": null,
        "lifecycle-state": "ACTIVE",
        "peer-dr-protection-group-id": "ocid1.drprotectiongroup.oc1............",
        "peer-region": "uk-london-1",
        "plan-groups": [
          {
            "display-name": "Built-In Prechecks",
            "id": "sgid1.group..AwplAFAmPMSjruIpY8m2cw4v.......................",
            "steps": [
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..AwplAFAmPMvn4IpY8m...................",
                "id": "sgid1.step..PO9O2GisLb05WkUKebi4Hofc0...................",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1.uk-london-1...................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_LAUNCH_PRECHECK",
                "user-defined-step": null
              },
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..AwplAFAmPMSjrPIH1zlApY...............",
                "id": "sgid1.step..IwKsQfyM6w78JcvklS2JulU2GdH6l...............",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1.uk-london-1.anw...............",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_REMOVE_PRECHECK",
                "user-defined-step": null
              },
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..AwplAFAmPMm2cw4v.....................",
                "id": "sgid1.step..XASO1rLLQkrsOUPN............................",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1...............................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_STOP_PRECHECK",
                "user-defined-step": null
              },
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..AwplAFAmpY8m2cw4v....................",
                "id": "sgid1.step..VcHYP3vKNNTrg0gMYuw.........................",
                "is-enabled": true,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "UNKNOWN_ENUM_VALUE",
                "user-defined-step": null
              },
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..AwplAFAmPY8m2cw4v....................",
                "id": "sgid1.step..wRdVq2t2d9It8P5TT2CvpMN7sy496o..............",
                "is-enabled": true,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "VOLUME_GROUP_RESTORE_SWITCHOVER_PRECHECK",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN_PRECHECK"
          },
          {
            "display-name": "Stop Compute Instances",
            "id": "sgid1.group..XEqWbSZn72MsIKfPAPh2cdBah9.....................",
            "steps": [
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..XEqWbSZn72MsIKfP.....................",
                "id": "sgid1.step..GhvhuUwDXmyqaJe15ZrFc7......................",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1...............................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_STOP",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Switchover Volume Groups",
            "id": "sgid1.group..32adaPzUEQ7aH1uDWQ5VM1j........................",
            "steps": [
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..32adaPzUEQ7aH........................",
                "id": "sgid1.step..ef9UNZtJ1rZIbAmW7aZK........................",
                "is-enabled": true,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "VOLUME_GROUP_RESTORE_SWITCHOVER",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Launch Compute Instances",
            "id": "sgid1.group..5hcYKKlYTRiBwIDJcbt............................",
            "steps": [
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..5hcYKKlYT............................",
                "id": "sgid1.step..woJnsXF5wTpY3uf6M...........................",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1...............................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_LAUNCH",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Reverse Volume Groups' Replication",
            "id": "sgid1.group..zPThgbBHnakEowbozz57EWGg.......................",
            "steps": [
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..zPThgbBHnakEo........................",
                "id": "sgid1.step..w5n1aGHFGCCWGtkfbm9U........................",
                "is-enabled": true,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "VOLUME_GROUP_REVERSE",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Terminate Compute Instances",
            "id": "sgid1.group..dfo08HuDTUIdkpt5l..............................",
            "steps": [
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..dfo08H...............................",
                "id": "sgid1.step..7SMxaezWR5lYX...............................",
                "is-enabled": false,
                "member-id": "ocid1.instance.oc1...............................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_TERMINATE",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Remove Compute Instances from DR Protection Group",
            "id": "sgid1.group..pOeXUaXGLb1uhTQRwSJEB4.........................",
            "steps": [
              {
                "display-name": "drtestwls-bastion-instance",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..pOeXUaXGLb1uhT.......................",
                "id": "sgid1.step..WilcZMUCDF42M0dhABNy........................",
                "is-enabled": true,
                "member-id": "ocid1.instance.oc1...............................",
                "timeout": 3600,
                "type": "COMPUTE_INSTANCE_REMOVE",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Terminate Volume Groups",
            "id": "sgid1.group..FfcGwUBiibLFaYFfcnmHv2Q591.....................",
            "steps": [
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..FfcGwUBiibLFaY.......................",
                "id": "sgid1.step..wipkZ4tXRQaIxJ0bAWzOI.......................",
                "is-enabled": false,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "VOLUME_GROUP_TERMINATE",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          },
          {
            "display-name": "Remove Volume Groups from DR Protection Group",
            "id": "sgid1.group..RWQ1nwbf6JkIir5vMOgz0frx.......................",
            "steps": [
              {
                "display-name": "fsdr_volume_group_test",
                "error-mode": "STOP_ON_ERROR",
                "group-id": "sgid1.group..RWQ1nwbf6JkIir.......................",
                "id": "sgid1.step..7bPFQyPkxXU4zaywzFNfp.......................",
                "is-enabled": true,
                "member-id": "ocid1.volumegroup.oc1............................",
                "timeout": 3600,
                "type": "VOLUME_GROUP_REMOVE",
                "user-defined-step": null
              }
            ],
            "type": "BUILT_IN"
          }
        ],
        "system-tags": {},
        "time-created": "2023-11-23T09:22:09.690000+00:00",
        "time-updated": "2023-11-24T06:25:43.748000+00:00",
        "type": "SWITCHOVER"
      },
      "etag": "b73b71668a7f52474c4c7df9c779d9c7aae77c27109be--gzip"
    }
    
    
  2. 전체 스택 DR이 내장된 그룹 및 단계를 사용하여 초기 DR 계획을 만든 후 DR(재해 복구) 계획에 사용자 정의 그룹 및 단계를 추가할 수 있습니다. 스크립트 또는 OCI 함수를 사용자 정의 단계의 일부로 사용할 수 있습니다. 자세한 내용은 OCI 전체 스택 재해 복구 사용자 정의 계획 그룹을 참조하십시오. 사용자 정의 계획 그룹은 내장 사전 검사 계획 그룹 이후 DR 계획의 어디에나 배치할 수 있습니다. 이 자습서에서는 사용자 정의 계획 그룹(CustGroup-Demo)을 추가하여 계획의 끝을 추가합니다. 이 단계에서는 간단한 셸 스크립트를 사용하여 컴퓨트 인스턴스가 런던 지역에서 실행된 후 폴더 및 파일을 생성합니다.

  3. 이전 단계에서 생성된 dr-plan-get.json를 업데이트하여 파일 콘텐츠 끝에 있는 단계를 가진 사용자 정의 계획 그룹을 기존 계획 그룹에 추가하고 dr-plan-get.json 파일의 이름을 dr-plan-get_updated.json로 바꿉니다.

    마지막으로 JSON 파일은 새 사용자 정의 그룹을 추가한 후 아래와 같습니다.

     [
         {
             "display-name": "Built-In Prechecks",
             "id": "sgid1.group..AwplAFAmPMSjrPIH1zlAIqu....................",
             "steps": [
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..AwplAFAmP....................",
                     "id": "sgid1.step..PO9O2GisLb05WkUKeb..................",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_LAUNCH_PRECHECK",
                     "user-defined-step": null
                 },
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..AwplAFAmPMSj.................",
                     "id": "sgid1.step..IwKsQfyM6w78JcvklS2.................",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_REMOVE_PRECHECK",
                     "user-defined-step": null
                 },
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..AwplAFAmPMSjrP...............",
                     "id": "sgid1.step..XASO1rLLQk2GfJjKYlOf5...............",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_STOP_PRECHECK",
                     "user-defined-step": null
                 },
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..AwplAFAmPMSjrP...............",
                     "id": "sgid1.step..VcHYP3vKNNTr6Ha5CB..................",
                     "is-enabled": true,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "UNKNOWN_ENUM_VALUE",
                     "user-defined-step": null
                 },
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..AwplAFAmPM...................",
                     "id": "sgid1.step..wRdVq2..............................",
                     "is-enabled": true,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "VOLUME_GROUP_RESTORE_SWITCHOVER_PRECHECK",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN_PRECHECK"
         },
         {
             "display-name": "Stop Compute Instances",
             "id": "sgid1.group..XEqWbSZn72MsIKfPAPh2cdBah9F1rW.............",
             "steps": [
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..XEqWbSZn72Ms.................",
                     "id": "sgid1.step..GhvhuUwDXmyqaJe1....................",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_STOP",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Switchover Volume Groups",
             "id": "sgid1.group..32adaPzUEQ7aH1uDWQ5VM......................",
             "steps": [
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..32adaPzUEQ7aH1uD.............",
                     "id": "sgid1.step..ef9UNZtJ1rZ.........................",
                     "is-enabled": true,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "VOLUME_GROUP_RESTORE_SWITCHOVER",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Launch Compute Instances",
             "id": "sgid1.group..5hcYKKlYTRiBwIDJcbt3mxvA...................",
             "steps": [
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..5hcYKKlYTRi..................",
                     "id": "sgid1.step..woJnsXF5wTpY3.......................",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_LAUNCH",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Reverse Volume Groups' Replication",
             "id": "sgid1.group..zPThgbBHnakEowbozz57EW4vAdM9O",
             "steps": [
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..zPThgbBH.....................",
                     "id": "sgid1.step..w5n1aGHFGCCWGtk.....................",
                     "is-enabled": true,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "VOLUME_GROUP_REVERSE",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Terminate Compute Instances",
             "id": "sgid1.group..dfo08HuDTUIdkpt5loA5zB.....................",
             "steps": [
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..dfo08HuDTUIdkpt5lo...........",
                     "id": "sgid1.step..7SMxaezWR5lYXQ......................",
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_TERMINATE",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Remove Compute Instances from DR Protection Group",
             "id": "sgid1.group..pOeXUaXGLb1uhTQRwSJEB4Yw...................",
             "steps": [
                 {
                     "display-name": "drtestwls-bastion-instance",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..pOeXUaXGLb1..................",
                     "id": "sgid1.step..WilcZMUCDF42M0dhAB..................",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "COMPUTE_INSTANCE_REMOVE",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Terminate Volume Groups",
             "id": "sgid1.group..FfcGwUBiibLFaYZvHEUmQRDSd..................",
             "steps": [
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..FfcGwUBiibLFaYFfcnmH.........",
                     "id": "sgid1.step..wipkZ4tXRQaIxJ0bAWzOINqf............",
                     "is-enabled": false,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "VOLUME_GROUP_TERMINATE",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "Remove Volume Groups from DR Protection Group",
             "id": "sgid1.group..RWQ1nwbf6JkIir5vMOgz0Eti...................",
             "steps": [
                 {
                     "display-name": "fsdr_volume_group_test",
                     "error-mode": "STOP_ON_ERROR",
                     "group-id": "sgid1.group..RWQ1nwbf6JkIir...............",
                     "id": "sgid1.step..7bPFQyPkxXU4zaywzFN.................",
                     "is-enabled": true,
                     "member-id": "ocid1.volumegroup.oc1....................",
                     "timeout": 3600,
                     "type": "VOLUME_GROUP_REMOVE",
                     "user-defined-step": null
                 }
             ],
             "type": "BUILT_IN"
         },
         {
             "display-name": "CustGroup-Demo",
             "steps": [
                 {
                     "display-name": "Create Folder and Files under /home/opc",
                     "error-mode": "CONTINUE_ON_ERROR",
                     "is-enabled": true,
                     "member-id": "ocid1.instance.oc1.......................",
                     "timeout": 3600,
                     "type": "USER_DEFINED",
                     "user-defined-step": {
                         "run-as-user": "opc",
                         "run-on-instance-id": "ocid1.instance.oc1..........",
                         "run-on-instance-region": "uk-london-1",
                         "script-command": "/home/opc/scripts/testCommand.sh",
                         "step-type": "RUN_LOCAL_SCRIPT"
                     }
                 }
             ],
             "type": "USER_DEFINED"
         }
     ]
    
    
  4. 새로 업데이트된 dr-plan-get_updated.json 파일을 사용하여 drPlanId로 식별된 DR 계획을 업데이트하는 명령을 사용합니다.

    oci disaster-recovery dr-plan update --dr-plan-id ocid1.drplan.oc1.eu-frankfurt-1.aaaajfq --from-json file://dr-plan-get_updated.json --debug
    
  5. 대기 영역(런던)에서 새로 생성된 사용자 정의 그룹을 확인하고 햄버거 메뉴를 누른 다음 이전 및 재해 복구, 재해 복구 보호 그룹, 계획 실행My_OCI_DR_Plan으로 이동할 수 있습니다.

    userDefinedPlanGroup

작업 6: Standby 영역에서 Switchover Plan에 대한 사전 검사 실행

  1. 다음은 Switchover Plan에 대한 사전 검사를 실행하는 구문입니다.

    사용법:

    oci disaster-recovery dr-plan-execution create-switchover-precheck [OPTIONS]
    

    필수 매개변수:

    --plan-id [text]
    
  2. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 PrecheckExecution.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    {
      "displayName": "My_OCI_DR_Plan",
      "planId": "ocid1.drplan.oc1.............................................",
      "executionOptions": {
        "planExecutionType": "SWITCHOVER_PRECHECK"
      }
    }
    
    
  3. 다음 명령을 사용하여 Switchover Plan on Standby 영역(London)에 대한 사전 검사를 실행합니다.

    oci disaster-recovery dr-plan-execution create-switchover-precheck --from-json file://PrecheckExecution.json --debug
    

    createSwitchoverPrecheck

  4. 대기 영역(런던)에서 전환 사전 검사 상태를 확인하고, 햄버거 메뉴를 누르고, 이전 및 재해 복구, 재해 복구 보호 그룹, 계획 실행내 OCI DR 계획으로 이동할 수 있습니다.

    createSwitchoverPrecheck

작업 7: Standby 영역(런던)에서 Switchover Plan 실행

  1. 다음은 Switchover Plan을 실행하기 위한 구문입니다.

    사용법:

    oci disaster-recovery dr-plan-execution create-switchover [OPTIONS]
    

    필수 매개변수:

    --plan-id [text]
    
  2. 다음 콘텐츠가 포함된 JSON 파일을 생성하고 이름을 SwitchoverExecution.json로 지정합니다. 원하는 위치에 파일을 저장합니다. OCI Linux VM의 현재 작업 디렉토리에 파일을 저장했습니다.

    연계에 대한 JSON 파일

    {
      "displayName": "executeDRplan",
      "planId": "ocid1.drplan.oc1.............................................",
      "executionOptions": {
        "planExecutionType": "SWITCHOVER"
      }
    }
    

    다음 명령을 사용하여 DR 계획을 실행합니다.

    oci disaster-recovery dr-plan-execution create --from-json file://SwitchoverExecution.json --debug
    

    DRPlanExecution

    DRPlanExecution

  3. 대기 영역(런던)에서 계획 실행 상태를 확인하고 햄버거 메뉴를 누른 다음 이전 및 재해 복구, 재해 복구 보호 그룹으로 이동하고 계획 실행을 누를 수 있습니다.

    DRPlanExecution

  4. 대기 영역(런던)에서 DR 계획 실행 상태를 확인하고 햄버거 메뉴를 누른 다음 마이그레이션 및 재해 복구, 재해 복구 보호 그룹, 계획 실행으로 이동하여 ExecuteDRplan을 누를 수 있습니다.

    DRPlanExecution

다음 단계

OCI CLI 명령을 사용하여 DR 보호 그룹을 생성하고, 멤버를 연결 및 추가하고, DR 계획을 생성하고, 사전 검사 및 DR 계획을 실행하는 방법을 배웠습니다. OCI CLI를 사용하면 구매 시스템에 대해 다양한 전체 스택 DR 수명 주기 작업을 대규모로 수행할 수 있습니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.