查看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可能会将所有这些值减少到一次调用,因为它们完全相同...
提前感谢您的考虑和回应。
答案 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.com
,02.foobar.cluster.com
,...
您可以使用它们加入群集:Cluster(system).joinSeedNodes(_list_of_nodes_with_port)
。