Akka集群:配置种子节点

nwsw7zdq  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(207)

我有一个示例问题
将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 
    }
  }

此配置是否有缺点?

jogvjijk

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个种子节点给予太多的优势,只要您能够让它们在您的请进行试验,以便所有节点都可以加入集群。

相关问题