我有一个示例问题
将akka集群的所有节点配置为种子节点是否有意义?
例如:
cluster {
seed-nodes = [
"akka://application@127.0.0.1:2551",
"akka://application@127.0.0.1:2552",
"akka://application@127.0.0.1:2553",
"akka://application@127.0.0.1:2554",
"akka://application@127.0.0.1:2555",
"akka://application@127.0.0.1:2556",
"akka://application@127.0.0.1:2557",
"akka://application@127.0.0.1:2558",
"akka://application@127.0.0.1:2559",
"akka://application@127.0.0.1:2560",
"akka://application@127.0.0.1:2561",
"akka://application@127.0.0.1:2562"]
downing-provider-class = "akka.cluster.sbr.SplitBrainResolverProvider"
split-brain-resolver {
active-strategy = static-quorum
static-quorum {
quorum-size = 7
}
}
此配置是否有缺点?
1条答案
按热度按时间jogvjijk1#
我想答案必须是“看情况而定”。
Seed nodes是一种机制,它允许新节点加入akka集群。要使示例正常运行,您必须在同一主机上运行所有节点。我猜您正在传递一些JVM参数(如
-Dakka.remote.artery.canonical.port=2***
),以将每个节点绑定到不同的端口。这很好,它将工作。新节点启动时将尝试通过从第一个开始联系种子节点来加入群集,直到其中一个节点响应为止。在实践中,您可能希望集群节点运行在不同的机器上,这时像示例中这样的静态配置可能会有点麻烦,因为您需要事先知道所有的IP地址,并需要保证它们不会随时间而改变。这在具有静态分配的IP的网络中可能是可能的,但是对于动态分配的IP或在诸如Kubernetes之类的环境中几乎是不可能的。这就是为什么实施了其他群集加入方法(https://doc.akka.io/docs/akka/current/discovery/index.html)的原因。
因此,我在这里看到的缺点是这种配置在任何现实生活场景中的局限性。只要你这样做是为了学习/实验Akka集群,那么一切都很好,尽管你也可以争辩说,如果你这样做,那么拥有一个包含12个种子节点的列表并不会比2个种子节点给予太多的优势,只要您能够让它们在您的请进行试验,以便所有节点都可以加入集群。