Playframework 如何使用Akka配置play应用程序以在集群中运行
我有一个PlayFramework(PlayScala)应用程序,我想在集群中运行。因此,我可能会运行此应用程序映像的多个docker容器。我不知道这些服务器的IP地址,因为云服务提供商可以动态启动和停止它们,所以我不能指定种子节点。另外,应用程序的每个实例的所有Playframework 如何使用Akka配置play应用程序以在集群中运行,playframework,akka,akka-cluster,Playframework,Akka,Akka Cluster,我有一个PlayFramework(PlayScala)应用程序,我想在集群中运行。因此,我可能会运行此应用程序映像的多个docker容器。我不知道这些服务器的IP地址,因为云服务提供商可以动态启动和停止它们,所以我不能指定种子节点。另外,应用程序的每个实例的所有application.conf文件都应该相同 如何配置play应用程序以使应用程序的每个实例都能够发现并加入Akka集群 我看过: 由于无法指定种子节点,是否必须使用 在application.conf文件(取自: 但是如果没有种子
application.conf
文件都应该相同
如何配置play应用程序以使应用程序的每个实例都能够发现并加入Akka集群
我看过:
由于无法指定种子节点,是否必须使用
在application.conf
文件(取自:
但是如果没有种子节点?如果是这样,节点如何发现和加入集群?根据需要,最好的选择可能是使用。要运行基于容器的服务,请使用AWS或更接近您的需要的服务发现
Akka Cluster Bootstrap
通过自动群集引导机制解决您不需要预先分配种子节点的问题。每个节点通过其公开的HTTP端点相互探测,如果不存在种子节点(即不存在群集),则为“最低”节点地址将使自己成为种子节点
,提示其他节点加入新形成的群集。有关更多详细信息,请参阅此
如Akka文档中所述,Akka集群引导
取决于模块Akka发现
和Akka管理
:
libraryDependencies ++= Seq(
"com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % "1.0.1",
"com.typesafe.akka" %% "akka-discovery" % "2.5.21"
)
对于使用ECS的服务发现
,将aws api ECS
或aws api ECS async
(用于非阻塞IO)分配给application.conf
中的akka.discovery.method
,其外观可能如下:
akka {
cluster {
seed-nodes = []
seed-nodes = ${?SEED_NODES}
}
# ...
management {
cluster.bootstrap {
contact-point-discovery {
required-contact-point-nr = 2
required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
}
}
# ...
}
discovery {
method = aws-api-ecs-async
aws-api-ecs-async {
cluster = "my-ecs-cluster"
}
}
}
对于使用Kubernetes的服务发现
,akka.discovery.method
应在application.conf
中分配Kubernetes api
,如下所示:
akka {
cluster {
seed-nodes = []
seed-nodes = ${?SEED_NODES}
}
# ...
management {
cluster.bootstrap {
contact-point-discovery {
required-contact-point-nr = 2
required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
}
}
# ...
}
discovery {
method = kubernetes-api
kubernetes-api {
pod-namespace = "default"
pod-namespace = ${?K8S_NAMESPACE}
pod-label-selector = "app=akka-cluster"
pod-label-selector = ${?K8S_SELECTOR}
pod-port-name = "cluster-mgmt-port"
pod-port-name = ${?K8S_MANAGEMENT_PORT}
}
}
}
谢谢你。你能包括一个建议的配置与AWS豆茎一起使用吗?@沙菲克贾马尔,不幸的是我没有任何相关的豆茎配置例子在手边分享。你可能想考虑发布一个单独的问题与具体的要求。顺便说一下,有一个不错的(虽然有点过时)。可能感兴趣的博客文章。
akka {
cluster {
seed-nodes = []
seed-nodes = ${?SEED_NODES}
}
# ...
management {
cluster.bootstrap {
contact-point-discovery {
required-contact-point-nr = 2
required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
}
}
# ...
}
discovery {
method = kubernetes-api
kubernetes-api {
pod-namespace = "default"
pod-namespace = ${?K8S_NAMESPACE}
pod-label-selector = "app=akka-cluster"
pod-label-selector = ${?K8S_SELECTOR}
pod-port-name = "cluster-mgmt-port"
pod-port-name = ${?K8S_MANAGEMENT_PORT}
}
}
}