我在每个节点上运行了一个集群事件监听器,当节点无法访问时,发送电子邮件通知我,我注意到两件奇怪的事情:
UP
这是我的conf:
akka {
loglevel = INFO
loggers = ["akka.event.slf4j.Slf4jLogger"]
jvm-exit-on-fatal-error = on
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
remote {
//will be overwrite on runtime
log-remote-lifecycle-events = off
netty.tcp {
hostname = "127.0.0.1"
port = 9989
}
}
cluster {
failure-detector {
threshold = 12.0
acceptable-heartbeat-pause = 10 s
}
use-dispatcher = cluster-dispatcher
}
}
//relieve unreachable report rate
cluster-dispatcher {
type = "Dispatcher"
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 4
parallelism-max = 8
}
}
答案 0 :(得分:1)
请阅读文档中的集群成员资格生命周期部分:http://doc.akka.io/docs/akka/2.4.0/common/cluster.html#Membership_Lifecycle
Unreachability是临时的,表示远程节点暂时没有心跳。一旦心跳再次出现,这可以恢复。这对于将数据从过载节点重新路由到其他节点或补偿较小的间歇性网络问题非常有用。请注意,除非配置为http://doc.akka.io/docs/akka/2.4.0/scala/cluster-usage.html#Automatic_vs__Manual_Downing
,否则群集成员不会自动无法访问DOWN默认情况下DOWNing是手动而非自动的原因是因为分裂脑情况的风险及其后果,例如当使用Cluster Singletons时(在群集分成两部分后它不会成为单身人士)因为网线断了)有关自动解决此类案例的更多选项,Akka的商业版本中有SBR(Split Brain Resolver):http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
此外,DOWN-ing是永久性的,一旦被标记为DOWN的节点将永远从群集的幸存部分中消失,即使将来它变得活着,它也不会被允许再回来(参见Fencing和STONITH的解释:https://en.wikipedia.org/wiki/STONITH或http://advogato.org/person/lmb/diary/105.html)。