Periodieke back-up en herstel in een zelfstandige Service Fabric

Service Fabric is een platform voor gedistribueerde systemen waarmee u eenvoudig betrouwbare, gedistribueerde, op microservices gebaseerde cloudtoepassingen kunt ontwikkelen en beheren. Hiermee kunnen zowel staatloze als stateful microservices worden uitgevoerd. Stateful services kunnen veranderlijke, gezaghebbende status behouden buiten de aanvraag en reactie of een volledige transactie. Als een Stateful-service lange tijd uitvalt of informatie verliest vanwege een noodgeval, moet deze mogelijk worden hersteld naar een recente back-up van de status om de service te kunnen blijven bieden nadat deze weer is hersteld.

Service Fabric repliceert de status op meerdere knooppunten om ervoor te zorgen dat de service maximaal beschikbaar is. Zelfs als één knooppunt in het cluster uitvalt, blijft de service beschikbaar. In bepaalde gevallen is het echter nog steeds wenselijk dat de servicegegevens betrouwbaar zijn tegen bredere storingen.

Een service moet bijvoorbeeld een back-up maken van de gegevens om te beschermen tegen de volgende scenario's:

  • Permanent verlies van een volledig Service Fabric-cluster.
  • Permanent verlies van een meerderheid van de replica's van een servicepartitie
  • Beheerfouten waarbij de status per ongeluk wordt verwijderd of beschadigd. Een beheerder met voldoende bevoegdheden verwijdert bijvoorbeeld ten onrechte de service.
  • Fouten in de service die gegevensbeschadiging veroorzaken. Dit kan bijvoorbeeld gebeuren wanneer een servicecode-upgrade begint met het schrijven van onjuiste gegevens naar een betrouwbare verzameling. In een dergelijk geval moeten zowel de code als de gegevens mogelijk worden teruggezet naar een eerdere status.
  • Offline gegevensverwerking. Het kan handig zijn om offline verwerking van gegevens voor business intelligence te hebben die afzonderlijk plaatsvindt van de service die de gegevens genereert.

Service Fabric biedt een ingebouwde API voor back-up en herstel naar een bepaald tijdstip. Toepassingsontwikkelaars kunnen deze API's gebruiken om periodiek een back-up te maken van de status van de service. Als servicebeheerders op een bepaald moment een back-up van buiten de service willen activeren (bijvoorbeeld voordat de toepassing wordt bijgewerkt), moeten ontwikkelaars bovendien back-ups (en herstellen) beschikbaar maken als een API van de service. Het onderhouden van de back-ups zijn extra kosten boven dit. U kunt bijvoorbeeld elk half uur vijf incrementele back-ups maken, gevolgd door een volledige back-up. Na de volledige back-up kunt u de eerdere incrementele back-ups verwijderen. Voor deze aanpak is extra code vereist, wat leidt tot extra kosten tijdens het ontwikkelen van toepassingen.

Een periodieke back-up van de toepassingsgegevens is een basisbehoefte voor het beheren van een gedistribueerde toepassing en bescherming tegen gegevensverlies of langdurig verlies van servicebeschikbaarheid. Service Fabric biedt een optionele back-up- en herstelservice, waarmee u periodieke back-ups van stateful Reliable Services (inclusief Actor Services) kunt configureren zonder dat u aanvullende code hoeft te schrijven. Het vereenvoudigt ook het herstellen van eerder gemaakte back-ups.

Service Fabric biedt een set API's voor het bereiken van de volgende functionaliteit met betrekking tot de functie voor periodieke back-up en herstel:

  • Plan periodieke back-ups van Reliable Stateful-services en Reliable Actors met ondersteuning voor het uploaden van back-ups naar (externe) opslaglocaties. Ondersteunde opslaglocaties
    • Azure Storage
    • Bestandsshare (on-premises)
  • Back-ups opsommen
  • Een niet-geplande back-up van een partitie activeren
  • Een partitie herstellen met behulp van een vorige back-up
  • Back-ups tijdelijk onderbreken
  • Bewaarbeheer van back-ups (binnenkort)

Vereisten

  • Service Fabric-cluster met Fabric-versie 6.4 of hoger. Raadpleeg dit artikel voor stappen voor het downloaden van het vereiste pakket.

  • X.509-certificaat voor versleuteling van geheimen die nodig zijn om verbinding te maken met opslag om back-ups op te slaan. Raadpleeg het artikel voor informatie over het verkrijgen of maken van een zelfondertekend X.509-certificaat.

  • Betrouwbare Stateful Service Fabric-toepassing die is gebouwd met Service Fabric SDK versie 3.0 of hoger. Voor toepassingen die zijn gericht op .NET Core 2.0, moet de toepassing worden gebouwd met Service Fabric SDK versie 3.1 of hoger.

  • 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 kleiner 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 het 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'  

Back-up- en herstelservice inschakelen

Eerst moet u de back-up- en herstelservice in uw cluster inschakelen. Haal de sjabloon op voor het cluster dat u wilt implementeren. U kunt de voorbeeldsjablonen gebruiken. Schakel de back-up- en herstelservice in met de volgende stappen:

  1. Controleer of de apiversion is ingesteld op 10-2017 in het clusterconfiguratiebestand en zo niet, werk deze bij zoals wordt weergegeven in het volgende fragment:

    {
        "apiVersion": "10-2017",
        "name": "SampleCluster",
        "clusterConfigurationVersion": "1.0.0",
        ...
    }
    
  2. Schakel nu de back-up- en herstelservice in door de volgende addonFeatures sectie toe te voegen onder properties sectie, zoals wordt weergegeven in het volgende fragment:

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. X.509-certificaat configureren voor versleuteling van referenties. Dit is belangrijk om ervoor te zorgen dat de opgegeven referenties, indien aanwezig, om verbinding te maken met de opslag, worden versleuteld voordat ze behouden blijven. Configureer het versleutelingscertificaat door de volgende BackupRestoreService sectie toe te voegen onder fabricSettings sectie, zoals wordt weergegeven in het volgende codefragment:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [{
            "name": "BackupRestoreService",
            "parameters":  [{
                "name": "SecretEncryptionCertThumbprint",
                "value": "[Thumbprint]"
            },
            {
                "name": "SecretEncryptionCertX509StoreName",
                "value": "My"
            }]
        }
        ...
    }
    

    Notitie

    [Vingerafdruk] moet worden vervangen door een geldige certificaatvingerafdruk om te worden gebruikt voor versleuteling.

  4. Nadat u het clusterconfiguratiebestand hebt bijgewerkt met de voorgaande wijzigingen, past u deze toe en laat u de implementatie/upgrade voltooien. Zodra dit is voltooid, wordt de back-up- en herstelservice uitgevoerd in uw cluster. De URI van deze service is fabric:/System/BackupRestoreService en de service kan zich bevinden onder de sectie Systeemservice in de Service Fabric-verkenner.

Periodieke back-up inschakelen voor Reliable Stateful Service en Reliable Actors

Laten we de stappen doorlopen om periodieke back-ups in te schakelen voor Reliable Stateful service en Reliable Actors. Bij deze stappen wordt ervan uitgegaan dat

  • Het cluster is geconfigureerd met back-up en herstel service_.
  • Er wordt een Reliable Stateful-service geïmplementeerd op het cluster. Voor deze snelstartgids is fabric:/SampleAppfabric:/SampleApp/MyStatefulServicede toepassings-URI en de URI voor reliable stateful service die deel uitmaakt van deze toepassing. Deze service wordt geïmplementeerd met één partitie en de partitie-id is 23aebc1e-e9ea-4e16-9d5c-e91a614fefa7.

Back-upbeleid maken

De eerste stap is het maken van back-upbeleid met een beschrijving van het back-upschema, de doelopslag voor back-upgegevens, de beleidsnaam en het maximum aantal incrementele back-ups dat moet worden toegestaan voordat volledige back-up en bewaarbeleid voor back-upopslag worden geactiveerd.

Voor back-upopslag maakt u een bestandsshare en geeft u ReadWrite-toegang tot deze bestandsshare voor alle Service Fabric Node-machines. In dit voorbeeld wordt ervan uitgegaan dat de share met de naam BackupStore aanwezig is op StorageServer.

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


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -FileShare -Path '\\StorageServer\BackupStore' -Basic -RetentionDuration '10.00:00:00'

Rest-oproep met Behulp van PowerShell

Voer het volgende PowerShell-script uit voor het aanroepen van de vereiste REST API om nieuw beleid te maken.

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

Service Fabric Explorer gebruiken

  1. Ga in Service Fabric Explorer naar het tabblad Back-ups en selecteer Acties > Back-upbeleid maken.

    Back-upbeleid maken

  2. Vul de gegevens in. Voor zelfstandige clusters moet FileShare zijn geselecteerd.

    Back-upbeleidsbestandsshare maken

Periodieke back-up inschakelen

Nadat u beleid hebt gedefinieerd om te voldoen aan de vereisten voor gegevensbescherming van de toepassing, moet het back-upbeleid worden gekoppeld aan de toepassing. Afhankelijk van de vereiste kan het back-upbeleid worden gekoppeld aan een toepassing, service of een partitie.

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

Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'

Rest-oproep met Behulp van PowerShell

Voer het volgende PowerShell-script uit voor het aanroepen van de vereiste REST API om back-upbeleid te koppelen aan de naam BackupPolicy1 die in de bovenstaande stap is gemaakt met de toepassing 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'

Service Fabric Explorer gebruiken

  1. Selecteer een toepassing en ga naar actie. Klik op Back-up van toepassing inschakelen/bijwerken.

    Back-up van toepassing inschakelen

  2. Selecteer ten slotte het gewenste beleid en selecteer Back-up inschakelen.

    Beleid selecteren

Controleren of periodieke back-ups werken

Nadat de back-up voor de toepassing is ingeschakeld, wordt er regelmatig een back-up gemaakt van alle partities die behoren tot Reliable Stateful-services en Reliable Actors onder de toepassing, volgens het bijbehorende back-upbeleid.

Statusgebeurtenis Partition BackedUp

Back-ups weergeven

Back-ups die zijn gekoppeld aan alle partities die behoren tot Reliable Stateful-services en Reliable Actors van de toepassing, kunnen worden geïnventariseerd met behulp van de GetBackups-API . Afhankelijk van de vereiste kunnen de back-ups worden geïnventariseerd voor toepassing, service of een partitie.

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

    Get-SFApplicationBackupList -ApplicationId WordCount     

Rest-oproep met Behulp van PowerShell

Voer het volgende PowerShell-script uit om de HTTP-API aan te roepen om de back-ups op te sommen die zijn gemaakt voor alle partities in de SampleApp toepassing.

$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

Voorbeelduitvoer voor de bovenstaande uitvoering:

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            : 

Service Fabric Explorer gebruiken

Als u back-ups in Service Fabric Explorer wilt bekijken, gaat u naar een partitie en selecteert u het tabblad Back-ups.

Back-ups opsommen

Beperking/voorbehoud

  • Service Fabric PowerShell-cmdlets bevinden zich in de preview-modus.
  • Geen ondersteuning voor Service Fabric-clusters in Linux.

Volgende stappen