【问题标题】:Akka Remoting contact point nodes need to running?Akka Remoting 接触点节点需要运行吗?
【发布时间】:2023-12-22 18:52:01
【问题描述】:

我是 akka 和 akka 远程处理和 akka 集群的新手。我已经构建了一个具有以下配置的系统

Application.conf

akka {
  actor.provider = "akka.cluster.ClusterActorRefProvider"


  extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]

  actor.provider = "akka.cluster.ClusterActorRefProvider"

  remote{
    netty.tcp{
        port = 0
        hostname = "127.0.0.1"
    }
  }
  cluster {
    seed-nodes = [
      "akka.tcp://ClusterSystem@172.16.23.67:8551",
      "akka.tcp://ClusterSystem@172.16.23.67:8552"]

    auto-down-unreachable-after = 10s
  }

  extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]

  persistence {
    journal.plugin = "akka.persistence.journal.leveldb-shared"
    journal.leveldb-shared.store {
      # DO NOT USE 'native = off' IN PRODUCTION !!!
      native = off
      dir = "target/shared-journal"
    }
    snapshot-store.local.dir = "target/snapshots"
  }

}

worker.conf

akka {

  actor.provider = "akka.remote.RemoteActorRefProvider"

   remote{
    netty.tcp{
        port = 0
        hostname = "127.0.0.1"
    }
  }

}

contact-points = [
  "akka.tcp://ClusterSystem@172.16.23.67:8551",
  "akka.tcp://ClusterSystem@172.16.23.67:8552"]

不明白的是,akka 系统将在我的本地启动,并使用种子节点来形成集群。这是否意味着种子节点应该已经在运行。意味着进程应该已经在这些 ip:port 上启动了吗?

原因是:如果没有这个进程已经运行,我会得到关联失败,因为它是封闭的。

*******UPADTE *******

上面的问题是因为使用了浮动ips。我的节点在 Openstack Vm 上运行,它们确实有一个静态 IP。使用静态 IP 解决了问题。

另一个有趣的发现。当节点启动时,remote.netty.tcp 中的主机名应该是机器 inet,正如 Ryan 提到的,其中一个种子节点需要启动集群才能启动,因此让本地机器成为种子节点会更好。如果你有分布式种子节点,更喜欢使用 localhost inet IP 而不是 127.0.0.1。

【问题讨论】:

    标签: akka akka-cluster akka-supervision akka-remote-actor


    【解决方案1】:

    是的,正如文档所述,作为种子列出的第一个节点必须运行才能正确初始化其他种子:

    种子节点可以按任意顺序启动,不需要 让所有种子节点运行,但节点配置为第一个 种子节点配置列表中的元素必须在何时启动 最初启动一个集群,否则其他种子节点将不会 被初始化并且没有其他节点可以加入集群。原因 对于特殊的第一个种子节点是为了避免形成分离的岛屿 从空集群开始时。一切启动最快 同时配置种子节点(顺序无关紧要), 否则它可能需要配置的种子节点超时,直到 节点可以加入。

    http://doc.akka.io/docs/akka/2.3.9/scala/cluster-usage.html

    【讨论】:

    • 所以你可以看到我有节点在不同的服务器上运行。这是否意味着同一个集群系统将在另一台主机上运行,​​该主机将作为该系统在我的本地主机上运行的种子?
    • 谢谢瑞恩。今天早上解决了。如果有兴趣,请检查更新部分。