akka群集在报告节点无法访问时发出错误警报

时间:2015-11-25 09:53:21

标签: akka akka-cluster

我在每个节点上运行了一个集群事件监听器,当节点无法访问时,发送电子邮件通知我,我注意到两件奇怪的事情:

  1. 大部分时间,无法访问的事件后面都会再次显示事件
  2. 当发生无法访问的事件时,我查询集群的状态,它显示所有节点仍然是UP
  3. 这是我的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
      }
    }
    

1 个答案:

答案 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/STONITHhttp://advogato.org/person/lmb/diary/105.html)。