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

O Service Fabric é uma plataforma de sistemas distribuídos que facilita o desenvolvimento e o gerenciamento de aplicativos em nuvem confiáveis, distribuídos e baseados em microsserviços. Ele permite a execução de micro serviços sem e com monitoração de estado. Os serviços com estado podem manter um estado mutável e autoritativo além da solicitação e resposta ou de uma transação completa. Se um serviço Stateful ficar inativo por um longo tempo ou perder informações devido a um desastre, talvez seja necessário restaurá-lo para algum backup recente de seu estado para continuar fornecendo o serviço depois que ele voltar.

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 do 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 (Preview) 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.

Habilite 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. Estes passos pressupõem

  • Que o cluster está configurado usando a segurança X.509 com serviço de backup e restauração.
  • Um serviço Stateful confiável é implantado no cluster. Para a finalidade deste 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

A primeira etapa é criar uma política de backup que descreva o agendamento de backup, o armazenamento de destino para dados de backup, o nome da política, o máximo de backups incrementais a serem permitidos antes de acionar a política completa de backup e retenção para 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 carregamento do backup. Preencha com uma cadeia de ConnectionString conexão válida para a conta de Armazenamento do Azure, substituindo account-name pelo nome da conta de armazenamento e account-key pela chave da conta de armazenamento.

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 conta de armazenamento e account-key pela chave da conta de armazenamento.


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container' -Basic -RetentionDuration '10.00:00:00'

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 conta de armazenamento e account-key pela chave da conta de armazenamento.

$StorageInfo = @{
    ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
    ContainerName = 'backup-container'
    StorageKind = 'AzureBlobStore'
}

$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, 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, AzureBlobStore deve ser selecionado.

    Criar Política de Backup do Armazenamento de Blobs 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 modo avançado do Service Fabric Explorer está habilitado

  1. Clique na engrenagem no canto superior direito da janela do SF Explorer.

  2. Marque a caixa para "Modo avançado" e atualize a página SF Explorer.

  3. Selecione um aplicativo e vá para a ação. 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