【问题标题】:How to restore Reliable Service state from existing backup?如何从现有备份中恢复可靠服务状态?
【发布时间】:2017-01-19 09:40:12
【问题描述】:

我有一个有状态服务,其备份逻辑根据the corresponding documentation 实现

就这样:

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 目录,但与备份相比,数据格式似乎有所不同。

【问题讨论】:

  • 您是否阅读过“删除或丢失服务”一章? msdn.microsoft.com/library/mt693569.aspx 它似乎描述了你所追求的..
  • 我确实读过这个方法。据我了解,它是用于测试目的,不应在生产环境中使用:“不建议在每个分区上使用 FabricClient.ServiceManager.InvokeDataLossAsync 来恢复整个服务,因为这可能会破坏您的集群状态。 "
  • 这是与FabricClient.TestManagementClient.StartPartitionDataLossAsync 不同的方法(我同意它不清楚..)
  • 可能就是答案。会试试的。谢谢。

标签: c# azure azure-service-fabric service-fabric-stateful


【解决方案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 reference sample中有一个例子说明备份和恢复是如何工作的,具体代码是here

备份和恢复的完整文档是here

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2019-04-30
    • 2015-11-17
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多