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-88b8f60800c6
ID 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.
Vyberte požadované oddíly a klikněte na Akce.
Vyberte Trigger Partition Restore (Aktivovat obnovení oddílu) a vyplňte informace pro Azure:
nebo FileShare:
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í:
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
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
Ú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:
- Povolení automatického obnovení v zásadách zálohování
- Referenční informace k rozhraní API RestorePartition
- Referenční informace k rozhraní API GetPartitionRestoreProgress