5

我有一个根据相应文档实施的带有备份逻辑的有状态服务

就像这样:

protected override async Task RunAsync(CancellationToken cancellationToken)
{
  // ...

  while (true)
  {
    cancellationToken.ThrowIfCancellationRequested();
    BackupDescription myBackupDescription = new BackupDescription(BackupOption.Full, this.BackupCallbackAsync);
    await this.BackupAsync(myBackupDescription);

    // ...

    await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
  }
}

private async Task<bool> BackupCallbackAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
{
  var backupId = Guid.NewGuid();
  // backup files copied to external storage here ...
  return true;
}

文档只建议了一种恢复备份的方法 - 使用OnDataLossAsync方法。但我无法引发对这种方法的调用。

所以,问题是:如果数据全部丢失,如何从备份中恢复服务状态?

例如,所有 Service Fabric 集群节点都已销毁。我唯一的东西就是我的备份。重新部署后我应该怎么做才能恢复我的服务状态?

我检查了 Service Fabric 群集管理器DataLog目录,但与备份相比,数据格式似乎有所不同。

4

1 回答 1

1

可以使用类似以下代码的服务触发数据丢失:

Connect-ServiceFabricCluster
$s = "fabric:/WebReferenceApplication/InventoryService"
$p = Get-ServiceFabricApplication | Get-ServiceFabricService -ServiceName $s | Get-ServiceFabricPartition | Select -First 1
$p | Invoke-ServiceFabricPartitionDataLoss -DataLossMode FullDataLoss -ServiceName $s

在web 参考示例中有一个示例显示了备份和恢复的工作原理,具体代码在这里

备份和恢复的完整文档在这里

于 2018-03-23T01:19:56.043 回答