集群中的节点停止侦听连接
Node in cluster stops listening for connections
我们有两个代码相同的节点,它们在集群中使用 akka.net 并在它们之间使用远程发送消息。
Akka.Net 版本为 1.2.0,我们使用 dot-netty 进行传输。这是相关配置部分:
演员{
提供商 = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
}
偏僻的 {
点-netty.tcp {
端口 = 34083
主机名 = <em>host_name</em>
}
}
两个节点 运行 在不同的 Windows 服务器上(托管在 Windows 服务上)。有时,一个节点停止监听分配的端口(使用 netstat -an 检查)并且它们之间的所有通信都丢失,直到我重新启动 Windows 服务。
这是我们在日志中获得的所有信息(前 2 条消息来自一台主机,第三条来自另一台主机):
60133 2017-08-11 10:09:11.993 Host1 Akka.Remote.Transport.ProtocolStateActor 错误 远程无响应。握手超时或触发传输故障检测器。
60134 2017-08-11 10:09:12.040 Host1 Akka.Remote.ReliableDeliverySupervisor 警告与远程系统的关联 akka.tcp://ProcesamientoActorSystem@warpacb004.nead.danet:34083 失败;地址现在被门控 5000 毫秒。原因是:[Akka.Remote.EndpointDisassociatedException:分离
at Akka.Remote.EndpointWriter.PublishAndThrow(异常原因,LogLevel级别,Boolean needToThrow)
在 Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(对象消息,PartialAction<code>1 partialAction)
在 Akka.Actor.UntypedActor.Receive(对象消息)
在 Akka.Actor.ActorBase.AroundReceive(接收接收,对象消息)
在 Akka.Actor.ActorCell.ReceiveMessage(对象消息)
在 Akka.Actor.ActorCell.AutoReceiveMessage(信封信封)
在 Akka.Actor.ActorCell.Invoke(信封信封)
--- 从抛出异常的先前位置开始的堆栈跟踪结束 ---
在 Akka.Actor.ActorCell.HandleFailed(失败 f)
在 Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList 消息,Int32 currentState)]<br>
60135 2017-08-11 10:09:14.313 Host2 Akka.Remote.ReliableDeliverySupervisor 警告与远程系统的关联 akka.tcp://ProcesamientoActorSystem@warpacb005.nead.danet:34083 失败;地址现在被门控 5000 毫秒。原因是:[Akka.Remote.EndpointDisassociatedException:分离
at Akka.Remote.EndpointWriter.PublishAndThrow(异常原因,LogLevel级别,Boolean needToThrow)
在 Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(对象消息,PartialAction
1 partialAction)
在 Akka.Actor.ActorCell.<>c__DisplayClass112_0.b__0(对象 m)
在 Akka.Actor.ActorBase.AroundReceive(接收接收,对象消息)
在 Akka.Actor.ActorCell.ReceiveMessage(对象消息)
在 Akka.Actor.ActorCell.AutoReceiveMessage(信封信封)
在 Akka.Actor.ActorCell.Invoke(信封信封)]
我猜传输层出现故障,dot-netty 关闭套接字并停止监听。
有什么办法可以阻止这种情况的发生,或者至少让它不那么频繁?如果没有,我们可以挂钩失败事件以重新开始监听吗?
在没有更多信息的情况下,我无法全面评论运行时行为,但我可以立即发现的一件事是您的传入连接正在侦听 localhost
,因此它无法接受任何外部连接寄给这台机器。
一般来说,当涉及到 Akka.Remote 时,始终使用 IP 地址 作为您的主机名值。套接字本身不支持 DNS,因此我们必须将所有主机名解析回其 IP 形式才能打开连接。根据您的网络和硬件配置,内部主机名可能不可靠。
但如果您不介意,请post一个完整的日志来解决像这样的网络问题。
我们将 Akka 升级到 1.2.3,它开始正常工作。
我们不时在日志中看到相同的错误,但连接并未断开。
我们有两个代码相同的节点,它们在集群中使用 akka.net 并在它们之间使用远程发送消息。
Akka.Net 版本为 1.2.0,我们使用 dot-netty 进行传输。这是相关配置部分:
演员{
提供商 = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
}
偏僻的 {
点-netty.tcp {
端口 = 34083
主机名 = <em>host_name</em>
}
}
两个节点 运行 在不同的 Windows 服务器上(托管在 Windows 服务上)。有时,一个节点停止监听分配的端口(使用 netstat -an 检查)并且它们之间的所有通信都丢失,直到我重新启动 Windows 服务。
这是我们在日志中获得的所有信息(前 2 条消息来自一台主机,第三条来自另一台主机):
60133 2017-08-11 10:09:11.993 Host1 Akka.Remote.Transport.ProtocolStateActor 错误 远程无响应。握手超时或触发传输故障检测器。
60134 2017-08-11 10:09:12.040 Host1 Akka.Remote.ReliableDeliverySupervisor 警告与远程系统的关联 akka.tcp://ProcesamientoActorSystem@warpacb004.nead.danet:34083 失败;地址现在被门控 5000 毫秒。原因是:[Akka.Remote.EndpointDisassociatedException:分离
at Akka.Remote.EndpointWriter.PublishAndThrow(异常原因,LogLevel级别,Boolean needToThrow)
在 Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(对象消息,PartialAction<code>1 partialAction)
在 Akka.Actor.UntypedActor.Receive(对象消息)
在 Akka.Actor.ActorBase.AroundReceive(接收接收,对象消息)
在 Akka.Actor.ActorCell.ReceiveMessage(对象消息)
在 Akka.Actor.ActorCell.AutoReceiveMessage(信封信封)
在 Akka.Actor.ActorCell.Invoke(信封信封)
--- 从抛出异常的先前位置开始的堆栈跟踪结束 ---
在 Akka.Actor.ActorCell.HandleFailed(失败 f)
在 Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList 消息,Int32 currentState)]<br>
60135 2017-08-11 10:09:14.313 Host2 Akka.Remote.ReliableDeliverySupervisor 警告与远程系统的关联 akka.tcp://ProcesamientoActorSystem@warpacb005.nead.danet:34083 失败;地址现在被门控 5000 毫秒。原因是:[Akka.Remote.EndpointDisassociatedException:分离
at Akka.Remote.EndpointWriter.PublishAndThrow(异常原因,LogLevel级别,Boolean needToThrow)
在 Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(对象消息,PartialAction
1 partialAction)
在 Akka.Actor.ActorCell.<>c__DisplayClass112_0.b__0(对象 m)
在 Akka.Actor.ActorBase.AroundReceive(接收接收,对象消息)
在 Akka.Actor.ActorCell.ReceiveMessage(对象消息)
在 Akka.Actor.ActorCell.AutoReceiveMessage(信封信封)
在 Akka.Actor.ActorCell.Invoke(信封信封)]
我猜传输层出现故障,dot-netty 关闭套接字并停止监听。
有什么办法可以阻止这种情况的发生,或者至少让它不那么频繁?如果没有,我们可以挂钩失败事件以重新开始监听吗?
在没有更多信息的情况下,我无法全面评论运行时行为,但我可以立即发现的一件事是您的传入连接正在侦听 localhost
,因此它无法接受任何外部连接寄给这台机器。
一般来说,当涉及到 Akka.Remote 时,始终使用 IP 地址 作为您的主机名值。套接字本身不支持 DNS,因此我们必须将所有主机名解析回其 IP 形式才能打开连接。根据您的网络和硬件配置,内部主机名可能不可靠。
但如果您不介意,请post一个完整的日志来解决像这样的网络问题。
我们将 Akka 升级到 1.2.3,它开始正常工作。 我们不时在日志中看到相同的错误,但连接并未断开。