Obnovení zálohy v Azure Service Fabric

Ve službě Azure Service Fabric můžou spolehlivé stavové služby a reliable actors udržovat proměnlivý a autoritativní stav po dokončení transakce požadavku a odpovědi. Stavová služba může být dlouho mimo provoz nebo může ztratit informace kvůli havárii. V takovém případě je potřeba obnovit službu z nejnovější přijatelné zálohy, aby dál fungovala.

Službu můžete například nakonfigurovat tak, aby zálohovala svá data a chránila ji před následujícími scénáři:

  • Případ zotavení po havárii: Trvalá ztráta celého clusteru Service Fabric.
  • Případ ztráty dat: Trvalá ztráta většiny replik oddílu služby.
  • Případ ztráty dat: Náhodné odstranění nebo poškození služby. Správce například chybně odstraní službu.
  • Případ poškození dat: Chyby ve službě způsobují poškození dat. K poškození dat může dojít například v případě, že upgrade kódu služby zapíše chybná data do spolehlivé kolekce. V takovém případě možná budete muset obnovit kód i data do dřívějšího stavu.

Požadavky

  • Pokud chcete aktivovat obnovení, musí být pro cluster povolená služba Fault Analysis Service (FAS).
  • Zálohu vytvořila služba obnovení zálohování (BRS).
  • Obnovení je možné aktivovat pouze v oddílu.
  • Nainstalujte modul Microsoft.ServiceFabric.Powershell.Http (Preview) pro volání konfigurace.
    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Poznámka

Pokud je vaše verze PowerShellGet menší než 1.6.0, budete muset aktualizovat, abyste přidali podporu příznaku -AllowPrerelease :

Install-Module -Name PowerShellGet -Force

  • Před provedením jakékoli žádosti o konfiguraci pomocí modulu Microsoft.ServiceFabric.Powershell.Http se ujistěte, že je cluster připojený pomocí Connect-SFCluster příkazu .

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

Aktivované obnovení

Obnovení je možné aktivovat v některém z následujících scénářů:

  • Obnovení dat pro zotavení po havárii.
  • Obnovení dat kvůli poškození nebo ztrátě dat.

Obnovení dat v případě zotavení po havárii

Pokud dojde ke ztrátě celého clusteru Service Fabric, můžete obnovit data pro oddíly služby Reliable Stateful a Reliable Actors. Požadovaná záloha se dá vybrat ze seznamu, když použijete GetBackupAPI s podrobnostmi o úložišti zálohování. Výčet záloh může být pro aplikaci, službu nebo oddíl.

V následujícím příkladu předpokládejme, že ztracený cluster je stejný cluster, na který se odkazuje v tématu Povolení pravidelného zálohování pro spolehlivou stavovou službu a Reliable Actors. V tomto případě SampleApp se nasadí s povolenými zásadami zálohování a zálohy se nakonfigurují na Azure Storage.

PowerShell pomocí modulu Microsoft.ServiceFabric.Powershell.Http

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

Volání rest pomocí PowerShellu

Spusťte skript PowerShellu, který použije rozhraní REST API k vrácení seznamu záloh vytvořených pro všechny oddíly v aplikaci SampleApp . Rozhraní API vyžaduje informace o úložišti zálohování, aby bylo možné zobrazit seznam dostupných záloh.

$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

Ukázkový výstup pro výše uvedené spuštění:

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            :

Pokud chcete aktivovat obnovení, zvolte jednu ze záloh. Aktuální záloha pro zotavení po havárii může být například následující:

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            :

Pro rozhraní API pro obnovení musíte zadat podrobnosti BackupId a BackupLocation .

Musíte také zvolit cílový oddíl v alternativním clusteru, jak je podrobně popsáno v schématu oddílů. Alternativní zálohování clusteru se obnoví do oddílu zadaného ve schématu oddílů z původního ztraceného clusteru.

Pokud je 1c42c47f-439e-4e09-98b9-88b8f60800c6ID oddílu v alternativním clusteru , můžete ho namapovat na původní ID 974bd92a-b395-4631-8a7f-53bd4ae9cf22 oddílu clusteru porovnáním klíče s vysokým a nízkým klíčem pro ranged partitioning (UniformInt64Partition).

V případě pojmenovaného dělení se hodnota názvu porovná za účelem identifikace cílového oddílu v alternativním clusteru.

PowerShell pomocí modulu Microsoft.ServiceFabric.Powershell.Http


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'

Volání rest pomocí PowerShellu

K žádosti o obnovení oddílu clusteru zálohování použijte následující rozhraní API pro obnovení:


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

Průběh obnovení můžete sledovat pomocí trackRestoreProgress.

Poznámka

Pokud k obnovení oddílu používáte PowerShell, pokud má backuplocation hodnotu $, umisťujte ji pomocí rutiny ~.

Použití Service Fabric Explorer

Obnovení můžete aktivovat z Service Fabric Explorer. Ujistěte se, že je v nastavení Service Fabric Explorer povolený rozšířený režim.

  1. Vyberte požadované oddíly a klikněte na Akce.

  2. Vyberte Trigger Partition Restore (Aktivovat obnovení oddílu) a vyplňte informace pro Azure:

    Aktivace obnovení oddílu

    nebo FileShare:

    Aktivace sdílené složky obnovení oddílu

Obnovení dat kvůli poškození/dat o ztrátě dat

V případě ztráty nebopoškození dat je možné zálohované oddíly pro spolehlivou stavovou službu a oddíly Reliable Actors obnovit do libovolné ze zvolených záloh.

Následující příklad je pokračováním povolení pravidelného zálohování pro Reliable Stateful Service a Reliable Actors. V tomto příkladu je pro oddíl povolená zásada zálohování a služba provádí zálohy ve službě Azure Storage s požadovanou frekvencí.

Vyberte zálohu z výstupu GetBackupAPI. V tomto scénáři se záloha vygeneruje ze stejného clusteru jako předtím.

Pokud chcete aktivovat obnovení, zvolte zálohu ze seznamu. Pro aktuálnípoškození datztráty/ dat vyberte následující zálohu:

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            :

Pro rozhraní API pro obnovení zadejte podrobnosti BackupId a BackupLocation . Cluster má povolené zálohování, takže služba obnovení zálohování Service Fabric (BRS) identifikuje správné umístění úložiště z přidružených zásad zálohování.

PowerShell pomocí modulu Microsoft.ServiceFabric.Powershell.Http

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'

Volání rest pomocí PowerShellu

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

Průběh obnovení můžete sledovat pomocí trackRestoreProgress.

Poznámka

Pokud k obnovení oddílu používáte PowerShell, pokud má backuplocation hodnotu $, umisťujte ji pomocí rutiny ~.

Sledování průběhu obnovení

Oddíl spolehlivé stavové služby nebo objektu Reliable Actor přijímá najednou jenom jednu žádost o obnovení. Oddíl přijímá další požadavek pouze po dokončení aktuální žádosti o obnovení. Na různých oddílech je možné současně aktivovat více žádostí o obnovení.

PowerShell pomocí modulu Microsoft.ServiceFabric.Powershell.Http

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

Volání rest pomocí PowerShellu

$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

Žádost o obnovení postupuje v následujícím pořadí:

  1. Přijato: Stav přijatého obnovení označuje, že požadovaný oddíl se aktivoval se správnými parametry požadavku.

    RestoreState  : Accepted
    TimeStampUtc  : 0001-01-01T00:00:00Z
    RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
    RestoredLsn   : 3552
    
  2. InProgress: Stav obnovení InProgress indikuje, že v oddílu probíhá obnovení se zálohou uvedenou v požadavku. Oddíl hlásí stav datového lossu .

    RestoreState  : RestoreInProgress
    TimeStampUtc  : 0001-01-01T00:00:00Z
    RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
    RestoredLsn   : 3552
    
  3. Úspěch, selhání nebo vypršení časového limitu: Požadované obnovení je možné dokončit v některém z následujících stavů. Každý stav má následující význam a podrobnosti o odpovědích:

    • Úspěch: Stav úspěšného obnovení označuje znovunabytý stav oddílu. Oddíl hlásí stavy RestoredEpoch a RestoredLSN společně s časem v UTC.

      RestoreState  : Success
      TimeStampUtc  : 2018-11-22T11:22:33Z
      RestoredEpoch : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
      RestoredLsn   : 3552
      
    • Selhání: Stav obnovení selhání označuje selhání žádosti o obnovení. Je hlášena příčina selhání.

      RestoreState  : Failure
      TimeStampUtc  : 0001-01-01T00:00:00Z
      RestoredEpoch : 
      RestoredLsn   : 0
      
    • Vypršení časového limitu: Stav obnovení časového limitu označuje, že požadavek má časový limit. Vytvořte novou žádost o obnovení s delším časovým limitem obnovení. Výchozí časový limit je 10 minut. Než znovu požádáte o obnovení, ujistěte se, že oddíl není ve stavu ztráty dat.

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

Automatické obnovení

V clusteru Service Fabric můžete nakonfigurovat oddíly Reliable Stateful Service a Reliable Actors pro automatické obnovení. V zásadách zálohování je nastavená AutoRestore hodnota true. Povolením automatického obnovení se automaticky obnoví data z nejnovější zálohy oddílu, když se nahlásí ztráta dat. Další informace naleznete v tématu:

Další kroky