標準的な Service Fabric での定期的なバックアップと復元
Service Fabric は、信頼性の高い分散クラウド アプリケーションを開発して管理するためのプラットフォームです。 ステートレスおよびステートフル マイクロサービスの両方がサポートされています。 ステートフル サービスは、1 つの要求またはトランザクションを超えて重要なデータを保持できます。 ステートフル サービスがダウンしたりデータが失われたりした場合、正常な動作を続けるには、最新のバックアップからの復元が必要になる場合があります。
Service Fabric は、複数のノードの状態をレプリケートして、サービスの高可用性を確保します。 クラスター内の 1 つのノードに障害が発生しても、サービスは引き続き利用できます。 ただし、サービス データがさらに広範囲の障害に対する信頼性を持つことがやはり望ましい特定のケースがあります。
たとえば、次のような状況を防ぐために、サービスでそのデータをバックアップすることが必要な場合があります。
- Service Fabric クラスター全体の完全な損失。
- サービス パーティションのレプリカの過半数の完全な損失。
- 状態が誤って削除されたり、破損したりするなどの管理エラー。 例: 十分な権限を持つ管理者が誤ってサービスを削除した。
- データの破損を引き起こすサービスのバグ。 これは、サービス コードのアップグレードにより、Reliable Collection に不正なデータが書き込まれ始めると起こる可能性があります。 このような場合は、コードとデータの両方を、以前の状態に復元する必要があります。
- オフライン データ処理 データを生成するサービスと切り離されて行われるビジネス インテリジェンスのために、データのオフライン処理を用意しておけば便利です。
Service Fabric には、ポイントインタイムのバックアップと復元を行う API が組み込まれています。 アプリケーション開発者は、これらの API を使用して、サービスの状態を定期的にバックアップできます。 さらに、サービス管理者が特定の時点 (アプリケーションをアップグレードする前など) にサービスの外部からバックアップをトリガーすることを望んでいるのであれば、開発者は、バックアップ (および復元) を API としてサービスから公開する必要があります。 バックアップの管理には、追加コストが発生します。 たとえば、完全バックアップに続けて、30 分ごとに 5 回の増分バックアップを実行したい場合があるとします。 完全バックアップを実行した後、その前に実行された増分バックアップを削除できます。 このアプローチではコードを追加する必要であり、それによってアプリケーションの開発中に追加コストが発生します。
アプリケーション データの定期的なバックアップは、分散アプリケーションを管理してデータの損失やサービスの長時間にわたる可用性の損失を防ぐための基本的なニーズです。 Service Fabric には、オプションで提供されるバックアップと復元サービスがあり、それを使うと、コードの記述を追加しなくても、ステートフルな Reliable Services の定期的なバックアップを構成できます (Actor Services も含みます)。 これまでに実行したバックアップも簡単に復元できます。
Service Fabric には、定期的なバックアップと復元機能に関連する次の機能を実現するための一連の API が用意されています。
- ステートフルな Reliable Services と Reliable Actors の定期的なバックアップのスケジュールを設定する。バックアップの (外部) 保存場所へのアップロードがサポートされます。 サポートされる保存場所
- Azure Storage
- ファイル共有 (オンプレミス)
- バックアップを列挙する
- パーティションの計画外バックアップをトリガーする
- 以前のバックアップを使用してパーティションを復元する
- バックアップを一時停止する
- バックアップの保有期間を管理する (予定)
前提条件
Service Fabric のバージョンが 6.4 以降の Fabric クラスター。 必要なパッケージのダウンロード手順については、この記事を参照してください。
バックアップを保存するストレージに接続するために必要なシークレットを暗号化する X.509 証明書。 X.509 証明書を取得するか自己署名証明書を作成する方法については、こちらの記事を参照してください。
Service Fabric SDK バージョン 3.0 以降を使用してビルドされた Service Fabric Reliable Stateful アプリケーション。 .NET Core 2.0 がターゲットのアプリケーションの場合は、Service Fabric SDK バージョン 3.1 以降を使ってアプリケーションを構築する必要があります。
構成の呼び出しを行うため、Microsoft.ServiceFabric.PowerShell.Http モジュールをインストールします。
Install-Module -Name Microsoft.ServiceFabric.PowerShell.Http -AllowPrerelease
Note
PowerShellGet のバージョンが 1.6.0 未満の場合、更新して -AllowPrerelease フラグのサポートを追加する必要があります。
Install-Module -Name PowerShellGet -Force
- Microsoft.ServiceFabric.PowerShell.Http モジュールを使用して、任意の構成要求を行う前に、
Connect-SFCluster
コマンドを使用してクラスターが接続されていることを確認します。
Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080' -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
バックアップと復元サービスの有効化
最初に、"バックアップと復元サービス" をクラスターで有効にする必要があります。 デプロイするクラスター用テンプレートを用意します。 サンプル テンプレートを使用できます。 次の手順で、"バックアップと復元サービス" を有効にします。
クラスター構成ファイルで、
apiversion
が10-2017
に設定されていることを確認します。設定されていない場合は下のスニペットに示すように更新します。{ "apiVersion": "10-2017", "name": "SampleCluster", "clusterConfigurationVersion": "1.0.0", ... }
下のスニペットに示すように、次の
addonFeatures
セクションをproperties
セクションの下に追加することで、"バックアップと復元サービス" を有効にします。"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
資格情報を暗号化する X.509 証明書を構成します。 これは、ストレージに接続するために提供された証明書が永続化の前に暗号化されることを保証するために重要です。 下のスニペットに示すように、次の
BackupRestoreService
セクションをfabricSettings
セクションの下に追加することで、暗号化証明書を有効にします。"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [{ "name": "BackupRestoreService", "parameters": [ { "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" } ] }] ... }
Note
[Thumbprint] は、暗号化に使用される有効な証明書のサムプリントに置き換える必要があります。
前記の変更でクラスター構成ファイルを更新した後、それを適用してデプロイとアップグレードを完了します。 完了すると、バックアップと復元サービスがクラスターで実行されます。 このサービスの URI は
fabric:/System/BackupRestoreService
です。サービスは、Service Fabric エクスプローラーでシステム サービス セクションの下に置くことができます。
Reliable Stateful サービスと Reliable Actors の定期バックアップの有効化
Reliable Stateful サービスと Reliable Actors の定期バックアップを有効にする手順について説明します。 これらの手順は、以下を前提としています。
- クラスターがバックアップと復元の各サービスで構成されている。
- Reliable Stateful サービスがクラスターにデプロイされている。 このクイックスタート ガイドでは、アプリケーションの URI は
fabric:/SampleApp
であり、このアプリケーションに属する Reliable Stateful サービスの URI はfabric:/SampleApp/MyStatefulService
です。 このサービスは単一パーティションでデプロイされ、パーティション ID は23aebc1e-e9ea-4e16-9d5c-e91a614fefa7
です。
バックアップ ポリシーを作成する
最初の手順は、バックアップ ポリシーを作成することです。 このポリシーには、バックアップ スケジュール、バックアップ データのターゲット ストレージ、ポリシー名、完全バックアップがトリガーされるまでに許容される増分バックアップの最大回数、およびバックアップ ストレージの保持ポリシーが含まれている必要があります。
バックアップ ストレージ用に、ファイル共有を作成し、そのファイル共有にすべての Service Fabric のノード マシンに対する読み取り/書き込みアクセス権を付与します。 この例では、BackupStore
という名前の共有が StorageServer
上に存在すると想定します。
Microsoft.ServiceFabric.PowerShell.Http モジュールを使用した PowerShell
New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -FileShare -Path '\\StorageServer\BackupStore' -Basic -RetentionDuration '10.00:00:00'
PowerShell を使用した Rest の呼び出し
必要な REST API を呼び出して新しいポリシーを作成するために、以下の PowerShell スクリプトを実行します。
$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 の使用
Service Fabric Explorer で、[バックアップ] タブに移動し、[アクション] > [バックアップ ポリシーの作成] の順に選択します。
情報を入力します。 スタンドアロン クラスターの場合は、FileShare を選択する必要があります。
定期バックアップを有効にする
アプリケーションのデータ保護要件を満たすポリシーを定義した後、バックアップ ポリシーをアプリケーションと関連付ける必要があります。 バックアップ ポリシーは、要件に応じて、アプリケーション、サービス、またはパーティションに関連付けることができます。
Microsoft.ServiceFabric.PowerShell.Http モジュールを使用した PowerShell
Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'
PowerShell を使用した Rest の呼び出し
必要な REST API を呼び出して、上の手順で作成した BackupPolicy1
という名前のバックアップ ポリシーをアプリケーション SampleApp
に関連付けるために、以下の PowerShell スクリプトを実行します。
$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 の使用
クラスターで BackupRestoreService が有効になっていることを確認します。
Service Fabric Explorer を開きます。
アプリケーションを選択し、[バックアップ] セクションに移動します。 [バックアップ アクション] をクリックします。
[Enable/Update Application Backup](アプリケーションのバックアップを有効化/更新する) をクリックします。
最後に希望のポリシーを選択して、 [バックアップの有効化] を選択します。
定期バックアップが動作していることを確認する
アプリケーションのバックアップを有効にすると、アプリケーションの下で Reliable Stateful サービスと Reliable Actors に属しているすべてのパーティションで、バックアップ ポリシーに従って定期バックアップが開始されます。
バックアップを一覧表示する
GetBackups API を使用して、アプリケーションの Reliable Stateful サービスと Reliable Actors に属するすべてのパーティションに関連付けられているバックアップを列挙できます。 要件に応じて、アプリケーション、サービス、またはパーティションのバックアップを列挙できます。
Microsoft.ServiceFabric.PowerShell.Http モジュールを使用した PowerShell
Get-SFApplicationBackupList -ApplicationId WordCount
PowerShell を使用した Rest の呼び出し
HTTP API を呼び出して、SampleApp
アプリケーション内のすべてのパーティションに対して作成されたバックアップを列挙するために、以下の PowerShell スクリプトを実行します。
$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
上記を実行したときのサンプル出力:
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 の使用
Service Fabric Explorer でバックアップを表示するには、パーティションに移動し、[バックアップ] タブを選択します。
制限事項/注意事項
- Service Fabric PowerShell コマンドレットは、プレビュー モードです。
- Linux 上の Service Fabric クラスターはサポートされません。