Regelbunden säkerhetskopiering och återställning i ett Azure Service Fabric-kluster

Service Fabric är en distribuerad systemplattform som gör det enkelt att utveckla och hantera tillförlitliga, distribuerade mikrotjänstbaserade molnprogram. Det tillåter körning av både tillståndslösa och tillståndskänsliga mikrotjänster. Tillståndskänsliga tjänster kan upprätthålla föränderligt, auktoritativt tillstånd utöver begäran och svar eller en fullständig transaktion. Om en tillståndskänslig tjänst går ned under en längre tid eller förlorar information på grund av en katastrof, kan den behöva återställas till en ny säkerhetskopia av sitt tillstånd för att fortsätta tillhandahålla tjänsten när den kommer tillbaka.

Service Fabric replikerar tillståndet över flera noder för att säkerställa att tjänsten är högtillgänglig. Även om en nod i klustret misslyckas fortsätter tjänsten att vara tillgänglig. I vissa fall är det dock fortfarande önskvärt att tjänstdata är tillförlitliga mot bredare fel.

Tjänsten kanske till exempel vill säkerhetskopiera sina data för att skydda mot följande scenarier:

  • I händelse av permanent förlust av ett helt Service Fabric-kluster.
  • Permanent förlust av en majoritet av replikerna i en tjänstpartition
  • Administrativa fel där tillståndet av misstag tas bort eller skadas. En administratör med tillräcklig behörighet tar till exempel bort tjänsten felaktigt.
  • Buggar i tjänsten som orsakar skadade data. Detta kan till exempel inträffa när en tjänstkoduppgradering börjar skriva felaktiga data till en tillförlitlig samling. I sådana fall kan både koden och data behöva återställas till ett tidigare tillstånd.
  • Databearbetning offline. Det kan vara praktiskt att arbeta offline med data för business intelligence som sker separat från tjänsten som genererar data.

Service Fabric tillhandahåller ett inbyggt API för säkerhetskopiering och återställning till tidpunkt. Programutvecklare kan använda dessa API:er för att säkerhetskopiera tjänstens tillstånd regelbundet. Om tjänstadministratörer dessutom vill utlösa en säkerhetskopia utanför tjänsten vid en viss tidpunkt, till exempel innan de uppgraderar programmet, måste utvecklarna exponera säkerhetskopiering (och återställning) som ett API från tjänsten. Att underhålla säkerhetskopiorna är en extra kostnad utöver detta. Du kanske till exempel vill göra fem inkrementella säkerhetskopior varje halvtimme, följt av en fullständig säkerhetskopia. Efter den fullständiga säkerhetskopieringen kan du ta bort de tidigare inkrementella säkerhetskopiorna. Den här metoden kräver ytterligare kod som leder till ytterligare kostnader under programutvecklingen.

Säkerhetskopierings- och återställningstjänsten i Service Fabric möjliggör enkel och automatisk säkerhetskopiering av information som lagras i tillståndskänsliga tjänster. Att säkerhetskopiera programdata regelbundet är grundläggande för att skydda mot dataförlust och otillgängliga tjänster. Service Fabric tillhandahåller en valfri säkerhetskopierings- och återställningstjänst som gör att du kan konfigurera regelbunden säkerhetskopiering av tillståndskänsliga Reliable Services (inklusive Aktörstjänster) utan att behöva skriva någon ytterligare kod. Det underlättar också återställning av säkerhetskopieringar som tagits tidigare.

Service Fabric tillhandahåller en uppsättning API:er för att uppnå följande funktioner som rör regelbunden säkerhetskopiering och återställning:

  • Schemalägg regelbunden säkerhetskopiering av Reliable Stateful-tjänster och Reliable Actors med stöd för att ladda upp säkerhetskopiering till (externa) lagringsplatser. Lagringsplatser som stöds
    • Azure Storage
    • Filresurs (lokalt)
  • Räkna upp säkerhetskopior
  • Utlösa en ad hoc-säkerhetskopiering av en partition
  • Återställa en partition med föregående säkerhetskopia
  • Tillfälligt pausa säkerhetskopieringar
  • Kvarhållningshantering av säkerhetskopior (kommande)

Förutsättningar

  • Service Fabric-kluster med Fabric version 6.4 eller senare. I den här artikeln finns steg för att skapa Service Fabric-kluster med hjälp av Azure-resursmallen.
  • X.509-certifikat för kryptering av hemligheter som behövs för att ansluta till lagring för att lagra säkerhetskopior. Läs artikeln om hur du hämtar eller skapar ett X.509-certifikat.
  • Service Fabric Reliable Stateful-program som skapats med Service Fabric SDK version 3.0 eller senare. För program som riktar sig till .NET Core 2.0 bör programmet skapas med Service Fabric SDK version 3.1 eller senare.
  • Skapa Azure Storage-konto för lagring av programsäkerhetskopior.
  • Installera Microsoft.ServiceFabric.Powershell.Http-modulen (förhandsversion) för konfigurationsanrop.
    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Anteckning

Om din PowerShellGet-version är mindre än 1.6.0 måste du uppdatera för att lägga till stöd för flaggan -AllowPrerelease :

Install-Module -Name PowerShellGet -Force

  • Kontrollera att klustret är anslutet Connect-SFCluster med kommandot innan du gör en konfigurationsbegäran med hjälp av Modulen 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'

Aktivera säkerhetskopierings- och återställningstjänst

Använda Azure Portal

Aktivera Include backup restore service kryssrutan under + Show optional settingsCluster Configuration fliken.

Aktivera återställningstjänsten för säkerhetskopiering med portalen

Använda Azure Resource Manager-mall

Först måste du aktivera säkerhetskopierings- och återställningstjänsten i klustret. Hämta mallen för klustret som du vill distribuera. Du kan antingen använda exempelmallarna eller skapa en Resource Manager mall. Aktivera säkerhetskopierings- och återställningstjänsten med följande steg:

  1. Kontrollera att apiversion är inställt på 2018-02-01 för resursen Microsoft.ServiceFabric/clusters , och annars uppdaterar du den enligt följande kodfragment:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Aktivera nu säkerhetskopierings- och återställningstjänsten genom att lägga till följande addonFeatures avsnitt under properties avsnittet enligt följande kodfragment:

        "properties": {
            ...
            "addonFeatures":  ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Konfigurera X.509-certifikat för kryptering av autentiseringsuppgifter. Detta är viktigt för att säkerställa att de autentiseringsuppgifter som tillhandahålls för att ansluta till lagring krypteras innan de sparas. Konfigurera krypteringscertifikat genom att lägga till följande BackupRestoreService avsnitt under fabricSettings avsnittet enligt följande kodfragment:

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

    Anteckning

    [Tumavtryck] måste ersättas med ett giltigt certifikattumavtryck som ska användas för kryptering.

  4. När du har uppdaterat klustermallen med föregående ändringar tillämpar du dem och låter distributionen/uppgraderingen slutföras. När du är klar börjar säkerhetskopierings- och återställningstjänsten köras i klustret. Uri:n för den här tjänsten är fabric:/System/BackupRestoreService och tjänsten kan finnas under avsnittet systemtjänst i Service Fabric Explorer.

Aktivera regelbunden säkerhetskopiering för Reliable Stateful-tjänsten och Reliable Actors

Nu ska vi gå igenom stegen för att aktivera regelbunden säkerhetskopiering för Reliable Stateful-tjänsten och Reliable Actors. De här stegen förutsätter

  • Att klustret konfigureras med X.509-säkerhet med säkerhetskopierings- och återställningstjänsten.
  • En Reliable Stateful-tjänst distribueras i klustret. I den här snabbstartsguiden är fabric:/SampleApp program-URI:n och Uri för Reliable Stateful-tjänsten som tillhör det här programmet är fabric:/SampleApp/MyStatefulService. Den här tjänsten distribueras med en enda partition och partitions-ID:t är 974bd92a-b395-4631-8a7f-53bd4ae9cf22.
  • Klientcertifikatet med administratörsrollen installeras i Mitt (personligt) butiksnamn för CurrentUser-certifikatarkivet på datorn där skripten nedan kommer att anropas. Det här exemplet används 1b7ebe2174649c45474a4819dafae956712c31d3 som tumavtryck för det här certifikatet. Mer information om klientcertifikat finns i Rollbaserad åtkomstkontroll för Service Fabric-klienter.

Skapa säkerhetskopieringspolicy

Det första steget är att skapa en säkerhetskopieringsprincip som beskriver schemat för säkerhetskopiering, mållagring för säkerhetskopieringsdata, principnamn, maximalt antal inkrementella säkerhetskopieringar som ska tillåtas innan du utlöser en fullständig säkerhetskopierings- och kvarhållningsprincip för lagring av säkerhetskopior.

För lagring av säkerhetskopior använder du Azure Storage-kontot som skapades ovan. Containern backup-container är konfigurerad för att lagra säkerhetskopior. En container med det här namnet skapas, om den inte redan finns, under uppladdningen av säkerhetskopian. ConnectionString Fyll i med en giltig anslutningssträng för Azure Storage-kontot, ersätt account-name med ditt lagringskontonamn och account-key med lagringskontonyckeln.

PowerShell med hjälp av Modulen Microsoft.ServiceFabric.Powershell.Http

Kör följande PowerShell-cmdletar för att skapa en ny säkerhetskopieringsprincip. Ersätt account-name med namnet på lagringskontot och account-key med lagringskontonyckeln.


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container' -Basic -RetentionDuration '10.00:00:00'

Vilosamtal med PowerShell

Kör följande PowerShell-skript för att anropa rest-API:et som krävs för att skapa en ny princip. Ersätt account-name med namnet på lagringskontot och account-key med lagringskontonyckeln.

$StorageInfo = @{
    ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
    ContainerName = 'backup-container'
    StorageKind = 'AzureBlobStore'
}

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

Använda Service Fabric Explorer

  1. I Service Fabric Explorer går du till fliken Säkerhetskopieringar och väljer Åtgärder > Skapa säkerhetskopieringsprincip.

    Skapa säkerhetskopieringsprincip

  2. Fyll i informationen. Mer information om hur du anger ett frekvensbaserat intervall finns i egenskapen TimeGrain. För Azure-kluster bör AzureBlobStore väljas.

    Skapa Azure Blob Storage för säkerhetskopieringspolicy

Aktivera periodisk säkerhetskopiering

När du har definierat säkerhetskopieringspolicyn för att uppfylla programmets dataskyddskrav ska säkerhetskopieringsprincipen associeras med programmet. Beroende på krav kan säkerhetskopieringspolicyn associeras med ett program, en tjänst eller en partition.

PowerShell med hjälp av Modulen Microsoft.ServiceFabric.Powershell.Http


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

Vilosamtal med PowerShell

Kör följande PowerShell-skript för att anropa rest-API:et som krävs för att associera säkerhetskopieringspolicyn med namnet BackupPolicy1 som skapades i ovanstående steg med programmet 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'

Använda Service Fabric Explorer

Kontrollera att avancerat läge för Service Fabric Explorer är aktiverat

  1. Klicka på kugghjulet längst upp till höger i SF Explorer-fönstret.

  2. Markera kryssrutan för "Avancerat läge" och uppdatera sidan SF Explorer.

  3. Välj ett program och gå till åtgärd. Klicka på Aktivera/uppdatera programsäkerhetskopiering.

    Aktivera programsäkerhetskopiering

  4. Välj slutligen önskad princip och klicka på Aktivera säkerhetskopiering.

    Välj princip

Kontrollera att regelbundna säkerhetskopieringar fungerar

När du har aktiverat säkerhetskopiering på programnivå börjar alla partitioner som tillhör Reliable Stateful-tjänster och Reliable Actors under programmet att säkerhetskopieras regelbundet enligt den associerade säkerhetskopieringsprincipen.

Partition BackedUp Health-händelse

Lista säkerhetskopior

Säkerhetskopior som är associerade med alla partitioner som tillhör Reliable Stateful-tjänster och Reliable Actors i programmet kan räknas upp med hjälp av GetBackups API. Säkerhetskopior kan räknas upp för ett program, en tjänst eller en partition.

PowerShell med hjälp av Modulen Microsoft.ServiceFabric.Powershell.Http


Get-SFApplicationBackupList -ApplicationId WordCount

Vilosamtal med PowerShell

Kör följande PowerShell-skript för att anropa HTTP-API:et för att räkna upp säkerhetskopiorna som skapats för alla partitioner i SampleApp programmet.

$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

Exempel på utdata för ovanstående körning:

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            :

Använda Service Fabric Explorer

Om du vill visa säkerhetskopior i Service Fabric Explorer går du till en partition och väljer fliken Säkerhetskopieringar.

Räkna upp säkerhetskopior

Begränsningar/varningar

  • Service Fabric PowerShell-cmdletar är i förhandsgranskningsläge.
  • Inget stöd för Service Fabric-kluster i Linux.

Nästa steg