Observação:

Automatize o Full Stack Disaster Recovery com a CLI do OCI para uma Topologia Stand-by Fria

Introdução

O Oracle Cloud Infrastructure Full Stack Disaster Recovery (Full Stack DR) fornece uma solução de orquestração de recuperação de desastre totalmente automatizada e abrangente para todas as camadas de um aplicativo de nuvem de pilha completa, incluindo infraestrutura, banco de dados e aplicativo. Usando o Full Stack DR, você pode recuperar seus aplicativos de pilha completa em regiões do OCI ou em domínios de disponibilidade dentro da mesma região.

A Oracle Cloud Infrastructure Command Line Interface (CLI do OCI) é uma ferramenta de pequeno porte que você pode usar sozinha ou com a Console do Oracle Cloud para concluir as tarefas do Oracle Cloud Infrastructure (OCI). A CLI (Interface de Linha de Comando) fornece a mesma funcionalidade básica da Console do Oracle Cloud, além de comandos adicionais. Alguns desses comandos, como a capacidade de executar scripts, estendem a funcionalidade da Console.

A CLI é criada no OCI SDK for Python e executada no Mac, Windows ou Linux. O código Python faz chamadas para APIs do Oracle Cloud Infrastructure para fornecer a funcionalidade implementada para os diferentes serviços. Essas são APIs REST que usam solicitações e respostas HTTPS.

Objetivos

Automatize as etapas do Full Stack Disaster Recovery usando a CLI (Interface de Linha de Comando) do OCI para uma topologia do Cold Standby Disaster Recovery.

Observação: Neste exemplo, usaremos FRANKFURT como região Principal e LONDON como região Stand-by.

Arquitetura da Implantação

Arquitetura FSDR

Pré-requisitos

Implementação

Para este tutorial, já criamos os recursos a seguir.

Recursos Região Principal - Frankfurt
Bucket do Armazenamento de Objetos FSDR_storage_primary_test
Compartimento sathish.mahadev
Namespace frrudica1wgd
Instância memberId ocid1.instância.......................
sourceVnicId ocid1.vnic.oc1……………………
Recursos Rio de Janeiro - London
Bucket do Armazenamento de Objetos FSDR_storage_secondary_test
Compartimento sathish.mahadev
Namespace frrudica1wgd

Tarefa 1: Criar Grupos de Proteção de DR na Região Principal e Stand-by

  1. Supõe-se que você tenha instalado a CLI do OCI com base em sua plataforma preferida. Instalamos a CLI do OCI em uma VM do OCI Linux. Defina as credenciais e o perfil do OCI para estabelecer conexão com a região de Frankfurt.

  2. Veja a seguir a sintaxe para criar o grupo de proteção de DR.

    Uso:

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

    Parâmetros Obrigatórios:

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

    Este é um tipo complexo cujo valor deve ser um JSON válido.

  3. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como log-location.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    {
      "bucket": "FSDR_storage_primary_test",
      "namespace": "frrudica1wgd"
    }
    
  4. Use o comando a seguir para criar o grupo de proteção de DR na região de Frankfurt.

    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. Você pode verificar os detalhes do grupo de proteção de DR na região Principal (Frankfurt), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, Recuperação de Desastres e grupo de Proteção de Recuperação de Desastres. O status do grupo de proteção de DR deve ser Ativo.

    CLI_FSDR_Primary

  6. Defina as credenciais e o perfil do OCI para estabelecer conexão com a região de Londres. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como log-sec-location.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    {
      "bucket": "FSDR_storage_secondary_test",
      "namespace": "frrudica1wgd"
    }
    
  7. Use o comando a seguir para criar o grupo de proteção de DR na região de Londres.

    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. Você pode verificar os detalhes do grupo de proteção de DR na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, Recuperação de Desastres, grupo de Proteção de Recuperação de Desastres. O status do grupo de proteção de DR deve ser Ativo.

    CLI_FSDR_Secondry

Tarefa 2: Associar Grupos de Proteção de DR

  1. Veja a seguir a sintaxe para associar os grupos de proteção de DR.

    Uso:

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

    Parâmetros Obrigatórios:

    --dr-protection-group-id [text]
    --role [text]
    --peer-id [text]
    --peer-region [text]
    
  2. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como AssociateDrProtection.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    {
      "peerRegion": "uk-london-1",
      "peerId": "ocid1.drprotectiongroup.oc1.uk................................",
      "role": "PRIMARY"
    }
    
  3. Use o comando a seguir para criar uma associação entre duas regiões.

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

    AssociateDrProtection

    • Região Principal:

      Você pode verificar a associação entre duas regiões na região Principal (Frankfurt), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, grupo Proteção de Recuperação de Desastres. O status do grupo de proteção de DR deve ser Ativo.

      AssociateDrProtection

    • Região Stand-by:

      Você pode verificar a associação entre duas regiões na região Stand-by (Frankfurt) clicando no menu Hambúrguer, vá para Migração e Recuperação de Desastres, grupo Proteção de Recuperação de Desastres. O status do grupo de proteção de DR deve ser Ativo.

      AssociateDrProtection

Tarefa 3: Adicionar membros aos Grupos de Proteção de DR

Pré-requisitos

  1. Veja a seguir a sintaxe para adicionar membros ao grupo de proteção de DR.

    Uso:

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

    Parâmetros Obrigatórios:

    --dr-protection-group-id [text]
    --members
    
  2. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como instance_members.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual no OCI Linux VM.If. Você tem opções avançadas para mover a instância. Adicione as propriedades necessárias.

    Arquivo JSON para adicionar os membros (computação e grupo de volumes) ao grupo de proteção de DR.

    {
      "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. Use o comando a seguir para adicionar membros ao 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. Você pode verificar o status de atualização da solicitação de serviço DRPG na região Principal (Frankfurt), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, Grupo de Proteção de Recuperação de Desastres, Selecionar CLI_FSDR_Primary_test e clicar em Solicitações de serviço.

    AddMembers

  5. Você pode verificar se os recursos do grupo Compute e Volume foram adicionados com sucesso no DRPG da região Principal (Frankfurt), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, grupo de Proteção de Recuperação de Desastres, selecionar CLI_FSDR_Primary_test e clicar em Membros.

    AddMembers

Tarefa 4: Criar Plano de Switchover na região Stand-by

  1. Abaixo está a sintaxe para criar o Plano de Switchover.

    Uso:

    oci disaster-recovery dr-plan create [OPTIONS]
    

    Parâmetros Obrigatórios:

    --dr-protection-group-id [text]
    --display-name [text]
    --type [text]
    
  2. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como CreateDrPlan.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    {
      "drProtectionGroupId": "ocid1.drprotectiongroup...........................",
      "displayName": "My_OCI_DR_Plan",
      "type": "SWITCHOVER"
    }
    
  3. Use o comando a seguir para criar o plano de switchover.

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

    CreateDrPlan

  4. Você pode verificar o Plano de DR na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, CLI_storage_secondary_test e Planos.

    CreateDrPlan

Tarefa 5: Personalizar o Plano de Switchover com grupos de planos definidos pelo usuário

  1. O Full Stack DR permite criar grupos de planos definidos pelo usuário para personalizar os detalhes do DR plans.Get para o plano de DR identificado por drPlanId que criamos na Tarefa 4.

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

    Isso criará um arquivo JSON chamado dr-plan-get.json com o conteúdo a seguir no diretório de trabalho atual na VM do OCI Linux.

    {
      "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. Você pode adicionar grupos e etapas definidos pelo usuário a um plano de DR (Recovery) após o Full Stack DR criar um plano de DR inicial com grupos e etapas incorporados. Você tem a opção de usar as funções de script ou OCI como parte da etapa definida pelo usuário. Para obter mais informações, consulte Grupos de planos definidos pelo Usuário do OCI Full Stack Disaster Recovery. Os grupos de planos definidos pelo usuário podem ser colocados em qualquer lugar no plano de DR após o grupo de planos Pré-verificações Incorporadas. Neste tutorial, adicionaremos nosso grupo de planos definido pelo usuário (CustGroup-Demo) ao final do plano. A etapa usará um script shell simples para criar pastas e arquivos depois que a instância de computação for iniciada na região de Londres.

  3. Atualize o dr-plan-get.json que foi criado na etapa anterior para adicionar um grupo de planos definido pelo usuário com uma etapa no final do conteúdo do arquivo aos grupos de planos existentes e renomeie o arquivo dr-plan-get.json como dr-plan-get_updated.json.

    Finalmente, o arquivo JSON se parece com o seguinte depois de adicionar o novo grupo definido pelo usuário.

     [
         {
             "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. Use o comando para atualizar o plano de DR identificado por drPlanId usando o arquivo dr-plan-get_updated.json recém-atualizado.

    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. Você pode verificar o grupo definido pelo usuário recém-criado na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastre, grupo de Proteção de Recuperação de Desastre, Execuções do plano e My_OCI_DR_Plan.

    userDefinedPlanGroup

Tarefa 6: Executar pré-verificações para o Plano de Switchover na região Stand-by

  1. Abaixo está a sintaxe para executar pré-verificações do Plano de Switchover.

    Uso:

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

    Parâmetros Obrigatórios:

    --plan-id [text]
    
  2. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como PrecheckExecution.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    {
      "displayName": "My_OCI_DR_Plan",
      "planId": "ocid1.drplan.oc1.............................................",
      "executionOptions": {
        "planExecutionType": "SWITCHOVER_PRECHECK"
      }
    }
    
    
  3. Use o comando a seguir para executar pré-verificações para a região Plano de Switchover em Stand-by (Londres).

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

    createSwitchoverPrecheck

  4. Você pode verificar o status de pré-verificação do switchover na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastre, grupo Proteção de Recuperação de Desastre, Executões do plano e Meu Plano de DR do OCI.

    createSwitchoverPrecheck

Tarefa 7: Executar o Plano de Switchover na região Stand-by (Londres)

  1. Abaixo está a sintaxe para executar o Plano de Switchover.

    Uso:

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

    Parâmetros Obrigatórios:

    --plan-id [text]
    
  2. Crie um arquivo JSON com o conteúdo a seguir e nomeie-o como SwitchoverExecution.json. Salve o arquivo no local preferido. Armazenamos o arquivo no diretório de trabalho atual na VM do OCI Linux.

    Arquivo JSON para Associação

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

    Use o comando a seguir para executar o Plano de DR.

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

    DRPlanExecution

    DRPlanExecution

  3. Você pode verificar o status de execução do plano na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, grupo Proteção de Recuperação de Desastres e clicar em Planejar execuções.

    DRPlanExecution

  4. Você pode verificar o status de execução do plano de DR na região Stand-by (Londres), clicar no menu Hambúrguer, ir para Migração e Recuperação de Desastres, grupo de Proteção de Recuperação de Desastres, Planejar execuções e clicar em ExecuteDRplan.

    DRPlanExecution

Próximas Etapas

Você viu como usar comandos da CLI do OCI para criar grupos de proteção de DR, associar, adicionar membros, criar plano de DR, executar pré-verificações e plano de DR. Use a CLI do OCI para executar várias operações de ciclo de vida de DR de pilha completa em escala para seus sistemas de disponibilidade.

Agradecimentos

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.