Akka Cluster加入DNS负载平衡

Ram*_*gil 8 java scala akka akka-cluster

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

akka.cluster.seed-nodes = [
  "akka.tcp://ClusterSystem@host1:2552",
  "akka.tcp://ClusterSystem@host2:2552"]
Run Code Online (Sandbox Code Playgroud)

但是,请考虑使用DNS负载均衡器注册每个群集节点的可能性.例如:可以实例化10个节点,这些节点都使用名称"foobar.cluster.com"后面的负载均衡器进行注册,以便负载均衡器将每个新连接发送到10个节点循环样式之一.

我可以将种子节点设置为"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"]
Run Code Online (Sandbox Code Playgroud)

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

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

Fre*_* A. 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)

最后,请记住,Akka 绑定的主机名和端口对与用于从外部连接到系统的“逻辑”主机名和端口对不同。这需要特殊配置