Azure service fabric Actor内部GetStateAync上的System.Fabric.FabricNotPrimaryException

Azure service fabric Actor内部GetStateAync上的System.Fabric.FabricNotPrimaryException,azure-service-fabric,service-fabric-actor,Azure Service Fabric,Service Fabric Actor,我在Github上也问过这个问题- 我有(n)个演员,他们每秒都在不断地提醒我 这些参与者在过去4天中一直运行良好,因为在调用StateManager.GetStateAync时,每个实例都会收到以下异常。随后,我看到所有演员都被停用 我找不到可靠的参与者遇到的与此异常相关的任何信息 一旦发生此异常并且参与者被停用,它们就不会被重新激活 发生此错误的条件是什么?如何进一步诊断此问题 “System.Fabric.FabricNotPrimaryException:在Microsoft.Servi

我在Github上也问过这个问题-

我有(n)个演员,他们每秒都在不断地提醒我

这些参与者在过去4天中一直运行良好,因为在调用StateManager.GetStateAync时,每个实例都会收到以下异常。随后,我看到所有演员都被停用

我找不到可靠的参与者遇到的与此异常相关的任何信息

一旦发生此异常并且参与者被停用,它们就不会被重新激活

发生此错误的条件是什么?如何进一步诊断此问题

“System.Fabric.FabricNotPrimaryException:在Microsoft.ServiceFabric.Actors.Runtime.ActorStateProviderHelper.d_81.MoveNext()上引发了类型为'System.Fabric.FabricNotPrimaryException'的异常” ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在Microsoft.ServiceFabric.Actors.Runtime.ActorStateManager.d_u181.MoveNext()---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务任务)在引发异常的上一个位置的堆栈结束跟踪在Microsoft.ServiceFabric.Actors.Runtime.ActorStateManager.d_u7`1.MoveNext()中

查看一下cluster explorer,我现在可以在该actor服务的一个分区上看到以下警告:

不健康事件:SourceId='System.FM',Property='State',HealthState='Warning',ConsiderWarningAsError=false。 分区重新配置的时间比预期的要长。 结构:/Ism.tvcreognition.App/TvChannelMonitor 3 3 4dcca5ee-2297-44f9-b63e-76a60df3bc3d S/S IB_节点1_4向上131456742296273986 S/P RD节点1\U 2向上131456742361691499 P/S RD节点1向下131457861497316547 (显示4个副本中的3个。可用副本总数:1。)

在该分区的主副本中出现警告:

不健康事件:SourceId='System.RAP',Property='IReplicator.catchupreplicateduration',HealthState='Warning',ConsiderWarningAsError=false

以及ActiveSecondary中的警告:

不健康事件:SourceId='System.RAP',Property='IStatefulServiceReplica.CloseDuration',HealthState='Warning',ConsiderWarningAsError=false.开始时间(UTC):2017-08-01 04:51:39.740\u节点1\u 0

5个节点中有3个显示以下错误:

不正常事件:SourceId='FabricDCA',Property='DataCollectionAgent.DiskSpaceAvailable',HealthState='Warning',ConsiderWarningAsError=false。数据采集代理(DCA)没有足够的磁盘空间来操作。如果这种情况继续发生,将无法收集诊断信息

更多信息:

我的群集设置由5个D1虚拟机节点组成

Microsoft Service Fabric应用程序中的事件查看器错误:

我看到很多

无法从ETL文件D:\SvcFab\Log\QueryTraces\query\u traces\u 5.6.231.9494\u 13146037216813038\u 1.ETL中读取部分或全部事件。 System.ComponentModel.Win32Exception(0x80004005):句柄无效 在Tools.EtlReader.TraceFileVentReader.ReadEvents(DateTime开始时间,DateTime结束时间) 在System.Fabric.Dca.Utility.PerformWithRetries[T](操作'1 worker,T上下文,RetrableOperationExceptionHandler exceptionHandler,Int32 initialRetryIntervalMs,Int32 maxRetryCount,Int32 maxRetryIntervalMs) 在FabricDCA.EtlProcessor.ProcessActiveEtlFile(FileInfo etlFile、DateTime lastEndTime、DateTime&newEndTime、CancellationToken CancellationToken)

还有一堆警告,如:

Api IStatefulServiceReplica.Close()在分区{4dcca5ee-2297-44f9-b63e-76a60df3bc3d}副本131457861497316547上运行缓慢,起始时间UTC=‎2017‎-‎08‎-‎01T04:51:39.789083900Z

最后,我想我可能是这一切的根源。事件查看器应用程序日志有大量错误,如:

Ism.TVcreognition.TvChannelMonitor(3688)(4DCA5EE-2297-44f9-b63e-76a60df3bc3d:131457861497316547):尝试写入偏移量5242880(0x0000000000000)处的文件“D:\SvcFab_App\Ism.TVcreognition.AppType_App1\work\p_4DCA5EE-2297-44f9-b63e-76a60df3bc3d\R_131457861497316547\edbres0002.jrs”字节在0.000秒后失败,系统错误为112(0x00000070):“磁盘上没有足够的空间。“。写入操作将失败,错误为-1808(0xfffff8f0)。如果此错误持续存在,则文件可能已损坏,可能需要从以前的备份中还原

好的,那个错误是指向D驱动器,它是临时存储。它有549 MB的空闲空间,50 GB。
Service fabric真的应该持久化到临时存储吗?

Re:错误-是的,看起来是磁盘已满导致了故障。在这里结束循环-看起来您发现您的状态实际上没有在群集中分布,并且一旦修复,您就不再看到磁盘已满。您的容量规划应该是有希望的你现在明白了

关于安全性:TLDR:使用临时驱动器是可以的,因为您使用的是Service Fabric。如果您没有使用该驱动器来处理真实数据,则将是一个非常糟糕的主意

从Azure的角度来看,这些驱动器是“临时”的,因为它们是机器上的本地驱动器。Azure不知道你在用这些驱动器做什么,也不希望任何一台机器应用程序认为写入其中的数据是安全的,因为Azure可能会通过虚拟机来响应一系列不同的事情

在SF中,我们将数据复制到多台机器上,因此使用本地磁盘是很好/安全的。SF还与Azure集成,以使大量的mana