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.
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:
Verifique se o
apiversion
está definido como2018-02-01
para oMicrosoft.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')]", ... }
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 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 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:
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
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
- 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
No Service Fabric Explorer, clique em Cluster no painel esquerdo, navegue até a guia Backups e selecione Ações > Criar Política de 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, ManagedIdentityAzureBlobStore deve ser selecionado.
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.
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 clique em Ativar backup.
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.
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.
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.