Backup e restauração periódicos do cluster do Azure Service Fabric
O Service Fabric é uma plataforma para desenvolver e gerenciar aplicativos de nuvem distribuída confiáveis. Ele dá suporte a microsserviços sem estado e com estado. Os serviços com estado podem manter dados importantes que excedem apenas uma solicitação ou transação. Se um serviço com estado ficar inativo ou perder dados, ele poderá precisar ser restaurado 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 se um nó do cluster falhar, os serviços continuarão disponíveis. Em alguns casos, no entanto, ainda é desejável que os dados de serviço sejam confiáveis contra falhas mais amplas.
Por exemplo, pode ser útil fazer o backup dos dados de um serviço para se proteger nos seguintes cenários:
- No caso de 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 nos quais o estado é acidentalmente excluído ou corrompido. Por exemplo, um administrador com privilégios suficientes exclui o serviço por engano.
- Bugs no serviço que venham a corromper os dados. Por exemplo, isso pode ocorrer quando uma atualização de código de serviço inicia a gravação de dados com falha em uma coleção confiável. Nesse caso, convém reverter o código e os dados para um estado anterior.
- Processamento de dados offline. Talvez seja conveniente processar no modo offline os dados de business intelligence que ocorrem separadamente do serviço que gera os dados.
O Service Fabric fornece uma API interna para realizar backup e restauração pontuais. 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 disparar 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. Manter os backups é um custo adicional a este. Por exemplo, pode ser útil realizar cinco backups incrementais a cada meia hora, seguidos por um backup completo. Após o backup completo, você poderá excluir os backups incrementais anteriores. Essa abordagem requer código adicional, o que significa custos adicionais durante o desenvolvimento do aplicativo.
O serviço de Backup e Restauração no Service Fabric possibilita backup fácil e automático das informações armazenadas em serviço com estado. Fazer backup de dados de aplicativo em uma base periódica é fundamental para proteger contra a indisponibilidade de serviço e perda de dados. O Service Fabric fornece um serviço opcional de backup e restauração, que permite que você configure o backup periódico dos Reliable Services com estado (inclusive Serviços de Ator) sem a necessidade de escrever código adicional. Ele também facilita a restauração dos backup obtidos anteriormente.
O Service Fabric fornece um conjunto de APIs para obter a funcionalidade a seguir relacionada ao recurso de backup e restauração periódicos:
- Agende o backup periódico dos serviços confiáveis com estado e do Reliable Actors compatível com upload de backup para locais de armazenamento (externos). Locais de armazenamento compatíveis
- Armazenamento do Azure
- Compartilhamento de arquivos (local)
- Enumerar os backups
- Disparar um backup ad hoc de uma partição
- Restaurar uma partição usando o backup anterior
- Suspender backups temporariamente
- Gerenciamento de backups de retenção (em breve)
Pré-requisitos
- Cluster do Service Fabric com Fabric versão 6.4 ou superior. Consulte o artigo para ver as etapas para criar um cluster do Service Fabric usando o modelo de recurso do Azure.
- Certificado X.509 para criptografia de segredos necessária para se conectar ao armazenamento para armazenar backups. Consulte o artigo para saber como obter ou criar um certificado X.509.
- Aplicativo Service Fabric Reliable Stateful criado usando o SDK do Service Fabric versão 3.0 ou superior. Para aplicativos voltados para o .NET Core 2.0, o aplicativo deve ser criado usando o SDK do Service Fabric versão 3.1 ou posterior.
- Crie uma conta de armazenamento do Azure para armazenar backups de aplicativo.
- Instale o Módulo Microsoft.ServiceFabric.Powershell.Http para fazer chamadas de configuração.
Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease
Observação
Se a sua versão do PowerShellGet for inferior a 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
Connect-SFCluster
comando antes de fazer qualquer solicitação 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'
Habilitando o serviço de backup e restauração
Usando o Portal do Azure
Habilite a Include backup restore service
caixa de seleção + Show optional settings
na guia Cluster Configuration
.
Usar o modelo do Azure Resource Manager
Primeiro, você precisa habilitar o serviço de backup e restauração no seu cluster. Obtenha o modelo para o cluster que você deseja implantar. Use os modelos de exemplo ou crie um modelo do Resource Manager. Habilite o serviço de backup e restauração com as seguintes etapas:
Verifique se a
apiversion
está definida como2018-02-01
para o recursoMicrosoft.ServiceFabric/clusters
, conforme mostrado neste snippet:{ "apiVersion": "2018-02-01", "type": "Microsoft.ServiceFabric/clusters", "name": "[parameters('clusterName')]", "location": "[parameters('clusterLocation')]", ... }
Agora, habilite o serviço de backup e de restauração adicionando a seção
addonFeatures
a seguir abaixo da seçãoproperties
, conforme mostrado neste snippet:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
Configure um certificado X.509 para criptografia de credenciais. Isso é importante para garantir que as credenciais fornecidas se conectem ao armazenamento criptografadas antes de persistirem. Configure um certificado de criptografia adicionando a seção
BackupRestoreService
a seguir abaixo da seçãofabricSettings
, conforme mostrado neste snippet:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ { "name": "BackupRestoreService", "parameters": [ { "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" } ] }] ... }
Observação
A [impressão digital] precisa ser substituída por uma impressão digital do certificado válida para ser usada para criptografia.
Depois de atualizar o modelo de cluster com as alterações anteriores, aplique-as e permita que a implantação/atualização seja concluída. Depois de concluído, o serviço de backup e restauração começa a ser executado no seu 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 Service Fabric Explorer.
Habilitar o backup periódico para o serviço confiável com estado e Reliable Actors
Vamos percorrer as etapas para habilitar o backup periódico do serviço confiável com estado e do Reliable Actors. Essas etapas pressupõem que
- O cluster está configurado usando a segurança X.509 com o serviço de backup e restauração.
- Um serviço confiável com estado é implantado no cluster. Para este guia de início rápido, o URI do aplicativo é
fabric:/SampleApp
e o URI para o serviço confiável com estado que pertence a este aplicativo éfabric:/SampleApp/MyStatefulService
. Esse serviço é implantado com apenas uma partição, e a ID da partição é974bd92a-b395-4631-8a7f-53bd4ae9cf22
. - O certificado do cliente com função de administrador é instalado em Meu nome do armazenamento (Pessoal) do local de repositório de certificados do CurrentUser no computador, de onde os scripts a seguir serão invocados. Este exemplo usa
1b7ebe2174649c45474a4819dafae956712c31d3
como a impressão digital desse certificado. Para obter mais informações sobre certificados do cliente, consulte Controle de acesso baseado em função para clientes do Service Fabric.
Criar política de backup
A primeira etapa é 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 disparado 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, caso ainda não exista, durante o carregamento de backup. Preencha BlobServiceUri
com a URL da conta de Armazenamento do Microsoft Azure substituindo account-name
pelo nome da conta de armazenamento e preencha o parâmetro opcional ManagedIdentityClientId
com a ID do Cliente da Identidade Gerenciada Atribuída pelo Usuário se houver várias identidades gerenciadas atribuídas ao recurso.
Siga as etapas para atribuição de identidade gerenciada no recurso do Azure:
Habilitar a identidade gerenciada atribuída pelo sistema ou pelo usuário nos Conjuntos de Dimensionamento de Máquinas Virtuais Configurar identidades gerenciadas no conjunto de dimensionamento de máquinas virtuais
Atribuir uma função à identidade gerenciada dos Conjuntos de Dimensionamento de Máquinas Virtuais para a conta de armazenamento Atribuir funções do Azure usando o portal do Azure – RBAC do Azure
- No mínimo, função Colaborador de Dados de Blob de Armazenamento
Para obter mais informações sobre Identidade Gerenciada
PowerShell usando o Módulo Microsoft.ServiceFabric.Powershell.Http
Execute os cmdlets do PowerShell a seguir 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 REST usando o PowerShell
Execute o script do PowerShell a seguir para invocar a API REST necessária para criar uma 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'
Como usar o Service Fabric Explorer
No Service Fabric Explorer, clique no Cluster no painel esquerdo, navegue até a guia Backups e selecione Ações > Criar Azure Policy Backup.
Preencha as informações. Para obter detalhes sobre como especificar um intervalo baseado em frequência, consulte a propriedade TimeGrain. Para clusters do Azure, a opção ManagedIdentityAzureBlobStore deve ser selecionada.
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 a ele. Dependendo do requisito, a política de backup pode ser associada um aplicativo, serviço ou partição.
PowerShell usando o Módulo Microsoft.ServiceFabric.Powershell.Http
Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'
Chamada REST usando o PowerShell
Execute o script do PowerShell a seguir para invocar a API REST necessária para associar a política de backup com o nome BackupPolicy1
criada no etapa anterior 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'
Como usar 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 Habilitar/Atualizar Backup do Aplicativo.
Por fim, selecione a política desejada e clique em Habilitar Backup.
Verificar se os backups periódicos estão funcionando
Depois de habilitar o backup para o nível do aplicativo, todas as partições que pertencem aos serviços confiável com estado e Reliable Actors nesse aplicativo passarão por backup periódicos de acordo com a política de backup associada.
Listar Backups
Backups associados a todas as partições que pertencem aos serviços confiáveis com estado e Reliable Actors do aplicativo podem ser enumerados usando a API GetBackups. Os backups podem ser enumerados por aplicativo, serviço ou partição.
PowerShell usando o Módulo Microsoft.ServiceFabric.Powershell.Http
Get-SFApplicationBackupList -ApplicationId WordCount
Chamada REST usando o PowerShell
Execute o script do PowerShell a seguir para invocar a API HTTP para enumerar os backups criados para todas as partições dentro do aplicativo 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
Exemplo de saída da 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 :
Como usar o Service Fabric Explorer
Para exibir os backups no Service Fabric Explorer, navegue até uma partição e selecione a guia Backups.
Limite/Limitações
- 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.