Restauration de la sauvegarde dans Azure Service Fabric
Dans Azure Service Fabric, les services fiables avec état et Reliable Actors peuvent conserver un état mutable faisant autorité après une transaction demande/réponse. Un service avec état peut tomber en panne pendant une longue période ou perdre des informations en raison d’un incident. Si cela se produit, le service doit être restauré à partir de la dernière sauvegarde acceptable pour continuer de fonctionner.
Par exemple, vous pouvez configurer un service pour qu’il sauvegarde ses données afin de vous protéger des scénarios suivants :
- Cas de reprise d’activité après sinistre : Perte définitive d’un cluster Service Fabric entier.
- Cas de perte de données : Perte définitive de la majorité des réplicas d’une partition de service.
- Cas de perte de données : Suppression accidentelle ou altération du service. Par exemple, un administrateur supprime le service par erreur.
- Cas d’altération des données : Bogues dans le service qui provoquent l’altération des données. Par exemple, l’altération des données peut se produire lorsqu’une mise à niveau de code de service écrit des données erronées dans une collection fiable. Dans ce cas, le code et les données devront peut-être être restaurés à un état antérieur.
Prérequis
- Pour déclencher une restauration, le service FAS (Fault Analysis Service) doit être activé pour le cluster.
- Le service BRS (Backup Restore Service) a créé la sauvegarde.
- La restauration peut être déclenchée sur une partition uniquement.
- Installez le module Microsoft.ServiceFabric.Powershell.Http (préversion) pour effectuer des appels de configuration.
Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease
Notes
Si votre version PowerShellGet est inférieure à 1.6.0, vous devez effectuer une mise à jour pour ajouter la prise en charge de l’indicateur -AllowPrerelease :
Install-Module -Name PowerShellGet -Force
- Assurez-vous que le cluster est connecté à l’aide de la commande
Connect-SFCluster
avant d’effectuer toute requête de configuration à l’aide du module 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'
Restauration déclenchée
Une restauration peut être déclenchée pour tous les scénarios suivants :
- Restauration de données dans le cadre d’une reprise d’activité
- Restauration des données après une altération ou une perte des données
Restauration des données en cas de reprise d’activité après sinistre
Si un cluster Service Fabric est perdu dans son intégralité, vous pouvez récupérer les données des partitions du service fiable avec état et des Reliable Actors. Vous pouvez sélectionner la sauvegarde souhaitée dans la liste lorsque vous utilisez GetBackupAPI avec les détails de stockage de sauvegarde. L’énumération de sauvegardes peut fonctionner pour une application, un service ou une partition.
Pour l’exemple suivant, nous allons supposer que le cluster perdu soit le même que celui mentionné dans Activation de la sauvegarde périodique pour le service avec état fiable et les acteurs fiables (Reliable Actors). Dans ce cas, SampleApp
est déployé avec la stratégie de sauvegarde activée, et les sauvegardes sont configurées sur le stockage Azure.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Get-SFBackupsFromBackupLocation -Application -ApplicationName 'fabric:/SampleApp' -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container'
Appel REST avec PowerShell
Exécutez un script PowerShell pour utiliser l’API REST afin de retourner la liste des sauvegardes créées pour toutes les partitions de l’application SampleApp
. L’API a besoin des informations de stockage de sauvegarde afin de lister les sauvegardes disponibles.
$StorageInfo = @{
ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
ContainerName = 'backup-container'
StorageKind = 'AzureBlobStore'
}
$BackupEntity = @{
EntityKind = 'Application'
ApplicationName='fabric:/SampleApp'
}
$BackupLocationAndEntityInfo = @{
Storage = $StorageInfo
BackupEntity = $BackupEntity
}
$body = (ConvertTo-Json $BackupLocationAndEntityInfo)
$url = "https://myalternatesfcluster.southcentralus.cloudapp.azure.com:19080/BackupRestore/$/GetBackups?api-version=6.4"
$response = Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items
Exemple de sortie pour l’exécution ci-dessus :
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 :
Pour déclencher la restauration, choisissez l’une des sauvegardes. Par exemple, la sauvegarde en cours pour la reprise d’activité peut être la sauvegarde suivante :
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 :
Pour l’API de restauration, vous devez fournir les détails sur BackupId et BackupLocation.
Vous devez également choisir une partition de destination dans le cluster de remplacement, comme indiqué dans le schéma de partition. La sauvegarde du cluster de remplacement est restaurée sur la partition spécifiée dans le schéma de partition du cluster d’origine perdu.
Si l’ID de partition du cluster de remplacement est 1c42c47f-439e-4e09-98b9-88b8f60800c6
, vous pouvez le mapper sur l’ID de partition du cluster d’origine 974bd92a-b395-4631-8a7f-53bd4ae9cf22
en comparant la clé haute et la clé basse du partitionnement par plages de valeurs (UniformInt64Partition) .
Pour le partitionnement nommé, la valeur de nom est comparée pour identifier la partition cible dans l’autre cluster.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Restore-SFPartition -PartitionId '1c42c47f-439e-4e09-98b9-88b8f60800c6' -BackupId 'b0035075-b327-41a5-a58f-3ea94b68faa4' -BackupLocation 'SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip' -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container'
Appel REST avec PowerShell
Pour demander une restauration avec la partition du cluster de sauvegarde, utilisez l’API Restore suivante :
$StorageInfo = @{
ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
ContainerName = 'backup-container'
StorageKind = 'AzureBlobStore'
}
$RestorePartitionReference = @{
BackupId = 'b0035075-b327-41a5-a58f-3ea94b68faa4'
BackupLocation = 'SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip'
BackupStorage = $StorageInfo
}
$body = (ConvertTo-Json $RestorePartitionReference)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Partitions/1c42c47f-439e-4e09-98b9-88b8f60800c6/$/Restore?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
Vous pouvez suivre la progression d’une restauration avec TrackRestoreProgress.
Notes
Lors de l’utilisation de PowerShell pour restaurer une partition, si BackupLocation a la valeur « $ », la séquence d’échappement utilise « ~ »
Utiliser Service Fabric Explorer
Il est possible de déclencher une restauration à partir de Service Fabric Explorer. Vérifiez que le mode avancé est activé dans les paramètres Service Fabric Explorer.
Sélectionnez les partitions souhaitées, puis cliquez sur Actions.
Sélectionnez Déclencher la restauration de partition, puis renseignez les informations pour Azure :
ou FileShare :
Restauration des données après une altération/perte de données
Dans le cas d’une perte de données ou d’une altération des données, vous pouvez restaurer les données des partitions du service fiable avec état et Reliable Actors à l’aide de l’une des sauvegardes choisies.
L’exemple suivant est la continuation du scénario mentionné dans Activation de la sauvegarde périodique pour le service avec état fiable et les acteurs fiables (Reliable Actors). Dans cet exemple, une stratégie de sauvegarde est activée pour la partition, et le service effectue des sauvegardes à la fréquence souhaitée dans le stockage Azure.
Sélectionnez une sauvegarde à partir de la sortie de GetBackupAPI. Dans ce scénario, la sauvegarde est générée à partir du même cluster qu’avant.
Pour déclencher la restauration, choisissez une sauvegarde dans la liste. Pour la perte/altération de données actuelle, sélectionnez la sauvegarde suivante :
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 :
Pour l’API de restauration, fournissez les détails sur BackupId et BackupLocation. La sauvegarde est activée dans le cluster. Par conséquent, le service BRS (Backup Restore Service) de Service Fabric identifie le bon emplacement de stockage à l’aide de la stratégie de sauvegarde associée.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Restore-SFPartition -PartitionId '974bd92a-b395-4631-8a7f-53bd4ae9cf22' -BackupId 'b0035075-b327-41a5-a58f-3ea94b68faa4' -BackupLocation 'SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip'
Appel REST avec PowerShell
$RestorePartitionReference = @{
BackupId = 'b0035075-b327-41a5-a58f-3ea94b68faa4',
BackupLocation = 'SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip'
}
$body = (ConvertTo-Json $RestorePartitionReference)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Partitions/974bd92a-b395-4631-8a7f-53bd4ae9cf22/$/Restore?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
Vous pouvez suivre la progression d’une restauration avec TrackRestoreProgress.
Notes
Lors de l’utilisation de PowerShell pour restaurer une partition, si BackupLocation a la valeur « $ », la séquence d’échappement utilise « ~ »
Suivre la progression de la restauration
Une partition d’un service fiable avec état ou Reliable Actor accepte une seule demande de restauration à la fois. Une partition ne peut accepter une autre demande de restauration qu’une fois la demande en cours terminée. Plusieurs demandes de restauration peuvent être déclenchées en même temps sur des partitions différentes.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Get-SFPartitionRestoreProgress -PartitionId '974bd92a-b395-4631-8a7f-53bd4ae9cf22'
Appel REST avec PowerShell
$url = "https://mysfcluster-backup.southcentralus.cloudapp.azure.com:19080/Partitions/974bd92a-b395-4631-8a7f-53bd4ae9cf22/$/GetRestoreProgress?api-version=6.4"
$response = Invoke-WebRequest -Uri $url -Method Get -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
$restoreResponse = (ConvertFrom-Json $response.Content)
$restoreResponse | Format-List
La demande de restauration progresse dans l’ordre suivant :
Accepted (Acceptée) : l’état de restauration Accepted indique que la demande a été déclenchée avec les bons paramètres de demande.
RestoreState : Accepted TimeStampUtc : 0001-01-01T00:00:00Z RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592} RestoredLsn : 3552
InProgress (En cours) : l’état de restauration InProgress indique que la partition fait l’objet d’une restauration avec la sauvegarde mentionnée dans la demande. La partition indique l’état dataloss.
RestoreState : RestoreInProgress TimeStampUtc : 0001-01-01T00:00:00Z RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592} RestoredLsn : 3552
Success (Réussite), Failure (Échec) ou Timeout (Expiration du délai) : une restauration demandée peut être effectuée avec l’un des états suivants. Chaque état présente les détails d’importance et de réponse suivants :
Success : l’état de restauration Success indique un état de partition retrouvée. La partition indique les états RestoredEpoch et RestoredLSN ainsi que l’heure UTC.
RestoreState : Success TimeStampUtc : 2018-11-22T11:22:33Z RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592} RestoredLsn : 3552
Échec : l’état de restauration Failure indique l’échec de la demande de restauration. La cause de l’échec est signalée.
RestoreState : Failure TimeStampUtc : 0001-01-01T00:00:00Z RestoredEpoch : RestoredLsn : 0
Timeout (Expiration du délai) : l’état de restauration Timeout indique que la demande a expiré. Créez une demande de restauration avec une valeur RestoreTimeout supérieure. Le délai d’expiration par défaut est de 10 minutes. Avant de demander une nouvelle restauration, vérifiez que la partition n’est pas dans un état de perte de données (dataloss).
RestoreState : Timeout TimeStampUtc : 0001-01-01T00:00:00Z RestoredEpoch : RestoredLsn : 0
Restauration automatique
Vous pouvez configurer les partitions du service fiable avec état et Reliable Actors dans le cluster Service Fabric pour la restauration automatique. Dans la stratégie de sauvegarde, définissez AutoRestore
sur true. L’activation de la restauration automatique restaure automatiquement les données de la dernière sauvegarde de partition, si une perte de données est signalée. Pour plus d'informations, consultez les pages suivantes :
- Activation de la restauration automatique dans la stratégie de sauvegarde
- Référence sur l’API RestorePartition
- Référence sur l’API GetPartitionRestoreProgress