Partilhar via


Cópia de segurança e restauro periódicos num cluster do Azure Service Fabric

O Service Fabric é uma plataforma para desenvolver e gerenciar aplicativos de nuvem confiáveis e distribuídos. Ele suporta microsserviços sem estado e com monitoração de estado. Os serviços com estado podem manter dados importantes além de uma única solicitação ou transação. Se um serviço com monitoração de estado ficar inativo ou perder dados, talvez seja necessário restaurá-lo a partir de um backup recente para continuar funcionando corretamente.

O Service Fabric replica o estado em vários nós para garantir que o serviço esteja altamente disponível. Mesmo que um nó no cluster falhe, o serviço continua disponível. Em certos casos, no entanto, ainda é desejável que os dados de serviço sejam confiáveis contra falhas mais amplas.

Por exemplo, o serviço pode querer fazer backup de seus dados para se proteger dos seguintes cenários:

  • No caso da perda permanente de um cluster inteiro do Service Fabric.
  • Perda permanente da maioria das réplicas de uma partição de serviço
  • Erros administrativos em que o estado acidentalmente é excluído ou corrompido. Por exemplo, um administrador com privilégio suficiente exclui erroneamente o serviço.
  • Bugs no serviço que causam corrupção de dados. Por exemplo, isso pode acontecer quando uma atualização de código de serviço começa a gravar dados defeituosos em uma Coleção Confiável. Nesse caso, tanto o código como os dados podem ter de ser revertidos para um estado anterior.
  • Processamento de dados offline. Pode ser conveniente ter processamento offline de dados para business intelligence que acontece separadamente do serviço que gera os dados.

O Service Fabric fornece uma API integrada para fazer backup e restauração point-in-time. Os desenvolvedores de aplicativos podem usar essas APIs para fazer backup do estado do serviço periodicamente. Além disso, se os administradores de serviço quiserem acionar um backup de fora do serviço em um momento específico, como antes de atualizar o aplicativo, os desenvolvedores precisarão expor o backup (e a restauração) como uma API do serviço. A manutenção dos backups é um custo adicional acima disso. Por exemplo, você pode querer fazer cinco backups incrementais a cada meia hora, seguidos por um backup completo. Após o backup completo, você pode excluir os backups incrementais anteriores. Essa abordagem requer código adicional que leva a um custo adicional durante o desenvolvimento do aplicativo.

O serviço de Backup e Restauração no Service Fabric permite o backup fácil e automático de informações armazenadas em serviços com monitoração de estado. O backup periódico de dados de aplicativos é fundamental para evitar perda de dados e indisponibilidade de serviços. O Service Fabric fornece um serviço opcional de backup e restauração, que permite configurar o backup periódico dos Serviços Confiáveis com monitoração de estado (incluindo os Serviços do Ator) sem precisar escrever nenhum código adicional. Também facilita a restauração de backups feitos anteriormente.

O Service Fabric fornece um conjunto de APIs para obter a seguinte funcionalidade relacionada ao recurso de backup e restauração periódicos:

  • Agende backup periódico de serviços Reliable Stateful e Reliable Actors com suporte para carregar backup em locais de armazenamento (externos). Locais de armazenamento suportados
    • Armazenamento do Azure
    • Partilha de ficheiros (no local)
  • Enumerar backups
  • Acionar um backup ad hoc de uma partição
  • Restaurar uma partição usando o backup anterior
  • Suspender temporariamente os backups
  • Gerenciamento de retenção de backups (futuro)

Pré-requisitos

  • Cluster do Service Fabric com malha versão 6.4 ou superior. Consulte este artigo para conhecer as etapas para criar um cluster do Service Fabric usando o modelo de recurso do Azure.
  • X.509 Certificado para criptografia de segredos necessários para se conectar ao armazenamento para armazenar backups. Consulte o artigo para saber como obter ou criar um certificado X.509.
  • Aplicativo Stateful confiável do Service Fabric criado usando o SDK do Service Fabric versão 3.0 ou superior. Para aplicativos destinados ao .NET Core 2.0, o aplicativo deve ser criado usando o SDK do Service Fabric versão 3.1 ou superior.
  • Crie uma conta de Armazenamento do Azure para armazenar backups de aplicativos.
  • Instale o módulo Microsoft.ServiceFabric.Powershell.Http para fazer chamadas de configuração.

    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Nota

Se sua versão do PowerShellGet for menor que 1.6.0, você precisará atualizar para adicionar suporte para o sinalizador -AllowPrerelease :

Install-Module -Name PowerShellGet -Force

  • Verifique se o Cluster está conectado usando o comando antes de fazer qualquer solicitação de configuração usando o Connect-SFCluster módulo Microsoft.ServiceFabric.Powershell.Http.

    Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080'   -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Habilitando o serviço de backup e restauração

Através do portal do Azure

Ativar Include backup restore service caixa de seleção em + Show optional settings Cluster Configuration na guia.

Ativar o Serviço de Restauração de Backup com o Portal

Usando o modelo do Azure Resource Manager

Primeiro, você precisa habilitar o serviço de backup e restauração em seu cluster. Obtenha o modelo para o cluster que você deseja implantar. Você pode usar os modelos de exemplo ou criar um modelo do Gerenciador de Recursos. Habilite o serviço de backup e restauração com as seguintes etapas:

  1. Verifique se o apiversion está definido como 2018-02-01 para o Microsoft.ServiceFabric/clusters recurso e, se não, atualize-o conforme mostrado no seguinte trecho:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Agora, habilite o serviço de backup e restauração adicionando a seguinte addonFeatures seção na properties seção, conforme mostrado no seguinte trecho:

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Configure o certificado X.509 para criptografia de credenciais. Isso é importante para garantir que as credenciais fornecidas para se conectar ao armazenamento sejam criptografadas antes de persistir. Configure o certificado de criptografia adicionando a seguinte BackupRestoreService seção na fabricSettings seção abaixo, conforme mostrado no seguinte trecho:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [
        {
            "name": "BackupRestoreService",
            "parameters": [
                {
                    "name": "SecretEncryptionCertThumbprint",
                    "value": "[Thumbprint]"
                },
                {
                    "name": "SecretEncryptionCertX509StoreName",
                    "value": "My"
                }
            ]
        }]
        ...
    }
    

    Nota

    [Impressão digital] precisa ser substituída por impressão digital de certificado válida para ser usada para criptografia.

  4. Depois de atualizar seu modelo de cluster com as alterações anteriores, aplique-as e deixe a implantação/atualização concluída. Depois de concluído, o serviço de backup e restauração começa a ser executado no cluster. O Uri deste serviço é fabric:/System/BackupRestoreService e o serviço pode ser localizado na seção de serviço do sistema no explorador do Service Fabric.

Habilitando o backup periódico para serviços confiáveis com estado e atores confiáveis

Vamos percorrer as etapas para habilitar o backup periódico para o serviço Reliable Stateful e Reliable Actors. Estas etapas pressupõem que

  • O cluster é configurado usando segurança X.509 com serviço de backup e restauração.
  • Um serviço Stateful confiável é implantado no cluster. Para este guia de início rápido, o Uri do aplicativo é fabric:/SampleApp e o Uri para serviço Stateful confiável pertencente a este aplicativo é fabric:/SampleApp/MyStatefulService. Este serviço é implantado com uma única partição e o ID da partição é 974bd92a-b395-4631-8a7f-53bd4ae9cf22.
  • O certificado de cliente com função de administrador é instalado em Meu nome de armazenamento (Pessoal) do local de armazenamento de certificados CurrentUser na máquina de onde os scripts abaixo serão invocados. Este exemplo usa 1b7ebe2174649c45474a4819dafae956712c31d3 como impressão digital deste certificado. Para obter mais informações sobre certificados de cliente, consulte Controle de acesso baseado em função para clientes do Service Fabric.

Criar política de cópia de segurança

O primeiro passo é criar uma política de backup. Essa política deve incluir o agendamento de backup, o armazenamento de destino para os dados de backup, o nome da política, o número máximo de backups incrementais permitidos antes que um backup completo seja acionado e a política de retenção para o armazenamento de backup.

Para armazenamento de backup, use a conta de Armazenamento do Azure criada acima. O contêiner backup-container está configurado para armazenar backups. Um contêiner com esse nome é criado, se ainda não existir, durante o upload do backup. Preencha BlobServiceUri com a URL da conta de Armazenamento do Azure substituindo account-name pelo nome da sua conta de armazenamento e preencha o parâmetro ManagedIdentityClientId opcional com ID do Cliente da Identidade Gerenciada Atribuída pelo Usuário se houver várias identidades gerenciadas atribuídas ao seu recurso.

Siga as etapas para atribuição de identidade gerenciada no recurso do Azure:

  1. Habilitar a identidade gerenciada atribuída ao sistema ou ao usuário nos Conjuntos de Dimensionamento de Máquina Virtual Configurar identidades gerenciadas no conjunto de dimensionamento de máquina virtual

  2. Atribuir função à escala da máquina virtual Define identidade gerenciada à conta de armazenamento Atribuir funções do Azure usando o portal do Azure - Azure RBAC

    1. Função de Colaborador de Dados de Blob de Armazenamento no mínimo

Para obter mais informações sobre Identidade Gerenciada

PowerShell usando o módulo Microsoft.ServiceFabric.Powershell.Http

Execute os seguintes cmdlets do PowerShell para criar uma nova política de backup. Substitua account-name pelo nome da sua conta de armazenamento.


    New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $false -MaxIncrementalBackups 20 -FrequencyBased -Interval "<hh:mm>" -ManagedIdentityAzureBlobStore -FriendlyName "AzureMI_storagesample" -BlobServiceUri 'https://<account-name>.blob.core.windows.net' -ContainerName 'backup-container' -ManagedIdentityType "VMSS" -ManagedIdentityClientId "<Client-Id of User-Assigned MI>" -Basic -RetentionDuration '10.00:00:00'

    # Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.

Chamada de repouso usando o PowerShell

Execute o seguinte script do PowerShell para invocar a API REST necessária para criar uma nova política. Substitua account-name pelo nome da sua conta de armazenamento.

$StorageInfo = @{
    StorageKind = "ManagedIdentityAzureBlobStore"
    FriendlyName = "AzureMI_storagesample"
    BlobServiceUri = "https://<account-name>.blob.core.windows.net"
    ContainerName = "backup-container"
    ManagedIdentityType = "VMSS"
    ManagedIdentityClientId = "<Client-Id of User-Assigned MI>" # Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.
}

$ScheduleInfo = @{
    Interval = 'PT15M'
    ScheduleKind = 'FrequencyBased'
}

$RetentionPolicy = @{
    RetentionPolicyType = 'Basic'
    RetentionDuration = 'P10D'
}

$BackupPolicy = @{
    Name = 'BackupPolicy1'
    MaxIncrementalBackups = 20
    Schedule = $ScheduleInfo
    Storage = $StorageInfo
    RetentionPolicy = $RetentionPolicy
}

$body = (ConvertTo-Json $BackupPolicy)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Usando o Service Fabric Explorer

  1. No Service Fabric Explorer, clique em Cluster no painel esquerdo, navegue até a guia Backups e selecione Ações > Criar Política de Backup.

    Criar política de backup

  2. Preencha as informações. Para obter detalhes sobre como especificar um intervalo baseado em frequência, consulte a propriedade TimeGrain. Para clusters do Azure, ManagedIdentityAzureBlobStore deve ser selecionado.

    Criar Política de Backup Identidade Gerenciada Armazenamento de Blob do Azure

Habilitar backup periódico

Depois de definir a política de backup para atender aos requisitos de proteção de dados do aplicativo, a política de backup deve ser associada ao aplicativo. Dependendo do requisito, a política de backup pode ser associada a um aplicativo, serviço ou partição.

PowerShell usando o módulo Microsoft.ServiceFabric.Powershell.Http


    Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'

Chamada de repouso usando o PowerShell

Execute o seguinte script do PowerShell para invocar a API REST necessária para associar a política de backup ao nome BackupPolicy1 criado na etapa acima com o aplicativo SampleApp.

$BackupPolicyReference = @{
    BackupPolicyName = 'BackupPolicy1'
}

$body = (ConvertTo-Json $BackupPolicyReference)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Usando o Service Fabric Explorer

Verifique se o BackupRestoreService está habilitado no cluster.

  1. Abra o Service Fabric Explorer.

  2. Selecione um aplicativo e vá para a seção Backup. Clique em Ação de backup.

  3. Clique em Ativar/Atualizar Backup de Aplicativo.

    Habilitar backup de aplicativos

  4. Por fim, selecione a política desejada e clique em Ativar backup.

    Selecionar Política

Verifique se os backups periódicos estão funcionando

Depois de habilitar o backup no nível do aplicativo, todas as partições pertencentes a serviços Reliable Stateful e Reliable Actors sob o aplicativo começarão a receber backup periodicamente de acordo com a política de backup associada.

Evento de integridade de backup de partição

Listar backups

Os backups associados a todas as partições pertencentes a serviços Reliable Stateful e Reliable Actors do aplicativo podem ser enumerados usando a API GetBackups . Os backups podem ser enumerados para um aplicativo, serviço ou uma partição.

PowerShell usando o módulo Microsoft.ServiceFabric.Powershell.Http


Get-SFApplicationBackupList -ApplicationId WordCount

Chamada de repouso usando o PowerShell

Execute o seguinte script do PowerShell para invocar a API HTTP para enumerar os backups criados para todas as partições dentro do SampleApp aplicativo.

$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"

$response = Invoke-WebRequest -Uri $url -Method Get -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items

Saída de exemplo para a execução acima:

BackupId                : b9577400-1131-4f88-b309-2bb1e943322c
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 20.55.16.zip
BackupType              : Full
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3334
CreationTimeUtc         : 2018-04-06T20:55:16Z
FailureError            :

BackupId                : b0035075-b327-41a5-a58f-3ea94b68faa4
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3552
CreationTimeUtc         : 2018-04-06T21:10:27Z
FailureError            :

BackupId                : 69436834-c810-4163-9386-a7a800f78359
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.25.36.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3764
CreationTimeUtc         : 2018-04-06T21:25:36Z
FailureError            :

Usando o Service Fabric Explorer

Para exibir backups no Service Fabric Explorer, navegue até uma partição e selecione a guia Backups.

Enumerar backups

Limitação/advertências

  • Os cmdlets do PowerShell do Service Fabric estão no modo de visualização.
  • Não há suporte para clusters do Service Fabric no Linux.

Próximos passos