Regelmäßiges Sichern und Wiederherstellen in einem Azure Service Fabric-Cluster
Service Fabric ist eine Plattform für die Entwicklung und Verwaltung zuverlässiger, verteilter Cloudanwendungen. Sie unterstützt zustandslose und zustandsbehaftete Microservices. Zustandsbehaftete Dienste können wichtige Daten über eine einzelne Anforderung oder Transaktion hinaus speichern. Wenn ein zustandsbehafteter Dienst ausfällt oder Daten verliert, muss er möglicherweise aus einer aktuellen Sicherung wiederhergestellt werden, um ordnungsgemäß zu arbeiten.
Service Fabric repliziert den Zustand über mehrere Knoten, um sicherzustellen, dass der Dienst hoch verfügbar ist. Auch wenn ein Knoten im Cluster ausfällt, bleibt der Dienst verfügbar. In bestimmten Fällen ist es jedoch trotzdem wünschenswert, dass die Dienstdaten auch bei größeren Ausfällen zuverlässig bleiben.
Ein Dienst könnte Daten beispielsweise zum Schutz vor folgenden Szenarien sichern:
- Im Fall des dauerhaften Verlusts eines gesamten Service Fabric-Clusters
- Dauerhafter Verlust eines Großteils der Replikate einer Dienstpartition
- Administrative Fehler, durch die der Zustand versehentlich gelöscht oder beschädigt wird. Ein Administrator mit ausreichenden Berechtigungen löscht z.B. versehentlich den Dienst.
- Fehler im Dienst, die zu einer Beschädigung von Daten führen. Dies kann beispielsweise bei einem Dienstcode-Upgrade geschehen, bei dem fehlerhafte Daten in eine Reliable Collection geschrieben werden. In diesem Fall müssen unter Umständen der Code und die Daten in einen früheren Zustand zurückversetzt werden.
- Offline-Datenverarbeitung. Es kann zweckmäßig sein, Daten für Business Intelligence separat von dem Dienst, der die Daten generiert, offline zu verarbeiten.
Service Fabric bietet eine integrierte API zum Sichern und Wiederherstellen des Diensts zu einem bestimmten Zeitpunkt. Anwendungsentwickler können diese APIs verwenden, um den Zustand des Diensts in regelmäßigen Abständen zu sichern. Wenn Dienstadministratoren eine Sicherung zu einem bestimmten Zeitpunkt von außerhalb des Diensts auslösen möchten, wie z.B. vor dem Upgrade der Anwendung, müssen Entwickler zudem das Sichern (und Wiederherstellen) als API über den Dienst verfügbar machen. Für das Verwalten von Sicherungen fallen zusätzliche Kosten an. Sie möchten beispielsweise jede halbe Stunde fünf inkrementelle Sicherungen und dann eine vollständige Sicherung erstellen. Nach der vollständigen Sicherung können Sie die vorherigen inkrementellen Sicherungen löschen. Dieser Ansatz erfordert zusätzlichen Code, der zu zusätzlichen Kosten während der Anwendungsentwicklung führt.
Der Sicherungs- und Wiederherstellungsdienst in Service Fabric ermöglicht die einfache und automatische Sicherung von Informationen, die in zustandsbehafteten Diensten gespeichert sind. Die regelmäßige Sicherung von Anwendungsdaten ist von grundlegender Bedeutung für den Schutz vor Datenverlust und Nichtverfügbarkeit von Diensten. Service Fabric bietet einen optionalen Dienst für Sicherungen und Wiederherstellungen, mit dem Sie die regelmäßige Sicherung der statusbehafteten zuverlässigen Dienste (einschließlich der Actordienste) konfigurieren können, ohne zusätzlichen Code schreiben zu müssen. Damit wird auch das Wiederherstellen der zuvor erstellten Sicherungen vereinfacht.
Service Fabric stellt einen Satz von APIs für die folgende Funktionalität im Zusammenhang mit dem Feature für regelmäßige Sicherungen und Wiederherstellungen bereit:
- Planen regelmäßiger Sicherungen der statusbehafteten zuverlässigen Dienste und der Reliable Actors mit Unterstützung zum Hochladen von Sicherungen in (externe) Speicherorte. Unterstützte Speicherorte
- Azure Storage
- Dateifreigabe (lokal)
- Auflisten von Sicherungen
- Auslösen einer Ad-hoc-Sicherung einer Partition
- Wiederherstellen einer Partition mithilfe der vorherigen Sicherung
- Zeitweiliges Aussetzen von Sicherungen
- Verwalten der Aufbewahrung von Sicherungen (demnächst)
Voraussetzungen
- Service Fabric-Cluster mit Fabric-Version 6.4 oder höher. Schritte zum Erstellen eines Service Fabric-Clusters mit der Azure-Ressourcevorlage finden Sie in diesem Artikel.
- X.509-Zertifikat für die Verschlüsselung der Geheimnisse, die für die Verbindung mit dem Speicher zum Speichern von Sicherungen benötigt werden. Informationen zum Abrufen oder Erstellen eines X.509-Zertifikats finden Sie in diesem Artikel.
- Service Fabric-Anwendung für statusbehaftete zuverlässige Dienste, die mit dem Service Fabric SDK, Version 3.0 oder höher, erstellt wurde. Für Anwendungen für .NET Core 2.0 muss die Anwendung mit dem Service Fabric SDK, Version 3.1 oder höher, erstellt werden.
- Erstellen Sie ein Azure Storage-Konto zum Speichern von Anwendungssicherungen.
- Installieren Sie das Modul Microsoft.ServiceFabric.Powershell.Http, um Konfigurationsaufrufe vorzunehmen.
Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease
Hinweis
Wenn Ihre PowerShellGet-Version kleiner als 1.6.0 ist, müssen Sie ein Update ausführen, um Unterstützung für das -AllowPrerelease-Flag hinzuzufügen:
Install-Module -Name PowerShellGet -Force
- Stellen Sie mit dem Befehl
Connect-SFCluster
sicher, dass der Cluster verbunden ist, bevor Sie Konfigurationsanforderungen mit dem Microsoft.ServiceFabric.Powershell.Http-Modul vornehmen.
Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080' -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
Aktivieren des Diensts für Sicherungen und Wiederherstellungen
Verwenden des Azure-Portals
Aktivieren Sie das Kontrollkästchen Include backup restore service
unter + Show optional settings
auf der Registerkarte Cluster Configuration
.
Verwenden von Azure Resource Manager-Vorlagen
Zuerst müssen Sie den Dienst für Sicherungen und Wiederherstellungen in Ihrem Cluster aktivieren. Rufen Sie die Vorlage für den Cluster ab, den Sie bereitstellen möchten. Sie können entweder die Beispielvorlagen verwenden oder eine Resource Manager-Vorlage erstellen. Aktivieren Sie den Dienst für Sicherungen und Wiederherstellungen mit den folgenden Schritten:
Überprüfen Sie, ob
apiversion
für dieMicrosoft.ServiceFabric/clusters
-Ressource auf2018-02-01
festgelegt ist. Wenn nicht, aktualisieren Sie sie wie im folgenden Codeausschnitt:{ "apiVersion": "2018-02-01", "type": "Microsoft.ServiceFabric/clusters", "name": "[parameters('clusterName')]", "location": "[parameters('clusterLocation')]", ... }
Jetzt aktivieren Sie den Dienst für Sicherungen und Wiederherstellungen wie im folgenden Codeausschnitt, indem Sie den folgenden
addonFeatures
-Abschnitt unter dem Abschnittproperties
hinzufügen:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
Konfigurieren Sie das X.509-Zertifikat für die Verschlüsselung der Anmeldeinformationen. Dies ist wichtig, um sicherzustellen, dass die Anmeldeinformationen, die für die Verbindung mit dem Speicher bereitgestellt wurden, vor dem Speichern verschlüsselt werden. Konfigurieren Sie das Verschlüsselungszertifikat wie im folgenden Codeausschnitt, indem Sie den folgenden
BackupRestoreService
-Abschnitt unter dem AbschnittfabricSettings
hinzufügen:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ { "name": "BackupRestoreService", "parameters": [ { "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" } ] }] ... }
Hinweis
[Fingerabdruck] muss durch einen gültigen Zertifikatfingerabdruck ersetzt werden, der für die Verschlüsselung verwendet werden soll.
Nachdem Sie die Clustervorlage mit den vorhergehenden Änderungen aktualisiert haben, wenden Sie die Änderungen an und schließen die Bereitstellung/das Upgrade ab. Anschließend wird der Dienst für Sicherungen und Wiederherstellungen im Cluster gestartet. Der URI für diesen Dienst lautet
fabric:/System/BackupRestoreService
, und Sie finden den Dienst im Abschnitt mit Systemdiensten im Service Fabric Explorer.
Aktivieren der regelmäßigen Sicherung für den zuverlässigen zustandsbehafteten Dienst und Reliable Actors
Jetzt erläutern wir schrittweise das Aktivieren der regelmäßigen Sicherung für den zuverlässigen zustandsbehafteten Dienst und Reliable Actors. Diese Schritte setzen Folgendes voraus:
- Der Cluster wurde unter Verwendung von X.509-Sicherheit mit dem Dienst für Sicherungen und Wiederherstellungen eingerichtet.
- Ein zuverlässiger zustandsbehafteter Dienst wurde im Cluster bereitgestellt. Für diese Schnellstartanleitung lautet der Anwendungs-URI
fabric:/SampleApp
, und der URI für den zuverlässigen zustandsbehafteten Dienst, der zu dieser Anwendung gehört, lautetfabric:/SampleApp/MyStatefulService
. Dieser Dienst wird mit einer einzelnen Partition bereitgestellt, und die Partitions-ID ist974bd92a-b395-4631-8a7f-53bd4ae9cf22
. - Das Clientzertifikat mit der Administratorrolle wird im Speichernamen My (Personal) im Speicherort des CurrentUser-Zertifikatspeichers auf dem Computer installiert, auf dem die Skripts aufgerufen werden. In diesem Beispiel wird
1b7ebe2174649c45474a4819dafae956712c31d3
als Fingerabdruck dieses Zertifikats verwendet. Weitere Informationen zu Clientzertifikaten finden Sie unter Rollenbasierte Zugriffssteuerung für Service Fabric-Clients.
Erstellen der Sicherungsrichtlinie
Im ersten Schritt wird eine Sicherungsrichtlinie erstellt. Diese Richtlinie sollte den Sicherungszeitplan, den Zielspeicher für die Sicherungsdaten, den Richtliniennamen, die maximale Anzahl inkrementeller Sicherungen, die zulässig sind, bevor eine vollständige Sicherung ausgelöst wird, und die Aufbewahrungsrichtlinie für den Sicherungsspeicher enthalten.
Verwenden Sie für den Sicherungsspeicher das oben erstellte Azure Storage-Konto. Container backup-container
ist zum Speichern von Sicherungen konfiguriert. Ein Container mit diesem Namen wird während des Sicherungsuploads erstellt, falls er nicht bereits vorhanden ist. Füllen Sie BlobServiceUri
mit der Azure Storage-Konto-URL auf, wobei Sie account-name
durch den Namen Ihres Speicherkontos ersetzen und den optionalen Parameter ManagedIdentityClientId
mit der Client-ID der vom Benutzer zugewiesenen verwalteten Identität auffüllen, falls Ihrer Ressource mehrere verwaltete Identitäten zugewiesen sind.
Führen Sie die Schritte für die Zuordnung verwalteter Identitäten in Azure-Ressourcen aus:
Aktivieren der vom System zugewiesenen oder vom Benutzer zugewiesenen verwalteten Identität in den Virtual Machine Scale Sets Konfigurieren verwalteter Identitäten in Virtual Machine Scale Sets
Zuweisen einer Rolle zur verwalteten Virtual Machine Scale Sets-Identität zu Speicherkonto Zuweisen von Azure-Rollen über das Azure-Portal – Azure RBAC
- Mindestens die Rolle „Mitwirkender an Storage-Blobdaten“
Weitere Informationen über verwaltete Identitäten
PowerShell mit dem Microsoft.ServiceFabric.Powershell.Http-Modul
Führen Sie die folgenden PowerShell-Cmdlets aus, um eine neue Sicherungsrichtlinie zu erstellen. Ersetzen Sie account-name
durch den Namen Ihres Speicherkontos.
New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $false -MaxIncrementalBackups 20 -FrequencyBased -Interval "<hh:mm>" -ManagedIdentityAzureBlobStore -FriendlyName "AzureMI_storagesample" -BlobServiceUri 'https://<account-name>.blob.core.windows.net' -ContainerName 'backup-container' -ManagedIdentityType "VMSS" -ManagedIdentityClientId "<Client-Id of User-Assigned MI>" -Basic -RetentionDuration '10.00:00:00'
# Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.
Rest-Aufruf mithilfe von PowerShell
Führen Sie das folgende PowerShell-Skript zum Aufrufen der erforderlichen REST-API aus, um die neue Richtlinie zu erstellen. Ersetzen Sie account-name
durch den Namen Ihres Speicherkontos.
$StorageInfo = @{
StorageKind = "ManagedIdentityAzureBlobStore"
FriendlyName = "AzureMI_storagesample"
BlobServiceUri = "https://<account-name>.blob.core.windows.net"
ContainerName = "backup-container"
ManagedIdentityType = "VMSS"
ManagedIdentityClientId = "<Client-Id of User-Assigned MI>" # Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.
}
$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'
Verwenden von Service Fabric Explorer
Klicken Sie im Service Fabric-Explorer auf „Cluster“ auf der linken Seite, navigieren Sie zur Registerkarte „Sicherungen“, und wählen Sie „Aktionen > Sicherungsrichtlinie erstellen“ aus.
Geben Sie alle Informationen ein. Ausführliche Informationen zum Angeben eines häufigkeitsbasierten Intervalls finden Sie unter der TimeGrain-Eigenschaft. Für Azure-Cluster sollte ManagedIdentityAzureBlobStore ausgewählt werden.
Aktivieren der regelmäßigen Sicherung
Nach dem Definieren der Sicherungsrichtlinie zum Erfüllen der Datenschutzanforderungen der Anwendung muss die Sicherungsrichtlinie mit der Anwendung verknüpft werden. Je nach Anforderungen kann die Sicherungsrichtlinie einer Anwendung, einem Dienst oder einer Partition zugeordnet werden.
PowerShell mit dem Microsoft.ServiceFabric.Powershell.Http-Modul
Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'
Rest-Aufruf mithilfe von PowerShell
Führen Sie das folgende PowerShell-Skript zum Aufrufen der erforderlichen REST-API aus, um die Sicherungsrichtlinie mit dem Namen BackupPolicy1
, die im obigen Schritt erstellt wurde, der Anwendung SampleApp
zuzuordnen.
$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'
Verwenden von Service Fabric Explorer
Stellen Sie sicher, dass BackupRestoreService im Cluster aktiviert ist.
Öffnen Sie den Service Fabric Explorer.
Wählen Sie eine Anwendung aus, und wechseln Sie zum Abschnitt „Sicherung“. Klicken Sie auf „Sicherungsaktion“.
Klicken Sie auf „Anwendungssicherung aktivieren/aktualisieren“.
Wählen Sie schließlich die gewünschte Richtlinie aus, und klicken Sie auf „Sicherung aktivieren“.
Sicherstellen, dass die regelmäßigen Sicherungen funktionieren
Nach der Aktivierung der Sicherung auf Anwendungsebene werden alle Partitionen, die zu zuverlässigen statusbehafteten Diensten und Reliable Actors unter der Anwendung gehören, in regelmäßigen Abständen gemäß der zugeordneten Sicherungsrichtlinie gesichert.
Auflisten von Sicherungen
Sicherungen, die mit allen Partitionen verknüpft sind, die zu zuverlässigen statusbehafteten Diensten und Reliable Actors der Anwendung gehören, können mithilfe der GetBackups-API aufgelistet werden. Sicherungen können für eine Anwendung, einen Dienst oder eine Partition aufgelistet werden.
PowerShell mit dem Microsoft.ServiceFabric.Powershell.Http-Modul
Get-SFApplicationBackupList -ApplicationId WordCount
Rest-Aufruf mithilfe von PowerShell
Führen Sie das folgende PowerShell-Skript zum Aufrufen der HTTP-API aus, um die für alle Partitionen in der Anwendung SampleApp
erstellten Sicherungen aufzulisten.
$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
Beispielausgabe für die oben genannte Ausführung:
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 :
Verwenden von Service Fabric Explorer
Um Sicherungen in Service Fabric Explorer anzuzeigen, navigieren Sie zu einer Partition, und wählen Sie die Registerkarte „Sicherungen“ aus.
Einschränkungen/ Vorbehalte
- Service Fabric PowerShell-Cmdlets befinden sich im Vorschaumodus.
- Keine Unterstützung für Service Fabric-Cluster unter Linux.