0

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

应用程序.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。

4

1 回答 1

0

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

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

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

于 2015-03-26T02:17:59.283 回答