Sauvegarde et restauration périodiques dans un cluster Azure Service Fabric
Service Fabric est une plateforme permettant de développer et de gérer des applications cloud fiables et distribuées. Il prend en charge les microservices avec et sans état. Les services avec état peuvent conserver des données importantes qui vont au-delà d’une seule requête ou transaction. Si un service avec état tombe en panne ou perd des données, il peut avoir besoin d’être restauré à partir d’une sauvegarde récente pour continuer à fonctionner correctement.
Service Fabric réplique l’état sur plusieurs nœuds afin de garantir une haute disponibilité du service. Même si un nœud du cluster échoue, le service continue d’être disponible. Dans certains cas toutefois, il est toujours souhaitable que les données de service soient fiables face à des pannes de plus grande ampleur.
Par exemple, le service peut souhaiter sauvegarder ses données afin de les protéger contre les scénarios suivants :
- Perte définitive de la totalité d’un cluster Service Fabric.
- Perte définitive de la majorité des réplicas d’une partition de service.
- Erreurs d’administration dans le cadre desquelles l’état est accidentellement supprimé ou endommagé. Par exemple, un administrateur disposant de privilèges suffisants supprime le service par erreur.
- Bogues dans le service qui provoquent l’altération des données. Par exemple, cela 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.
- Traitement des données hors connexion. Il peut être utile de disposer du traitement des données hors connexion pour le décisionnel qui a lieu séparément du service qui génère les données.
Service Fabric fournit une API intégrée pour effectuer des opérations de sauvegarde et restauration dans le temps. Les développeurs d’applications peuvent utiliser ces API pour sauvegarder régulièrement l’état du service. De plus, si les administrateurs de service souhaitent déclencher une sauvegarde depuis l’extérieur du service à un moment donné, comme avant la mise à niveau de l’application, les développeurs doivent exposer la sauvegarde (et la restauration) en tant qu’API du service. La maintenance des sauvegardes constitue un coût supplémentaire. Par exemple, vous souhaitez effectuer cinq sauvegardes incrémentielles toutes les demi-heures, suivies d’une sauvegarde complète. Après la sauvegarde complète, vous pouvez supprimer les sauvegardes incrémentielles précédentes. Cette approche nécessite du code supplémentaire, ce qui entraîne un coût supplémentaire durant le développement d’applications.
Le service de sauvegarde et de restauration de Service Fabric permet de sauvegarder facilement et automatiquement les informations stockées dans les services avec état. Une sauvegarde périodique des données d’application est essentielle pour éviter la perte de données et l’indisponibilité du service. Service Fabric fournit un service de sauvegarde et restauration facultatif, ce qui vous permet de configurer une sauvegarde périodique des services fiables (Reliable Services) avec état (dont les services d’acteur) sans avoir à écrire du code supplémentaire. Il facilite également la restauration des sauvegardes précédemment effectuées.
Service Fabric fournit un ensemble d’API pour obtenir les fonctions suivantes associées à la fonctionnalité de sauvegarde et restauration périodiques :
- Planifier la sauvegarde périodique des services avec état fiables et des acteurs fiables (Reliable Actors) avec prise en charge pour charger la sauvegarde sur des emplacements de stockage (externes). Emplacements de stockage pris en charge
- Stockage Azure
- Partage de fichiers (localement)
- Énumérer les sauvegardes
- Déclencher une sauvegarde ad hoc d’une partition
- Restaurer une partition à l’aide d’une sauvegarde précédente
- Suspendre temporairement les sauvegardes
- Gérer la rétention des sauvegardes (à venir)
Prérequis
- Cluster Service Fabric avec Fabric version 6.4 ou ultérieure. Consultez cet article pour la procédure de création d’un cluster Service Fabric à l’aide du modèle de ressource Azure.
- Certificat X.509 pour le chiffrement des secrets nécessaire pour se connecter au stockage pour stocker les sauvegardes. Consultez l’article pour savoir comment obtenir ou créer un certificat X.509.
- Application avec état fiable Service Fabric générée avec le kit SDK Service Fabric version 3.0 ou ultérieure. Pour les applications qui ciblent .NET Core 2.0, l’application doit être générée à l'aide du SDK Service Fabric version 3.1 ou ultérieure.
- Créez un compte de stockage Azure pour stocker les sauvegardes de l’application.
- Installez le module Microsoft.ServiceFabric.Powershell.Http pour effectuer des appels de configuration.
Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease
Remarque
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'
Activation du service de sauvegarde et de restauration
En passant par le portail Azure
Cochez la case Include backup restore service
sous + Show optional settings
dans l’onglet Cluster Configuration
.
Utilisation d’un modèle Azure Resource Manager
Vous devez d’abord activer le service de sauvegarde et de restauration dans votre cluster. Récupérez le modèle approprié pour le cluster que vous souhaitez déployer. Vous pouvez soit utiliser les exemples de modèles, soit créer un modèle Resource Manager. Activez le service de sauvegarde et de restauration en effectuant les étapes suivantes :
Vérifiez que
apiversion
est défini sur2018-02-01
pour la ressourceMicrosoft.ServiceFabric/clusters
, et si ce n’est pas le cas, procédez à une mise à jour, comme dans l’extrait de code suivant :{ "apiVersion": "2018-02-01", "type": "Microsoft.ServiceFabric/clusters", "name": "[parameters('clusterName')]", "location": "[parameters('clusterLocation')]", ... }
À présent, activez le service de sauvegarde et de restauration en ajoutant la section
addonFeatures
suivante sous la sectionproperties
, comme indiqué dans l’extrait de code ci-après :"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
Configurez un certificat X.509 pour le chiffrement des informations d’identification. Ceci est important afin de vous assurer que les informations d’identification fournies pour vous connecter au stockage sont chiffrées avant d’être rendues persistantes. Configurez le certificat de chiffrement en ajoutant la section
BackupRestoreService
suivante sous la sectionfabricSettings
, comme indiqué dans l’extrait de code ci-après :"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ { "name": "BackupRestoreService", "parameters": [ { "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" } ] }] ... }
Remarque
[Thumbprint] doit être remplacé par l’empreinte numérique du certificat valide à utiliser pour le chiffrement.
Après avoir mis à jour votre modèle de cluster avec les modifications précédentes, appliquez-les et laissez le déploiement/la mise à niveau s’accomplir. Une fois l’opération terminée, le service de sauvegarde et de restauration commence à s’exécuter dans votre cluster. L’URI de ce service est
fabric:/System/BackupRestoreService
et le service peut être situé sous la section du service système dans Service Fabric Explorer.
Activation de la sauvegarde périodique pour le service avec état fiable et les acteurs fiables (Reliable Actors)
Examinons la procédure pour activer la sauvegarde périodique pour le service avec état fiable et les acteurs fiables (Reliable Actors). Ces étapes supposent que
- Le cluster est configuré à l’aide de la sécurité X.509 avec le service de sauvegarde et restauration.
- Un service avec état fiable est déployé sur le cluster. Pour ce guide de démarrage rapide, l’URI de l’application est
fabric:/SampleApp
et l’URI du service avec état fiable appartenant à cette application estfabric:/SampleApp/MyStatefulService
. Ce service est déployé avec une seule partition dont l’ID est974bd92a-b395-4631-8a7f-53bd4ae9cf22
. - Le certificat client avec le rôle d’administrateur est installé dans le magasin My (Personal) de l’emplacement du magasin de certificats CurrentUser sur l’ordinateur à partir d’où les scripts ci-dessous sont appelés. Cet exemple utilise
1b7ebe2174649c45474a4819dafae956712c31d3
comme empreinte numérique de ce certificat. Pour plus d’informations sur les certificats clients, consultez Contrôle d’accès en fonction du rôle pour les clients de Service Fabric.
Créer la stratégie de sauvegarde
La première étape consiste à créer une stratégie de sauvegarde. Cette stratégie doit inclure la planification des sauvegardes, le stockage cible pour les données de sauvegarde, le nom de la stratégie, le nombre maximal de sauvegardes incrémentielles autorisées avant le déclenchement d’une sauvegarde complète et la stratégie de rétention pour le stockage de sauvegarde.
Pour le stockage de sauvegarde, utilisez le compte de stockage Azure créé ci-dessus. Le conteneur backup-container
est configuré pour stocker des sauvegardes. Lors du chargement de la sauvegarde, un conteneur portant ce nom est créé s’il n’existe pas déjà. Renseignez BlobServiceUri
avec l’URL du compte de stockage Azure en remplaçant account-name
par le nom de votre compte de stockage et renseignez le paramètre facultatif ManagedIdentityClientId
avec l’ID client de l’identité managée affectée par l’utilisateur s’il existe plusieurs identités managées affectées à votre ressource.
Suivez ces étapes pour l’attribution d’identité managée sur la ressource Azure :
Activer l’identité managée affectée par le système ou affectée par l’utilisateur dans le service Virtual Machine Scale Sets Configurer des identités managées sur un groupe de machines virtuelles identiques
Attribuer un rôle à l’identité managée Virtual Machine Scale Sets sur un compte de stockage Attribuer des rôles Azure en utilisant le Portail Azure – Azure RBAC
- Au moins le rôle Contributeur aux données Blob du stockage
Pour plus d’informations sur les identités managées
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Exécutez les applets de commande PowerShell suivantes pour la création d’une stratégie de sauvegarde. Remplacez account-name
par le nom de votre compte de stockage.
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.
Appel REST avec PowerShell
Exécutez le script PowerShell suivant pour appeler l’API REST requise afin de créer une stratégie. Remplacez account-name
par le nom de votre compte de stockage.
$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'
Utiliser Service Fabric Explorer
Dans Service Fabric Explorer, cliquez sur Cluster sur le volet de gauche, accédez à l’onglet Sauvegardes et sélectionnez Actions > Créer une stratégie de sauvegarde.
Renseignez les informations. Pour plus d’informations sur la façon de spécifier un intervalle basé sur la fréquence, consultez la propriété TimeGrain. Pour les clusters Azure, ManagedIdentityAzureBlobStore doit être sélectionné.
Activer la sauvegarde périodique
Après avoir défini la stratégie de sauvegarde pour répondre aux exigences de protection des données de l’application, la stratégie doit être associée à l’application. Selon les besoins, la stratégie de sauvegarde peut être associée à une application, un service ou une partition.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'
Appel REST avec PowerShell
Exécutez le script PowerShell suivant pour appeler l’API REST requise afin d’associer la stratégie de sauvegarde nommée BackupPolicy1
créée à l’étape ci-dessus pour l’application 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'
Utiliser Service Fabric Explorer
Vérifiez que BackupRestoreService est activé sur le cluster.
Ouvrez Service Fabric Explorer.
Sélectionnez une application et accédez à la section Sauvegarde. Cliquez sur Action de sauvegarde.
Cliquez sur Activer/Mettre à jour la sauvegarde de l’application.
Enfin, sélectionnez la stratégie souhaitée, puis cliquez sur Activer la sauvegarde.
Vérifier le fonctionnement des sauvegardes périodiques
Après avoir activé la sauvegarde au niveau de l’application, toutes les partitions appartenant à des services avec état fiables et des acteurs fiables (Reliable Actors) sous l’application commencent à être sauvegardées régulièrement conformément à la stratégie de sauvegarde associée.
Répertorier les sauvegardes
Les sauvegardes associées à toutes les partitions appartenant à des services avec état fiables et des acteurs fiables (Reliable Actors) de l’application peuvent être énumérées à l’aide de l’API GetBackups. Les sauvegardes peuvent être énumérées pour une application, un service ou une partition.
PowerShell avec le module Microsoft.ServiceFabric.Powershell.Http
Get-SFApplicationBackupList -ApplicationId WordCount
Appel REST avec PowerShell
Exécutez le script PowerShell suivant pour appeler l’API HTTP afin d’énumérer les sauvegardes créées pour toutes les partitions au sein de l’application 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
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 :
Utiliser Service Fabric Explorer
Pour afficher les sauvegardes dans Service Fabric Explorer, accédez à une partition et sélectionnez l’onglet Sauvegardes.
Limitations/mises en garde
- Les applets de commande PowerShell Service Fabric sont en mode Aperçu.
- Pas de prise en charge des clusters Service Fabric sur Linux.