Back-up herstellen in Azure Service Fabric

In Azure Service Fabric kunnen Reliable Stateful-services en Reliable Actors een veranderlijke, gezaghebbende status behouden nadat een aanvraag- en antwoordtransactie is voltooid. Een stateful service kan lange tijd uit de weg gaan of informatie verliezen vanwege een noodgeval. Als dat gebeurt, moet de service worden hersteld vanuit de meest recente acceptabele back-up, zodat deze kan blijven werken.

U kunt bijvoorbeeld een service configureren om een back-up te maken van de gegevens ter bescherming tegen de volgende scenario's:

  • Geval van herstel na noodgevallen: permanent verlies van een volledig Service Fabric-cluster.
  • Geval van gegevensverlies: permanent verlies van een meerderheid van de replica's van een servicepartitie.
  • Geval van gegevensverlies: Onbedoelde verwijdering of beschadiging van de service. Een beheerder verwijdert bijvoorbeeld ten onrechte de service.
  • Geval van beschadiging van gegevens: fouten in de service veroorzaken beschadigde gegevens. Gegevensbeschadiging kan bijvoorbeeld optreden wanneer een upgrade van de servicecode onjuiste gegevens naar een betrouwbare verzameling schrijft. In dat geval moet u mogelijk zowel de code als de gegevens herstellen naar een eerdere status.

Vereisten

  • Als u een herstel wilt activeren, moet FAS (Fault Analysis Service) zijn ingeschakeld voor het cluster.
  • De Back-upherstelservice (BRS) heeft de back-up gemaakt.
  • Het herstel kan alleen worden geactiveerd op een partitie.
  • Installeer Microsoft.ServiceFabric.Powershell.Http Module (preview) voor het maken van configuratie-aanroepen.
    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Notitie

Als uw PowerShellGet-versie lager is dan 1.6.0, moet u bijwerken om ondersteuning toe te voegen voor de vlag -AllowPrerelease :

Install-Module -Name PowerShellGet -Force

  • Zorg ervoor dat cluster is verbonden met behulp van de Connect-SFCluster opdracht voordat u een configuratieaanvraag maakt met behulp van Microsoft.ServiceFabric.Powershell.Http Module.

    Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080'   -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'  

Geactiveerd herstel

Een herstelbewerking kan worden geactiveerd voor een van de volgende scenario's:

  • Gegevensherstel voor herstel na noodgevallen.
  • Gegevensherstel voor beschadiging/verlies van gegevens.

Gegevensherstel in het geval van herstel na noodgevallen

Als een volledig Service Fabric-cluster verloren gaat, kunt u de gegevens voor de partities van de Reliable Stateful-service en Reliable Actors herstellen. De gewenste back-up kan worden geselecteerd in de lijst wanneer u GetBackupAPI gebruikt met back-upopslagdetails. De back-upinventarisatie kan voor een toepassing, service of partitie zijn.

Voor het volgende voorbeeld wordt ervan uitgegaan dat het verloren cluster hetzelfde cluster is waarnaar wordt verwezen in Enabling periodic backup for Reliable Stateful service en Reliable Actors (Periodieke back-up inschakelen voor Reliable Stateful-service en Reliable Actors). In dit geval SampleApp wordt geïmplementeerd met back-upbeleid ingeschakeld en worden de back-ups geconfigureerd voor Azure Storage.

PowerShell met behulp van Microsoft.ServiceFabric.Powershell.Http-module

Get-SFBackupsFromBackupLocation -Application -ApplicationName 'fabric:/SampleApp' -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container'

Rest Call using Powershell

Voer een PowerShell-script uit om de REST API te gebruiken om een lijst te retourneren van de back-ups die zijn gemaakt voor alle partities in de SampleApp toepassing. De API vereist de back-upopslaggegevens om de beschikbare back-ups weer te geven.

$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

Voorbeelduitvoer voor de bovenstaande uitvoering:

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            :

Kies een van de back-ups om het herstel te activeren. De huidige back-up voor herstel na noodgevallen kan bijvoorbeeld de volgende back-up zijn:

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            :

Voor de herstel-API moet u de details van BackupId en BackupLocation opgeven.

U moet ook een doelpartitie kiezen in het alternatieve cluster, zoals beschreven in het partitieschema. De alternatieve clusterback-up wordt hersteld naar de partitie die is opgegeven in het partitieschema van het oorspronkelijke verloren cluster.

Als de partitie-id op het alternatieve cluster is 1c42c47f-439e-4e09-98b9-88b8f60800c6, kunt u deze toewijzen aan de oorspronkelijke clusterpartitie-id 974bd92a-b395-4631-8a7f-53bd4ae9cf22 door de hoge sleutel en de lage sleutel voor Ranged Partitioning (UniformInt64Partition) te vergelijken.

Voor benoemde partitionering wordt de naamwaarde vergeleken om de doelpartitie in een alternatief cluster te identificeren.

PowerShell met behulp van Microsoft.ServiceFabric.Powershell.Http-module


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'

Rest Call using Powershell

U vraagt de herstelbewerking aan op basis van de back-upclusterpartitie met behulp van de volgende Restore-API:


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

U kunt de voortgang van een herstel bijhouden met TrackRestoreProgress.

Notitie

Wanneer u PowerShell gebruikt om de partitie te herstellen, als backuplocation '$' heeft, kunt u deze escapen met behulp van ~

Met behulp van Service Fabric Explorer

U kunt een herstelbewerking activeren vanuit Service Fabric Explorer. Controleer of de geavanceerde modus is ingeschakeld in Service Fabric Explorer instellingen.

  1. Selecteer de gewenste partities en klik op Acties.

  2. Selecteer Partitieherstel activeren en vul informatie in voor Azure:

    Partitieherstel activeren

    of Bestandsshare:

    Bestandsshare voor partitieherstel activeren

Gegevensherstel voorverliesvan gegevensbeschadiging/

Voor gegevensverlies of beschadiging van gegevens kunnen back-ups van partities voor Reliable Stateful-service en Reliable Actors-partities worden hersteld naar een van de gekozen back-ups.

Het volgende voorbeeld is een voortzetting van Periodieke back-up inschakelen voor Reliable Stateful-service en Reliable Actors. In dit voorbeeld is een back-upbeleid ingeschakeld voor de partitie en maakt de service met de gewenste frequentie back-ups in Azure Storage.

Selecteer een back-up uit de uitvoer van GetBackupAPI. In dit scenario wordt de back-up gegenereerd op basis van hetzelfde cluster als voorheen.

Als u het herstel wilt activeren, kiest u een back-up in de lijst. Selecteer de volgende back-up voor dehuidige beschadiging van gegevensverlies/:

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            :

Geef voor de restore-API de details van BackupId en BackupLocation op. Voor het cluster is back-up ingeschakeld, zodat de Service Fabric Backup Restore Service (BRS) de juiste opslaglocatie identificeert vanuit het gekoppelde back-upbeleid.

PowerShell met behulp van Microsoft.ServiceFabric.Powershell.Http-module

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'

Rest Call using 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'

U kunt de voortgang van het herstel bijhouden met behulp van TrackRestoreProgress.

Notitie

Wanneer u PowerShell gebruikt om de partitie te herstellen, als backuplocation '$' heeft, kunt u deze escapen met behulp van ~

Voortgang van herstel bijhouden

Een partitie van een Reliable Stateful service of Reliable Actor accepteert slechts één herstelaanvraag tegelijk. Een partitie accepteert alleen een andere aanvraag nadat de huidige herstelaanvraag is voltooid. Meerdere herstelaanvragen kunnen tegelijkertijd op verschillende partities worden geactiveerd.

PowerShell met behulp van Microsoft.ServiceFabric.Powershell.Http-module

    Get-SFPartitionRestoreProgress -PartitionId '974bd92a-b395-4631-8a7f-53bd4ae9cf22'

Rest Call using 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

De herstelaanvraag wordt in de volgende volgorde uitgevoerd:

  1. Geaccepteerd: de status Geaccepteerd herstel geeft aan dat de aangevraagde partitie is geactiveerd met de juiste aanvraagparameters.

    RestoreState  : Accepted
    TimeStampUtc  : 0001-01-01T00:00:00Z
    RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
    RestoredLsn   : 3552
    
  2. InProgress: een InProgress-herstelstatus geeft aan dat er een herstelbewerking plaatsvindt in de partitie met de back-up die in de aanvraag wordt vermeld. De partitie rapporteert de status gegevensverlies .

    RestoreState  : RestoreInProgress
    TimeStampUtc  : 0001-01-01T00:00:00Z
    RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
    RestoredLsn   : 3552
    
  3. Geslaagd, mislukt of time-out: een aangevraagde herstelbewerking kan worden voltooid in een van de volgende statussen. Elke status heeft de volgende betekenis en antwoorddetails:

    • Geslaagd: een geslaagde herstelstatus geeft een herstelde partitiestatus aan. De partitie rapporteert de statussen RestoredEpoch en RestoredLSN , samen met de tijd in UTC.

      RestoreState  : Success
      TimeStampUtc  : 2018-11-22T11:22:33Z
      RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
      RestoredLsn   : 3552
      
    • Fout: een foutherstelstatus geeft de fout van de herstelaanvraag aan. De oorzaak van de fout wordt gerapporteerd.

      RestoreState  : Failure
      TimeStampUtc  : 0001-01-01T00:00:00Z
      RestoredEpoch : 
      RestoredLsn   : 0
      
    • Time-out: een time-outherstelstatus geeft aan dat de aanvraag een time-out heeft. Maak een nieuwe herstelaanvraag met een grotere RestoreTimeout. De standaardtime-out is 10 minuten. Zorg ervoor dat de partitie niet de status gegevensverlies heeft voordat u opnieuw herstel aanvraagt.

      RestoreState  : Timeout
      TimeStampUtc  : 0001-01-01T00:00:00Z
      RestoredEpoch : 
      RestoredLsn   : 0
      

Automatisch herstellen

U kunt reliable stateful service- en Reliable Actors-partities in het Service Fabric-cluster configureren voor automatisch herstel. In het back-upbeleid ingesteld AutoRestore op true. Als u automatisch herstellen inschakelt, worden gegevens uit de meest recente partitieback-up automatisch hersteld wanneer gegevensverlies wordt gerapporteerd. Zie voor meer informatie:

Volgende stappen