使用Akka Cluster检测被杀死的节点

时间:2016-12-21 17:44:40

标签: akka cluster-computing splitbrain

我正在使用Akka Cluster 2.4.8开展项目。

有没有办法用AkkCluster检测崩溃的节点(如computer failurekill -9等)?

我目前有一个3节点环境,使用static-quorum裂脑解决策略。

akka.cluster.split-brain-resolver {
    active-strategy = static-quorum
    stable-after = 5s

    static-quorum {
        quorum-size = 2
        role = ""
    } 

我希望在杀死一个实例时,其余的集群成员会将其标记为DOWN。但是,它仍然是UNREACHABLE(见下文)。有没有办法实现这个目标?

clusterStatus": {
    "members": [
        {
            "uniqueAddress": {
                "address": {
                    "protocol": "akka.tcp",
                    "system": "test-actor-system",
                    "host": "test-out-00",
                    "port": 2552
                },
                "uid": 1998600863
            },
            "upNumber": 1,
            "status": "Up",
            "roles": []
        },
        {
            "uniqueAddress": {
                "address": {
                    "protocol": "akka.tcp",
                    "system": "test-actor-system",
                    "host": "test-out-01",
                    "port": 2552
                },
                "uid": 1371217592
            },
            "upNumber": 3,
            "status": "Up",
            "roles": []
        },
        {
            "uniqueAddress": {
                "address": {
                    "protocol": "akka.tcp",
                    "system": "test-actor-system",
                    "host": "test-out-02",
                    "port": 2552
                },
                "uid": -796176254
            },
            "upNumber": 2,
            "status": "Up",
            "roles": []
        }
    ],
    "unreachable": [
        {
            "uniqueAddress": {
                "address": {
                    "protocol": "akka.tcp",
                    "system": "test-actor-system",
                    "host": "test-out-01",
                    "port": 2552
                },
                "uid": 1371217592
            },
            "upNumber": 3,
            "status": "Up",
            "roles": []
        }
    ]

2 个答案:

答案 0 :(得分:1)

说实话,我没有使用Akka 2.4+。我用akka 2.3.12开始我的项目,我仍然使用它。当时没有akka提供的裂脑插件解决方案,唯一的建议就是设置:

# put to off in order to not have split brain
auto-down-unreachable-after = off

这意味着,为了避免裂脑,您必须手动删除UNREACHABLE节点,并在2.3.12中返回akka-microkernel(后来被弃用http://doc.akka.io/docs/akka/2.4.1/project/migration-guide-2.3.x-2.4.x.html#Microkernel_is_Deprecated)让您可以发出命令到集群,将问题标记为DOWN

bin/akka-cluster localhost 9999 down akka.tcp://MySystem@darkstar:2552

因此需要采取一些用户操作来管理裂脑并将节点从群集中移出,这可能与您的(Akka Cluster 2.4.8)版本的情况相同。

答案 1 :(得分:1)

Split-brain resolver是Akka的商业功能,您需要LightBnd订阅。

  

请注意

     

这是Typesafe Reactive Platform的一项功能,专门为Typesafe项目成功订阅客户提供。

     

要使用Split Brain Resolver功能,您必须安装Typesafe Reactive Platform。

如果您不是反应平台订阅者,您的裂脑配置很明显会被忽略。

http://doc.akka.io/docs/akka/rp-15v09p02/scala/split-brain-resolver.html

的完整文档