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 a gestão de aplicações na cloud fiáveis, distribuídas e baseadas em microsserviços. Permite a execução de micros serviços sem estado e com estado. Os serviços com estado podem manter um estado mutável e autoritativo para além do pedido e da resposta ou de uma transação completa. Se um serviço Com Estado ficar inativo durante muito tempo ou perder informações devido a um desastre, poderá ter de ser restaurado para alguma cópia de segurança recente do estado para continuar a prestar serviço após a cópia de segurança.

O Service Fabric replica o estado em vários nós para garantir que o serviço está altamente disponível. Mesmo que um nó no cluster falhe, o serviço continua disponível. No entanto, em determinados casos, continua a ser desejável que os dados de serviço sejam fiáveis face a falhas mais amplas.

Por exemplo, o serviço pode querer fazer uma cópia de segurança dos respetivos dados para proteger contra os seguintes cenários:

  • Em caso de perda permanente de um cluster completo do Service Fabric.
  • Perda permanente de uma maioria das réplicas de uma partição de serviço
  • Erros administrativos em que o estado é eliminado ou danificado acidentalmente. Por exemplo, um administrador com privilégios suficientes elimina erroneamente o serviço.
  • Erros no serviço que causam danos nos dados. Por exemplo, isto pode acontecer quando uma atualização do código de serviço começa a escrever dados com falhas numa Coleção Fiá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 o processamento offline de dados para business intelligence que ocorre separadamente do serviço que gera os dados.

O Service Fabric fornece uma API incorporada para fazer cópias de segurança e restauro para um ponto anterior no tempo. Os programadores de aplicações podem utilizar estas APIs para fazer uma cópia de segurança do estado do serviço periodicamente. Além disso, se os administradores de serviços quiserem acionar uma cópia de segurança fora do serviço num momento específico, como antes de atualizar a aplicação, os programadores têm de expor a cópia de segurança (e restaurar) como uma API do serviço. Manter as cópias de segurança é um custo adicional acima deste. Por exemplo, pode querer fazer cinco cópias de segurança incrementais a cada meia hora, seguidas de uma cópia de segurança completa. Após a cópia de segurança completa, pode eliminar as cópias de segurança incrementais anteriores. Esta abordagem requer código adicional que conduz a custos adicionais durante o desenvolvimento da aplicação.

O serviço Cópia de Segurança e Restauro no Service Fabric permite uma cópia de segurança fácil e automática das informações armazenadas em serviços com estado. A cópia de segurança dos dados da aplicação numa base periódica é fundamental para proteger contra a perda de dados e a indisponibilidade do serviço. O Service Fabric fornece um serviço de cópia de segurança e restauro opcional, que lhe permite configurar a cópia de segurança periódica do Reliable Services com estado (incluindo os Serviços de Ator) sem ter de escrever código adicional. Também facilita o restauro de cópias de segurança realizadas anteriormente.

O Service Fabric fornece um conjunto de APIs para obter a seguinte funcionalidade relacionada com a funcionalidade periódica de cópia de segurança e restauro:

  • Agende uma cópia de segurança periódica dos serviços Reliable Stateful e reliable Actors com suporte para carregar a cópia de segurança para localizações de armazenamento (externas). Localizações de armazenamento suportadas
    • Storage do Azure
    • Partilha de Ficheiros (no local)
  • Enumerar cópias de segurança
  • Acionar uma cópia de segurança ad hoc de uma partição
  • Restaurar uma partição com a cópia de segurança anterior
  • Suspender temporariamente cópias de segurança
  • Gestão de retenção de cópias de segurança (futuras)

Pré-requisitos

  • Cluster do Service Fabric com a versão 6.4 ou superior do Service Fabric. Veja este artigo para obter os passos para criar um cluster do Service Fabric com o modelo de recursos do Azure.
  • Certificado X.509 para encriptação de segredos necessários para ligar ao armazenamento para armazenar cópias de segurança. Veja o artigo para saber como obter ou criar um certificado X.509.
  • Aplicação Reliable Stateful do Service Fabric criada com o SDK do Service Fabric versão 3.0 ou superior. Para aplicações direcionadas para o .NET Core 2.0, a aplicação deve ser criada com a versão 3.1 ou superior do SDK do Service Fabric.
  • Crie uma conta de Armazenamento do Azure para armazenar cópias de segurança de aplicações.
  • Instale o Módulo Microsoft.ServiceFabric.Powershell.Http (Pré-visualização) para efetuar chamadas de configuração.
    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Nota

Se a versão do PowerShellGet for inferior a 1.6.0, terá de atualizar para adicionar suporte ao sinalizador -AllowPrerelease :

Install-Module -Name PowerShellGet -Force

  • Certifique-se de que o Cluster está ligado através do Connect-SFCluster comando antes de fazer qualquer pedido de configuração com o 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'

Ativar o serviço de cópia de segurança e restauro

Com o Portal do Azure

Ative Include backup restore service a caixa + Show optional settings de verificação no Cluster Configuration separador.

Ativar o Serviço de Restauro de Cópias de Segurança com o Portal

Utilizar o Modelo de Resource Manager do Azure

Primeiro, tem de ativar o serviço de cópia de segurança e restauro no cluster. Obtenha o modelo para o cluster que pretende implementar. Pode utilizar os modelos de exemplo ou criar um modelo de Resource Manager. Ative o serviço de cópia de segurança e restauro com os seguintes passos:

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

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Agora, ative o serviço de cópia de segurança e restauro ao adicionar a secção seguinte addonFeatures na properties secção, conforme mostrado no fragmento seguinte:

        "properties": {
            ...
            "addonFeatures":  ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Configure o certificado X.509 para encriptação de credenciais. Isto é importante para garantir que as credenciais fornecidas para ligar ao armazenamento são encriptadas antes de persistirem. Configure o certificado de encriptação ao adicionar a secção seguinte BackupRestoreService na fabricSettings secção, conforme mostrado no fragmento seguinte:

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

    Nota

    [Thumbprint] needs to replaced by valid certificate thumbprint to be used for encryption.

  4. Depois de atualizar o modelo de cluster com as alterações anteriores, aplique-as e deixe a implementação/atualização ser concluída. Depois de concluído, o serviço de cópia de segurança e restauro começa a ser executado no cluster. O Uri deste serviço é fabric:/System/BackupRestoreService e o serviço pode estar localizado na secção serviço do sistema no explorador do Service Fabric.

Ativar a cópia de segurança periódica para o serviço Reliable Stateful e Reliable Actors

Vamos percorrer os passos para ativar a cópia de segurança periódica para o serviço Reliable Stateful e Reliable Actors. Estes passos assumem

  • Que o cluster está configurado com a segurança X.509 com o serviço de cópia de segurança e restauro.
  • É implementado um serviço Reliable Stateful no cluster. Para efeitos deste guia de início rápido, o Uri da aplicação é fabric:/SampleApp e o Uri para o serviço Reliable Stateful pertencente a esta aplicação é fabric:/SampleApp/MyStatefulService. Este serviço é implementado com partição única e o ID da partição é 974bd92a-b395-4631-8a7f-53bd4ae9cf22.
  • O certificado de cliente com a função de administrador está instalado no nome do arquivo O Meu (Pessoal) da localização do arquivo de certificados CurrentUser no computador a partir do qual os scripts abaixo serão invocados. Este exemplo utiliza 1b7ebe2174649c45474a4819dafae956712c31d3 como thumbprint deste certificado. Para obter mais informações sobre certificados de cliente, veja Controlo de acesso baseado em funções para clientes do Service Fabric.

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

O primeiro passo é criar uma política de cópia de segurança que descreva a agenda de cópias de segurança, o armazenamento de destino para dados de cópia de segurança, o nome da política, as cópias de segurança incrementais máximas a serem permitidas antes de acionar a política de cópia de segurança completa e de retenção para o armazenamento de cópias de segurança.

Para o armazenamento de cópias de segurança, utilize a conta de Armazenamento do Azure criada acima. O contentor backup-container está configurado para armazenar cópias de segurança. Um contentor com este nome é criado, se ainda não existir, durante o carregamento da cópia de segurança. Preencha ConnectionString com uma cadeia de ligaçã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 com o Módulo Microsoft.ServiceFabric.Powershell.Http

Execute os seguintes cmdlets do PowerShell para criar uma nova política de cópia de segurança. 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 Rest com 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'

Utilizar Service Fabric Explorer

  1. No Service Fabric Explorer, navegue até ao separador Cópias de Segurança e selecione Ações > Criar Política de Cópia de Segurança.

    Criar Política de Cópia de Segurança

  2. Preencha as informações. Para obter detalhes sobre como especificar um intervalo baseado na frequência, veja a propriedade TimeGrain. Para clusters do Azure, deve selecionar AzureBlobStore.

    Criar Armazenamento de Blobs do Azure de Política de Cópia de Segurança

Ativar cópia de segurança periódica

Depois de definir a política de cópia de segurança para cumprir os requisitos de proteção de dados da aplicação, a política de cópia de segurança deve ser associada à aplicação. Consoante o requisito, a política de cópia de segurança pode ser associada a uma aplicação, serviço ou partição.

PowerShell com o Módulo Microsoft.ServiceFabric.Powershell.Http


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

Chamada Rest com o PowerShell

Execute o seguinte script do PowerShell para invocar a API REST necessária para associar a política de cópia de segurança ao nome BackupPolicy1 criado no passo acima à aplicação 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'

Utilizar Service Fabric Explorer

Certifique-se de que o modo avançado para Service Fabric Explorer está ativado

  1. Clique na engrenagem no canto superior direito da Janela do Explorador de SF.

  2. Selecione a caixa "Modo avançado" e atualize a página Explorador de SF.

  3. Selecione uma aplicação e aceda à ação. Clique em Ativar/Atualizar Cópia de Segurança da Aplicação.

    Ativar a Cópia de Segurança da Aplicação

  4. Por fim, selecione a política pretendida e clique em Ativar Cópia de Segurança.

    Selecionar Política

Verifique se as cópias de segurança periódicas estão a funcionar

Depois de ativar a cópia de segurança ao nível da aplicação, todas as partições pertencentes aos serviços Reliable Stateful e reliable Actors na aplicação começarão a receber cópias de segurança periodicamente de acordo com a política de cópia de segurança associada.

Evento de Estado de Funcionamento da Cópia de Segurança da Partição

Listar Cópias de Segurança

As cópias de segurança associadas a todas as partições pertencentes a serviços Reliable Stateful e Reliable Actors da aplicação podem ser enumeradas com a API GetBackups . As cópias de segurança podem ser enumeradas para uma aplicação, serviço ou partição.

PowerShell com o Módulo Microsoft.ServiceFabric.Powershell.Http


Get-SFApplicationBackupList -ApplicationId WordCount

Chamada Rest com o PowerShell

Execute o seguinte script do PowerShell para invocar a API HTTP para enumerar as cópias de segurança criadas para todas as partições dentro da aplicação SampleApp .

$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            :

Utilizar Service Fabric Explorer

Para ver cópias de segurança no Service Fabric Explorer, navegue para uma partição e selecione o separador Cópias de segurança.

Enumerar Cópias de Segurança

Limitação/avisos

  • Os cmdlets do PowerShell do Service Fabric estão no modo de pré-visualização.
  • Não existe suporte para clusters do Service Fabric no Linux.

Passos seguintes