我正在使用Akka Cluster 2.4.8开展项目。
有没有办法用AkkCluster检测崩溃的节点(如computer failure
,kill -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": []
}
]
答案 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
的完整文档