Akka Cluster加入DNS负载平衡

时间:2017-03-24 12:27:39

标签: java scala akka akka-cluster

查看akka cluster documentation,您必须知道服务器&加入集群的至少1个“种子节点”的端口值。示例application.conf清楚地表明开发人员在编写文件时需要知道“host1”和“host2”:

akka.cluster.seed-nodes = [
  "akka.tcp://ClusterSystem@host1:2552",
  "akka.tcp://ClusterSystem@host2:2552"]

但是,请考虑使用DNS负载均衡器注册每个群集节点的可能性。例如:可以实例化10个节点,这些节点都在名为“foobar.cluster.com”后面的负载均衡器中注册,这样负载均衡器就会将每个新连接发送到循环样式的10个节点之一。 / p>

我可以将种子节点设置为"akka.tcp://ClusterSystem@foobar.cluster.com:2552"吗?

换句话说,是否可以使用动态,负载平衡,名称加入akka群集?

先验存在一个潜在问题:节点可能在第一次尝试时将自己作为种子节点。此问题的一个可能解决方案是在conf文件中多次放置相同的种子节点值,以最终连接到不同节点的概率很高:

akka.cluster.seed-nodes = [
  "akka.tcp://ClusterSystem@foobar.cluster.com:2552",
  "akka.tcp://ClusterSystem@foobar.cluster.com:2552",
  "akka.tcp://ClusterSystem@foobar.cluster.com:2552"]

但是akka可能会将所有这些值减少到一次调用,因为它们完全相同...

提前感谢您的考虑和回应。

1 个答案:

答案 0 :(得分:4)

可能,但您必须自己执行DNS解析,然后以编程方式加入群集。这在这里有所描述:http://doc.akka.io/docs/akka/current/scala/cluster-usage.html#Joining_to_Seed_Nodes

因此,您首先需要配置文件包含akka.cluster.seed-nodes = []才能禁用自动加入。

然后,您需要解析foobar.cluster.com以获取实际节点列表,例如01.foobar.cluster.com02.foobar.cluster.com,...

您可以使用它们加入群集:Cluster(system).joinSeedNodes(_list_of_nodes_with_port)

最后,请记住the hostname and port pair that Akka binds to will be different than the "logical" host name and port pair that is used to connect to the system from the outside. This requires special configuration

时的情况