【发布时间】:2019-11-24 10:04:31
【问题描述】:
我正在努力理解 Akka 和 Akka 集群。
到目前为止,我已经能够创建两个actor系统并让它们形成一个集群,当我在两个不同的控制台中分别启动每个时(即在各自的 jvm 中运行每个)。
配置如下:
akka {
actor {
provider = cluster
deployment {
/workRouter {
router = round-robin-group
routees.paths = ["/user/worker"]
cluster {
enabled = on
allow-local-routees = on
}
}
}
}
remote {
netty.tcp {
hostname = ${clustering.host-ip} // this is over riden in the non-seed cluster
port = ${clustering.host-port}
}
}
cluster {
seed-nodes = [
"akka.tcp://"${clustering.name}"@"${clustering.router-seed-ip}":"${clustering.router-seed-port}
]
}
}
# variables
clustering {
host-ip = "127.0.0.1"
host-ip = ${?HOST_IP}
host-port = 2551
host-port = ${?HOST_PORT}
router-seed-ip = "127.0.0.1"
router-seed-ip = ${?ROUTER_CLUSTER_SEED_IP}
router-seed-port = 2551
router-seed-port = ${?ROUTER_CLUSTER_SEED_PORT}
name = "ExperimentCluster"
}
基本上种子节点在 127.0.0.1:2551 上运行,非种子节点在 127.0.0.1:2553 上运行
接下来,我想在一个 docker 容器中运行它们中的每一个,并让它们仍然形成一个集群。他们的演员系统运行,但非种子似乎无法加入种子节点
这是我启动种子节点的方式:
docker run -p=2551:2551 --rm seedroute:0.1.0-SNAPSHOT
这就是我启动非种子节点的方式:
docker run -p=2551:2551 --rm workerroute:0.1.0-SNAPSHOT
但在非种子节点的日志中,我看到以下内容:
[WARN] [11/24/2019 09:48:54.993] [ExperimentCluster-akka.actor.default-dispatcher-4] [akka.cluster.Cluster(akka://ExperimentCluster)] Cluster Node [akka.tcp://ExperimentCluster@127.0.0.1:2553] - Couldn't join seed nodes after [22] attempts, will try again. seed-nodes=[akka.tcp://ExperimentCluster@127.0.0.1:2551]
当我在单独的 JVM 上运行节点时,情况并非如此,这表明这与 docker 和网络有关。我认为传递-p 标志并公开端口会起作用,但显然还有更多关于我还不了解的网络方面。
我还没有使用 docker-compose 或 docker swarm。我最终将使用其中的一个,但由于这是一个学习练习,我希望在升级工具时正确掌握各个部分和基础知识。
那么有谁知道如何让它工作?基本上在 docker 容器中手动启动两个 Akka 节点,让它们能够相互通信并形成集群。
【问题讨论】:
标签: docker akka docker-networking akka-cluster