Den*_*gin 7 akka.net akka.net-cluster
我们为短信,电子邮件和推送通知创建了Akka Cluster基础架构.系统中存在3种不同类型的节点,即客户端,发送方和灯塔.Web应用程序和API应用程序正在使用客户端角色(Web和API在IIS上托管).Lighthouse和Sender角色作为Windows服务托管.我们还运行了另外4个与发送者角色相同的Windows服务的控制台应用程序.
我们在Web服务器中遇到端口耗尽问题大约2周.我们的Web服务器开始快速使用端口,一段时间后我们无法执行任何SQL操作.有时我们别无选择,只能重置iis.如果发件人角色中有多个节点,则会出现此问题.我们诊断出来并找到了问题的根源.
---------------
HOST OPEN WAIT
SRV_NOTIFICATION 3429 0
SRV_LOCAL 198 0
SRV_UNDEFINED_IPV4 23 0
SRV_DATABASE 15 0
SRV_AUTH 4 0
SRV_API 6 0
SRV_UNDEFINED_IPV6 19 0
SRV_INBOUND 12347 5
TotalPortsInUse : 17286
MaxUserPorts : 64510
TcpTimedWaitDelay : 30
03/23/2017 09:30:10
---------------
Run Code Online (Sandbox Code Playgroud)
SRV_NOTIFICATION是灯塔发送者节点运行的服务器.SRV_INBOUND是我们的Web服务器.检查此表后,我们检查了Web服务器上分配的端口.我们得到的结果如下表所示.在netstat中有超过12000个连接,如下所示:
TCP 192.168.1.10:65531 192.168.1.10:3564 ESTABLISHED 5716 [w3wp.exe]
TCP 192.168.1.10:65532 192.168.1.101:17527 ESTABLISHED 5716 [w3wp.exe]
TCP 192.168.1.10:65533 192.168.1.101:17527 ESTABLISHED 5716 [w3wp.exe]
TCP 192.168.1.10:65534 192.168.1.10:3564 ESTABLISHED 5716 [w3wp.exe]
Run Code Online (Sandbox Code Playgroud)
192.168.1.10 Web服务器192.168.1.10:3564 API 192.168.1.101:17527灯塔
连接正在打开但未关闭.
部署完成后,我们的Web和Api应用程序将离开并重新加入群集,并为固定端口配置.我们正在使用@cgstevens创建的应用程序监视我们的集群.即使我们为Actor系统实现了grecaful关闭逻辑,但有时WEB和API应用程序无法离开集群,因此我们必须手动删除节点并重新启动actor系统.
我们在开发环境中重现了这个问题,并在下面录制了一个视频
https://drive.google.com/file/d/0B5ZNfLACId3jMWUyOWliMUhNWTQ/view
我们的节点hocon配置如下:
WEB和API
<akka>
<hocon><![CDATA[
akka{
loglevel = DEBUG
actor{
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
deployment {
/coordinatorRouter {
router = round-robin-group
routees.paths = ["/user/NotificationCoordinator"]
cluster {
enabled = on
max-nr-of-instances-per-node = 1
allow-local-routees = off
use-role = sender
}
}
/decidingRouter {
router = round-robin-group
routees.paths = ["/user/NotificationDeciding"]
cluster {
enabled = on
max-nr-of-instances-per-node = 1
allow-local-routees = off
use-role = sender
}
}
}
serializers {
wire = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
}
serialization-bindings {
"System.Object" = wire
}
debug{
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
}
remote {
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
hostname = "192.168.1.10"
port = 3564
}
}
cluster {
seed-nodes = ["akka.tcp://notificationSystem@192.168.1.101:17527"]
roles = [client]
}
}
]]>
</hocon>
</akka>
Run Code Online (Sandbox Code Playgroud)
灯塔
<akka>
<hocon>
<![CDATA[
lighthouse{
actorsystem: "notificationSystem"
}
akka {
actor {
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
serializers {
wire = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
}
serialization-bindings {
"System.Object" = wire
}
}
remote {
log-remote-lifecycle-events = DEBUG
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
#will be populated with a dynamic host-name at runtime if left uncommented
#public-hostname = "192.168.1.100"
hostname = "192.168.1.101"
port = 17527
}
}
loggers = ["Akka.Logger.NLog.NLogLogger,Akka.Logger.NLog"]
cluster {
seed-nodes = ["akka.tcp://notificationSystem@192.168.1.101:17527"]
roles = [lighthouse]
}
}
]]>
</hocon>
</akka>
Run Code Online (Sandbox Code Playgroud)
寄件人
<akka>
<hocon><![CDATA[
akka{
# stdout-loglevel = DEBUG
loglevel = DEBUG
# log-config-on-start = on
loggers = ["Akka.Logger.NLog.NLogLogger, Akka.Logger.NLog"]
actor{
debug {
# receive = on
# autoreceive = on
# lifecycle = on
# event-stream = on
# unhandled = on
}
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
serializers {
wire = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
}
serialization-bindings {
"System.Object" = wire
}
deployment{
/NotificationCoordinator/LoggingCoordinator/DatabaseActor{
router = round-robin-pool
resizer{
enabled = on
lower-bound = 3
upper-bound = 5
}
}
/NotificationDeciding/NotificationDecidingWorkerActor{
router = round-robin-pool
resizer{
enabled = on
lower-bound = 3
upper-bound = 5
}
}
/ScheduledNotificationCoordinator/SendToProMaster/JobToProWorker{
router = round-robin-pool
resizer{
enabled = on
lower-bound = 3
upper-bound = 5
}
}
}
}
remote{
log-remote-lifecycle-events = DEBUG
log-received-messages = on
helios.tcp{
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
#will be populated with a dynamic host-name at runtime if left uncommented
#public-hostname = "POPULATE STATIC IP HERE"
hostname = "192.168.1.101"
port = 0
}
}
cluster {
seed-nodes = ["akka.tcp://notificationSystem@192.168.1.101:17527"]
roles = [sender]
}
}
]]></hocon>
</akka>
Run Code Online (Sandbox Code Playgroud)
Cluster.Monitor
<akka>
<hocon>
<![CDATA[
akka {
stdout-loglevel = INFO
loglevel = INFO
log-config-on-start = off
actor {
provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote"
serializers {
wire = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
}
serialization-bindings {
"System.Object" = wire
}
deployment {
/clustermanager {
dispatcher = akka.actor.synchronized-dispatcher
}
}
}
remote {
log-remote-lifecycle-events = INFO
log-received-messages = off
log-sent-messages = off
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
#will be populated with a dynamic host-name at runtime if left uncommented
#public-hostname = "127.0.0.1"
hostname = "192.168.1.101"
port = 0
}
}
cluster {
seed-nodes = ["akka.tcp://notificationSystem@192.168.1.101:17527"]
roles = [ClusterManager]
client {
initial-contacts = ["akka.tcp://notificationSystem@192.168.1.101:17527/system/receptionist"]
}
}
}
]]>
</hocon>
</akka>
Run Code Online (Sandbox Code Playgroud)
这是一个确认的错误,可能会在Akka.Net V1.2中使用CoordinatedShutdown功能修复
https://github.com/akkadotnet/akka.net/issues/2575
您可以使用最新的每晚构建版本,直到1.2版本发布
http://getakka.net/docs/akka-developers/nightly-builds
编辑:Akka.Net V1.2发布,但这个错误推迟到V1.3.
https://github.com/akkadotnet/akka.net/milestone/14
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |