如何使用Akka Cluster正确部署

时间:2016-11-07 17:03:28

标签: scala deployment akka akka-cluster

方案

现在我们只有一个节点运行整个系统。我们想要的是区分"前端"节点和单个"后端"节点

  • "前端"节点(N个节点):通过WebSocket连接与客户端保持持久连接
  • "后端" node(1 node):处理从查询到数据库的所有前端节点发出的所有请求,并处理所需的域逻辑。

由于某些原因需要这种区别:

完成工作

我们将生活在前端节点上的演员与生活在后端的演员联系起来。我们已经完成了使用ActorRef从前端实例化后端节点akka.cluster.singleton.ClusterSingletonProxy,以及ClusterSingletonManager同时在后端实例化它们。

问题

我们如何根据Akka群集节点降级通知进行部署?

据我所知the Akka Cluster documentation about downingsome comments on the akka mailing list,在处理该过程时所采用的推荐方法如下:

  1. http://akka.io/downloads/
  2. 下载akka发行版
  3. akka-cluster bash脚本与jmxsh-R5.jar一起复制并粘贴到resources/bin/文件夹(例如)
  4. 在分发程序包中包含该文件夹(我在build.sbt上添加了以下行): mappings in Universal ++= (baseDirectory.value / "resources" / "bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName))
  5. 在部署时,将要部署的节点设置为关闭,手动调用bash脚本,如:
    • 执行bin/akka-cluster %node_to_be_deployed:port% down
    • 部署新代码版本
    • 执行bin/akka-cluster %deployed_node:port% join
  6. 疑惑:

    1. 这是一步一步的程序吗?
    2. 如果要部署的节点在部署后具有完全相同的IP和端口,是否需要制作downjoin
    3. 我们计划将一个前端和后端节点设置为种子节点。这样,可以在仅部署前端节点时或仅仅对后端节点进行部署时重建所有集群。这是对的吗?
    4. 谢谢!

1 个答案:

答案 0 :(得分:1)

要避免手动停机,请在终止节点时进行清理,请参阅: http://doc.akka.io/docs/akka/current/scala/cluster-usage.html#How_To_Cleanup_when_Member_is_Removed

关于你的观点:

  1. 重新启动JVM并执行清理代码时,不需要此过程。只有当清理代码以某种方式失败时,您才需要按照过程中的描述手动关闭。
  2. 当节点被其他节点标记为已删除时(执行清除代码后),可以使用相同的IP和端口组合重新加入群集。
  3. 是的,您可以重新部署前端节点。
  4. PS:
    - 在akka 2.5中将改进协调关闭,请参阅: https://github.com/akka/akka-meta/issues/38
    - 如果要使用http API管理群集,请参阅:http://developer.lightbend.com/docs/akka-cluster-management/current/