Partager via


Sauvegarde et restauration périodiques dans un Service Fabric autonome

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, la sauvegarde des données d'un service peut être nécessaire afin de les protéger des situations suivantes :

  • Perte définitive d’un cluster Service Fabric entier.
  • 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é (par exemple, 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.

La sauvegarde régulière des données d’application est nécessaire à la gestion d’une application distribuée et la protection contre la perte de données ou une perte prolongée de la disponibilité du service. Service Fabric fournit un service de sauvegarde et restauration facultatif qui vous permet de configurer une sauvegarde périodique des services fiables (Reliable Services) avec état (dont les services d’acteur) sans écrire de 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 non planifiée 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 6.4 ou version ultérieure. Consultez cet article pour la procédure de téléchargement du package nécessaire.

  • 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 acquérir ou créer un certificat X.509 auto-signé.

  • 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.

  • 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 toute requête de configuration via le 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

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 utiliser les exemples de modèles. Activez le service de sauvegarde et de restauration en effectuant les étapes suivantes :

  1. Vérifiez si apiversion a la valeur 10-2017 dans le fichier de configuration de cluster et, si ce n’est pas le cas, procédez à une mise à jour, comme indiqué dans l’extrait de code suivant :

    {
        "apiVersion": "10-2017",
        "name": "SampleCluster",
        "clusterConfigurationVersion": "1.0.0",
        ...
    }
    
  2. À présent, activez le service de sauvegarde et de restauration en ajoutant la section addonFeatures suivante sous la section properties, comme indiqué dans l’extrait de code ci-après :

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. 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, le cas échéant, 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 section fabricSettings, 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.

  4. Après avoir mis à jour le fichier de configuration de votre 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 restauration s’exécute 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). Cette procédure suppose les éléments suivants :

  • Le cluster est configuré avec le service de sauvegarde et restauration.
  • Un service avec état fiable est déployé sur le cluster. Pour les besoins de 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 est fabric:/SampleApp/MyStatefulService. Ce service est déployé avec une seule partition dont l’ID est 23aebc1e-e9ea-4e16-9d5c-e91a614fefa7.

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, créez le partage de fichiers et accordez un accès Lecture/écriture à ce partage pour tous les ordinateurs du nœud Service Fabric. Cet exemple suppose que le partage nommé BackupStore est présent sur StorageServer.

PowerShell avec le module 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'

Appel REST avec PowerShell

Exécutez le script PowerShell suivant pour appeler l’API REST requise afin de créer une stratégie.

$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'

Utiliser Service Fabric Explorer

  1. Dans Service Fabric Explorer, accédez à l’onglet Sauvegardes et sélectionnez Actions > Créer une stratégie de sauvegarde.

    Créer la stratégie de sauvegarde

  2. Renseignez les informations. Pour les clusters autonomes, FileShare doit être sélectionné.

    Créer une stratégie de sauvegarde FileShare

Activer la sauvegarde périodique

Après avoir défini la stratégie permettant de répondre aux besoins de protection des données de l’application, la stratégie de sauvegarde 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 = "http://localhost:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json'

Utiliser Service Fabric Explorer

Vérifiez que BackupRestoreService est activé sur le cluster.

  1. Ouvrez Service Fabric Explorer.

  2. Sélectionnez une application et accédez à la section Sauvegarde. Cliquez sur Action de sauvegarde.

  3. Cliquez sur Activer/Mettre à jour la sauvegarde de l’application.

    Activer la sauvegarde de l’application

  4. Enfin, sélectionnez la stratégie souhaitée, puis choisissez Activer la sauvegarde.

    Sélectionner une stratégie

Vérifier le fonctionnement des sauvegardes périodiques

Après avoir activé la sauvegarde pour 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.

Événement d’intégrité de partition sauvegardé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. Selon les besoins, 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 = "http://localhost:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"

$response = Invoke-WebRequest -Uri $url -Method Get

$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items

Exemple de sortie pour l’exécution ci-dessus :

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            : 

Utiliser Service Fabric Explorer

Pour afficher les sauvegardes dans Service Fabric Explorer, accédez à une partition et sélectionnez l’onglet Sauvegardes.

Énumérer les 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.

Étapes suivantes