Backup e restauração periódicos em um Service Fabric autônomo
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, um serviço pode precisar fazer backup de seus dados para se proteger dos seguintes cenários:
- Perda permanente de todo um cluster 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 interna 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 backup dos dados do aplicativo periodicamente é uma necessidade básica para gerenciar um aplicativo distribuído e proteger contra perda de dados ou perda prolongada de disponibilidade do serviço. O Service Fabric fornece um serviço opcional de backup e restauração, que permite configurar o backup periódico de Serviços Confiáveis com monitoração de estado (incluindo os Serviços do Ator) sem 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 não planejado 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 posterior. Consulte este artigo para obter as etapas para baixar o pacote necessário.
X.509 Certificado para criptografia de segredos necessários para se conectar ao armazenamento para armazenar backups. Consulte o artigo para saber como adquirir ou criar um certificado X.509 autoassinado.
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 posterior.
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
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. Habilite o serviço de backup e restauração com as seguintes etapas:
Verifique se o está definido como
10-2017
noapiversion
arquivo de configuração do cluster e, se não, atualize-o conforme mostrado no seguinte trecho:{ "apiVersion": "10-2017", "name": "SampleCluster", "clusterConfigurationVersion": "1.0.0", ... }
Agora, habilite o serviço de backup e restauração adicionando a seguinte
addonFeatures
seção naproperties
seção, conforme mostrado no seguinte trecho:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
Configure o certificado X.509 para criptografia de credenciais. Isso é importante para garantir que as credenciais fornecidas, se houver, para se conectar ao armazenamento sejam criptografadas antes de persistir. Configure o certificado de criptografia adicionando a seguinte
BackupRestoreService
seção nafabricSettings
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.
Depois de atualizar o arquivo de configuração do 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 é 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
- O cluster é configurado com service_ 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 é23aebc1e-e9ea-4e16-9d5c-e91a614fefa7
.
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, crie compartilhamento de arquivos e conceda acesso ReadWrite a esse compartilhamento de arquivos para todas as máquinas do Service Fabric Node. Este exemplo pressupõe que o compartilhamento com nome BackupStore
esteja presente em StorageServer
.
PowerShell usando o módulo Microsoft.ServiceFabric.PowerShell.Http
New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -FileShare -Path '\\StorageServer\BackupStore' -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.
$ScheduleInfo = @{
Interval = 'PT15M'
ScheduleKind = 'FrequencyBased'
}
$StorageInfo = @{
Path = '\\StorageServer\BackupStore'
StorageKind = 'FileShare'
}
$RetentionPolicy = @{
RetentionPolicyType = 'Basic'
RetentionDuration = 'P10D'
}
$BackupPolicy = @{
Name = 'BackupPolicy1'
MaxIncrementalBackups = 20
Schedule = $ScheduleInfo
Storage = $StorageInfo
RetentionPolicy = $RetentionPolicy
}
$body = (ConvertTo-Json $BackupPolicy)
$url = "http://localhost:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json'
Usando o Service Fabric Explorer
No Service Fabric Explorer, navegue até a guia Backups e selecione Ações > Criar Política de Backup.
Preencha as informações. Para clusters autônomos, FileShare deve ser selecionado.
Habilitar backup periódico
Depois de definir a política 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 = "http://localhost:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json'
Usando o Service Fabric Explorer
Verifique se o BackupRestoreService está habilitado no cluster.
Abra o Service Fabric Explorer.
Selecione um aplicativo e vá para a seção Backup. Clique em Ação de backup.
Clique em Ativar/Atualizar Backup de Aplicativo.
Por fim, selecione a política desejada e selecione Ativar backup.
Verifique se os backups periódicos estão funcionando
Depois de habilitar o backup para o 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.
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 . Dependendo do requisito, os backups podem ser enumerados para 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 = "http://localhost:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"
$response = Invoke-WebRequest -Uri $url -Method Get
$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items
Saída de exemplo para a execução acima:
BackupId : d7e4038e-2c46-47c6-9549-10698766e714
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.39.40.zip
BackupType : Full
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2058
CreationTimeUtc : 2018-04-01T19:39:40Z
FailureError :
BackupId : 8c21398a-2141-4133-b4d7-e1a35f0d7aac
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.54.38.zip
BackupType : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2237
CreationTimeUtc : 2018-04-01T19:54:38Z
FailureError :
BackupId : fc75bd4c-798c-4c9a-beee-e725321f73b2
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 20.09.44.zip
BackupType : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2437
CreationTimeUtc : 2018-04-01T20:09:44Z
FailureError :
Usando o Service Fabric Explorer
Para exibir backups no Service Fabric Explorer, navegue até uma partição e selecione a guia 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.